{"version":3,"sources":["shared.module.scss","components/Button.module.scss","pages/components/shared.module.scss","components/UserDropdown.module.scss","pages/UserSettingsPage.module.scss","pages/LoginPage.module.scss","pages/components/DeviceCardListView.module.scss","pages/SignUpPage.module.scss","components/LanguageDropdown.module.scss","pages/components/DeviceCardGridView.module.scss","pages/DevicesListView.module.scss","components/Input.module.scss","components/ViewSwitch.module.scss","components/ErrorBoundary.module.scss","components/Select.module.scss","components/Dialog.module.scss","App.module.scss","components/TextField.module.scss","pages/components/AddNewDeviceListView.module.scss","components/Header.module.scss","components/Checkbox.module.scss","pages/components/AddNewDeviceGridView.module.scss","pages/PasswordRecoveryPage.module.scss","pages/DeviceSettings.module.scss","pages/InfoPage.module.scss","pages/components/ValidationErrors.module.scss","components/Footer.module.scss","components/Alert.module.scss","components/Loader.module.scss","pages/StatusPage.module.scss","pages/OfflinePage.module.scss","pages/AuthorizePage.module.scss","components/Dropdown.module.scss","pages/components/Recaptcha.module.scss","pages/MyDevicesPage.module.scss","pages/DevicesGridView.module.scss","pages/components/ValidatedCheckbox.module.scss","components/Button.js","components/Input.js","services/auth-service.js","constants/oem.js","api/idderocloud-api.js","constants/select.js","assets/icons/device-images/SER1-KNX.svg","assets/icons/device-images/VERIP.svg","constants/images.js","assets/icons/device-images/HC3-KNX.svg","assets/icons/device-images/HC3L-KNX.svg","assets/icons/device-images/HC2-KNX.svg","assets/icons/device-images/HC2L-KNX.svg","assets/icons/device-images/HC1i-KNX.svg","utils.js","redux/settings-slice.js","redux/auth-slice.js","components/Header.js","components/Link.js","components/Checkbox.js","components/Select.js","assets/icons/select-arrow.svg","i18n/hooks.js","i18n/index.js","assets/icons/flags/es.48.png","components/LanguageDropdown.js","assets/icons/flags/gb.48.png","assets/icons/flags/fr.48.png","assets/icons/flags/de.48.png","components/Footer.js","assets/icons/settings-icon.svg","components/PrivateRoute.js","assets/icons/help-icon.svg","assets/icons/logout-icon.svg","assets/icons/home-icon.svg","components/UserDropdown.js","constants/constants.js","hooks/useCountries.js","hooks/useLanguages.js","hooks/useOutsideClick.js","hooks/useScrollToTop.js","components/Dropdown.js","components/Alert.js","redux/devices-slice.js","assets/icons/grid-view-icon.svg","assets/icons/list-view-icon.svg","components/ViewSwitch.js","components/TextField.js","components/Loader.js","components/Dialog.js","assets/icons/oops.svg","components/ErrorBoundary.js","components/ScrollToTop.js","services/validation-service.js","pages/components/ValidationErrors.js","pages/components/ValidatedCheckbox.js","pages/components/ValidatedInput.js","assets/icons/device-setting-icon.svg","assets/icons/device-media-control.svg","pages/components/DeviceCardGridView.js","pages/components/DeviceCardListView.js","pages/components/Recaptcha.js","pages/components/ValidatedSelect.js","services/validation-functions.js","shared/validation.js","pages/components/UserSettingsForm.js","pages/components/ChangePasswordForm.js","assets/icons/add-device-icon.svg","pages/components/AddNewDeviceGridView.js","pages/components/AddNewDeviceListView.js","pages/LoginPage.js","pages/TermsPage.js","i18n/iddero/terms/terms-es.html","i18n/iddero/terms/terms-en.html","assets/icons/check.svg","assets/icons/exclamation.svg","assets/icons/info.svg","pages/StatusPage.js","pages/SignUpPage.js","pages/PasswordRecoveryPage.js","pages/MyDevicesPage.js","assets/icons/delete-bin.svg","pages/DevicesGridView.js","pages/UserSettingsPage.js","pages/DevicesListView.js","pages/DeviceSettings.js","pages/InfoPage.js","pages/HelpPage.js","i18n/iddero/help/help-en.html","i18n/iddero/help/help-es.html","i18n/iddero/help/help-fr.html","i18n/iddero/help/help-de.html","i18n/eelectron/help/help-en.html","i18n/eelectron/help/help-es.html","i18n/eelectron/help/help-fr.html","i18n/eelectron/help/help-de.html","pages/OfflinePage.js","pages/ConfirmSignUpPage.js","pages/ConfirmForgotPasswordPage.js","pages/ConfirmDeletePage.js","assets/icons/Amazon_Alexa_blue_logo.svg","pages/AuthorizePage.js","App.js","redux/voiceControl-slice.js","redux/store.js","services/redirect-service.js","index.js"],"names":["module","exports","Button","title","type","onClick","className","disabled","variant","size","icon","loading","variants","danger","styles","light","primary","sizeBtn","content","sm","lg","text","buttonTextSm","buttonTextLg","cn","button","buttonContent","Loader","loader","hidden","buttonText","sharedStyles","formText","buttonTextWithIcon","Input","label","id","name","onChange","labelClassName","multiline","value","htmlFor","input","textarea","items","ACCESS_TOKEN","REFRESH_TOKEN","USER","EMAIL","REMEMBER_ME","setTokens","rememberMe","accessToken","refreshToken","setItemToStorage","localStorage","setItem","setTokensAfterRefresh","tokens","isRememberMe","getItemFromStorage","key","getStorage","getItem","JSON","parse","sessionStorage","hasAccessToken","Boolean","setUser","user","email","getUserFromStorage","clearStorages","Object","values","forEach","item","removeItem","a","api","Error","revokeToken","tokenType","token","redirectToLogin","window","location","href","oemValues","cloudDomain","modelPrefix","modelNameMap","VERIP","VERIND","footerLink","customAvatar","voiceControl","voiceCompatible","SERVER_ERRORS","USER_ALREADY_EXISTS","DEVICE_ACCESS_DENIED","PRECONDITION_FAILED","NOT_FOUND","INCORRECT_PASSWORD","INVALID_CREDENTIALS","BAD_REQUEST","GATEWAY_TIMEOUT","getApiBaseUrl","process","apiClient","axios","create","baseURL","voiceApiClient","setupInterceptors","client","interceptors","request","use","config","headers","error","console","Promise","reject","response","originalRequest","status","_retry","getTokens","post","grant_type","client_id","data","access_token","refresh_token","refreshAuthToken","recoverPassword","recaptcha","username","recaptcha_response","confirmSignUp","confirmation_code","confirmForgotPassword","confirmDeleteUser","signup","password","country","lang","getUserData","get","token_type_hint","revoked","getDevices","devices","updateUser","changePassword","new_password","old_password","deleteUser","getDevice","updateDevice","comment","updatekey","friendly_name","authorize","authorizeData","INVALID_REQUEST","refreshDevice","cloudId","TIME_OUT","getControls","saveControl","control","newData","deleteControl","controlId","delete","deleteControls","countries","languages","deviceImages","SER1KNX","VERIP2","devicesWithoutPlayIcon","getQueryParam","fallback","qs","search","ignoreQueryPrefix","undefined","Array","isArray","isDeviceClickable","model","includes","getModelName","scrollToFirstValidationError","elem","firstError","document","querySelector","sharedErrorStyles","errorLabel","scrollIntoView","behavior","getUserDetails","createAsyncThunk","_","rejectWithValue","changeLanguage","createAction","payload","isLangSupported","find","entry","getLangFromQueryString","getNavigatorLang","navigator","length","map","split","language","navigatorLang","getInitialState","locale","userSettingsReqId","userSettings","userSettingsLoading","userSettingsFailed","settingsUpdateReqId","settingsUpdateLoading","settingsUpdated","settingUpdateFailed","changePasswordReqId","changePasswordPending","changePasswordUpdated","changePasswordFailed","changePassErrors","initialState","settingsSlice","createSlice","reducers","initSettingsUpdate","state","assign","extraReducers","builder","addCase","action","pending","meta","requestId","fulfilled","rejected","push","actions","getLocale","initLanguage","settings","isSettingsUpdateFailed","isSettingsUpdated","isSettingsUpdateLoading","getChangePasswordState","serverErrors","settingsReducer","reducer","login","dispatch","logout","authorizeApp","isLoggedIn","loginInProgress","loginFailed","invalidCredentials","signupInProgress","signupFailed","signupSuccess","signupErrors","recoverPasswordInProgress","recoverPasswordFailed","recoverPasswordError","logoutInProgress","authSlice","initRecoverPassword","initLogin","initSignup","updateUserName","initServerError","isRegistered","isUserLoggedIn","auth","getUser","userName","getLoginState","getPasswordRecoveryState","getSignupState","authReducer","Header","hideMenu","useSelector","header","container","Link","to","homeLink","src","alt","logo","UserDropdown","LanguageDropdown","children","link","Checkbox","checkboxWrapper","checked","labelContent","Select","options","defaultName","optionsState","select","marginBottom","selectWrapper","_g","_excluded","_extends","target","i","arguments","source","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgSelectArrow","_ref","svgRef","titleId","props","xmlns","width","height","viewBox","ref","transform","x2","y2","fill","stroke","strokeMiterlimit","strokeWidth","x1","ForwardRef","useFormatMessage","intl","useIntl","formatMessageFn","useCallback","formatMessage","defaultMessage","en","locales","enCountries","de","deCountries","es","esCountries","fr","frCountries","langIcons","useDispatch","tr","remainingLanguages","filter","Dropdown","renderHeader","onHeaderClick","showOpen","languageDropdownWrapper","FlagIcon","arrow","arrowOpen","renderBody","handleClick","idx","optionItem","handleLanguageClick","optionItemName","popoverWrapper","Footer","footer","footerLinks","copyright","secondaryText","style","whiteSpace","_path","PrivateRoute","Component","component","rest","render","pathname","from","SvgSettingsIcon","d","SvgHelpIcon","SvgLogoutIcon","SvgHomeIcon","history","useHistory","gravatarUrl","useMemo","defaultAvatar","hash","md5","trim","toLowerCase","params","stringify","s","AVATAR_SIZE","generateGravatarUrl","userDropdown","userDropdownWrapper","avatar","MenuItem","then","useCountriesOptions","useLanguagesOptions","useOutsideClick","isOpen","onClose","handleOutsideClick","e","path","composedPath","current","useEffect","body","addEventListener","removeEventListener","useScrollToTop","deps","scrollTo","useState","isOpened","setIsOpened","popoverRef","useRef","React","dropdown","Alert","severity","severities","success","alert","getUserDevices","condition","getState","device","updateUserDevice","updatedDevice","changeDevicesView","view","devicesView","devicesLoaded","userDeviceReqId","userDevice","userDeviceLoading","userDeviceError","updateDeviceReqId","updateDeviceInProgress","updateDeviceError","updateDeviceFailed","updateDeviceSuccess","devicesSlice","initDeviceDetails","getDevicesFailed","getDevicesView","getUserDeviceState","devicesReducer","SvgGridViewIcon","SvgListViewIcon","ViewSwitch","viewSwitch","pageTitle","viewTypeGroup","gridViewIcon","inactive","listViewIcon","TextField","valueWrapper","circularLoader","loaderPath","cx","cy","r","Dialog","buttons","dialogRef","renderContent","dialogContentText","disableScroll","on","off","dialogOverlay","dialogWrapper","dialogContentWrapper","mainText","dialogBtnGroup","handler","dialogBtn","SvgOops","ErrorBoundary","hasError","iconContainer","message","btn","handleReloadClick","ScrollToTop","useLocation","validateForm","validations","form","result","validation","isValid","serverFn","fieldName","fn","fieldNames","checkIsValid","errorMessage","field","fields","canResubmit","getErrorMsg","errors","er","obj","every","err","ValidationErrors","index","ValidatedCheckbox","onBlur","pristine","showErrors","checkBoxContainer","errorBorder","errorsBox","ValidatedInput","SvgDeviceSettingIcon","SvgDeviceMediaControl","DeviceCardGridView","deviceCard","open","backgroundImage","cursor","deviceCardWrapper","deviceModel","deviceName","deviceBtnGroup","stopPropagation","deviceIconLink","deviceSettingsIcon","devicePlayIcon","DeviceCardListView","deviceImage","deviceInfo","Recaptcha","rref","isInvalid","shouldRender","setShouldRender","handleChange","outer","theme","sitekey","hl","errorStyles","ValidatedSelect","validateRequired","validateDifferrent","passwordIsRequired","currentPasswordIsRequired","passwordValidations","test","nameValidation","emailIsRequired","emailValidation","countryValidation","changePassServerValidation","signupValidation","changePasswordValidation","passwordRecoveryValidation","loginValidation","userSettingsValidation","UserSettingsForm","countriesOptions","languagesOptions","formRef","setPristine","requestStatus","arg","enableReinitialize","initialValues","onSubmit","validationErrors","nameErrorMsg","countryErrorMsg","handleSubmit","formSeparator","userSettingsForm","handleBlur","btnGroup","ChangePasswordForm","formik","useFormik","currentPassword","confirmPassword","resetForm","passErrorMsg","confirmPassErrorMsg","currentPassMsg","SvgAddDeviceIcon","AddNewDeviceGridView","addNewDevice","addNewDeviceTitle","addNewDeviceImg","addNewDeviceLink","AddNewDeviceListView","addNewDeviceWrapper","addNewDeviceContent","LoginPage","replace","emailErrorMsg","loginPage","containerForLinks","formSection","color","textAlign","targetPage","TermsPage","InfoPage","page","pageClassName","SvgCheck","SvgExclamation","SvgInfo","StatusPage","buttonTitle","nextPage","info","statusPage","SignUpPage","stage","setStage","recaptchaRef","acceptTerms","setRecaptcha","reset","acceptErrorMsg","signupPage","overflow","tabIndex","termsLink","errorMessages","SERVER_ERROR","PasswordRecoveryPage","getPreviousPage","fromAuthorize","subtitle","backButton","MyDevicesPage","devicesLoadingFailed","initialLoadSuccessfull","interval","setInterval","clearInterval","devicesPage","devicesError","DevicesGridView","DevicesListView","skeletons","skeleton","devicesGridView","deviceId","SvgDeleteBin","UserSettingsPage","showModal","setShowModal","headerContainer","userSettingsError","settingsWrapper","containerForLink","btnDanger","overlay","even","odd","devicesListView","devicesListViewWrapper","devicesListHeaders","modelHeader","nameHeader","DeviceSettings","useParams","deviceSettings","deviceSettingsError","contentClassName","infoPage","contentContainer","dangerouslySetInnerHTML","__html","HelpPage","OfflinePage","setStatus","setCloudId","pkWhere","pkDomain","parent","domain","where","offlinePage","ConfirmSignUpPage","setMessage","setVariant","ConfirmForgotPasswordPage","ConfirmDeletePage","_path2","_path3","_defs","SvgAmazonAlexaBlueLogo","clipPath","fillRule","clipRule","maskType","maskUnits","x","y","mask","AuthorizePage","searchParams","URLSearchParams","authorizationParams","entries","reduce","parameters","parameter","loginStyles","authorizePage","alexaLogoContainer","App","route","currentLocale","messages","warn","isPublic","classList","remove","privateBackground","add","defaultLocale","wrapper","exact","refreshDeviceStatus","controls","zones","addControl","deviceControl","newControl","addInProgress","deleteInProgress","selected","configured","not_configured","voiceControlSlice","selectDevice","initEdit","loaded","controlIndex","findIndex","deviceList","voiceControlReducer","store","configureStore","redirects","redirect","getMatchingRedirect","redirectFromOldUrls","ReactDOM","StrictMode","getElementById"],"mappings":"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,KAFL,kBAKIA,GALJ,qG,sBAxSPnB,GAAkBL,GAEdrB,EAAUQ,cACZkB,GAAkBD,GC9Eb,IAAMkE,GAAY,CACvB,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAGWC,GAAY,CACvB,CAAE7I,MAAO,KAAMJ,KAAM,WACrB,CAAEI,MAAO,KAAMJ,KAAM,WACrB,CAAEI,MAAO,KAAMJ,KAAM,UACrB,CAAEI,MAAO,KAAMJ,KAAM,W,yCC9PR,43KCAA,40JCUFkJ,GAAe,CAC1B,UCXa,6/BDYb,WEZa,6uCFab,UGba,qxCHcb,WIda,ywCJeb,WKfa,q7BLgBb,WAAYC,GACZ,WAAYA,GACZ1F,MAAOA,GACPC,OAAQD,GACR2F,OAAQ3F,IAGG4F,GAAyB,CAAC,QAAS,SAAU,U,oBMhBnD,SAASC,GAActJ,EAAMuJ,GAClC,IACMnJ,EADQoJ,KAAG3H,MAAMqB,OAAOC,SAASsG,OAAQ,CAAEC,mBAAmB,IAChD1J,GACpB,OAAe,OAAVI,QAA4BuJ,IAAVvJ,QAAqCuJ,IAAbJ,EAE3CK,MAAMC,QAAQzJ,GAAeA,EAAM,GAChCA,EAFEmJ,EAKJ,SAASO,GAAkBC,GAChC,OAAOV,GAAuBW,SAASD,GAGlC,SAASE,GAAaF,EAAO/J,GAClC,OAAIA,IAEJ+J,EAAQ1G,EAAUG,aAAauG,IAAUA,EAIrB,qBAAT/J,GAAwBqD,EAAUE,YACpCF,EAAUE,YAAc,IAAMwG,EAE9BA,GAIJ,SAASG,GAA6BC,GAC3C,IAAMC,GAAcD,GAAQE,UAAUC,cAAlB,IAAD,OACbC,KAAkBC,aAEnBJ,GACLA,EAAWK,eAAe,CAAEC,SAAU,WClCjC,IAAMC,GAAiBC,YAC5B,oBAD4C,uCAE5C,WAAOC,EAAP,oBAAAlI,EAAA,6DAAYmI,EAAZ,EAAYA,gBAAZ,kBAEuBpG,KAFvB,cAEUxC,EAFV,yBAGWA,GAHX,yDAKW4I,EAAgB,EAAD,KAL1B,yDAF4C,yDAYjCtD,GAAaoD,YACxB,sBADwC,uCAExC,qCAAAjI,EAAA,6DAAS3C,EAAT,EAASA,KAAMgH,EAAf,EAAeA,QAASC,EAAxB,EAAwBA,KAAU6D,EAAlC,EAAkCA,gBAAlC,kBAEUpG,GAAqB,CACzB1E,OACAgH,UACAC,SALN,gFAQW6D,EAAgB,EAAD,KAR1B,yDAFwC,yDAe7BrD,GAAiBmD,YAC5B,0BAD4C,uCAE5C,qCAAAjI,EAAA,6DAASgF,EAAT,EAASA,aAAcD,EAAvB,EAAuBA,aAAkBoD,EAAzC,EAAyCA,gBAAzC,kBAEuBpG,GAAyB,CAC1CiD,eACAD,iBAJN,cAEUxB,EAFV,yBAMWA,GANX,yDAQW4E,EAAgB,EAAD,KAR1B,yDAF4C,yDAejCC,GAAiBC,YAC5B,2BACA,SAAiB/D,GAEf,OADA9F,aAAaC,QAAQ,gBAAiB6F,GAC/B,CAAEgE,QAAShE,MAwBtB,SAASiE,GAAgBjE,GACvB,OAAOgC,GAAUkC,MAAK,SAACC,GAAD,OAAWA,EAAMhL,QAAU6G,KAGnD,SAASoE,KACP,IAAMpE,EAAOqC,GAAc,QAC3B,GAAIrC,GAAQiE,GAAgBjE,GAC1B,OAAOA,EAIX,SAASqE,KACP,GAAIC,UAAUtC,WAAasC,UAAUtC,UAAUuC,OAK7C,OAJ2BD,UAAUtC,UAAUwC,KAC7C,SAACxE,GAAD,OAAUA,EAAKyE,MAAM,KAAK,MAEaP,KAAKD,IAIhD,GAAIK,UAAUI,SAAU,CACtB,IAAMC,EAAgBL,UAAUI,SAASD,MAAM,KAAK,GACpD,GAAIR,GAAgBU,GAAgB,OAAOA,GAI/C,SAASC,KAKP,OAAO,aACLC,OACET,MACAlK,aAAaQ,QAAQ,kBACrB2J,MACA,MAvDG,CACLS,kBAAmB,KACnBC,aAAc,GACdC,qBAAqB,EACrBC,oBAAoB,EAEpBC,oBAAqB,KACrBC,uBAAuB,EACvBC,iBAAiB,EACjBC,qBAAqB,EAErBC,oBAAqB,KACrBC,uBAAuB,EACvBC,uBAAuB,EACvBC,sBAAsB,EACtBC,iBAAkB,KA6CtB,IAAMC,GAAef,KAGRgB,GAAgBC,YAAY,CACvC9M,KAAM,WACN4M,gBACAG,SAAU,CACRC,mBAAoB,SAACC,GACnB3K,OAAO4K,OAAOD,EApEX,CACLlB,kBAAmB,KACnBC,aAAc,GACdC,qBAAqB,EACrBC,oBAAoB,EAEpBC,oBAAqB,KACrBC,uBAAuB,EACvBC,iBAAiB,EACjBC,qBAAqB,EAErBC,oBAAqB,KACrBC,uBAAuB,EACvBC,uBAAuB,EACvBC,sBAAsB,EACtBC,iBAAkB,OAwDpBQ,cAAe,SAACC,GACdA,EAAQC,QAAQtC,IAAgB,SAACkC,EAAOK,GACtCL,EAAMnB,OAASwB,EAAOrC,WAGxBmC,EAAQC,QAAQ1C,GAAe4C,SAAS,SAACN,EAAOK,GAC9CL,EAAMlB,kBAAoBuB,EAAOE,KAAKC,UACtCR,EAAMhB,qBAAsB,KAE9BmB,EAAQC,QAAQ1C,GAAe+C,WAAW,SAACT,EAAOK,GAC5CL,EAAMlB,oBAAsBuB,EAAOE,KAAKC,YAC5CR,EAAMjB,aAAesB,EAAOrC,QAC5BgC,EAAMhB,qBAAsB,MAE9BmB,EAAQC,QAAQ1C,GAAegD,UAAU,SAACV,EAAOK,GAC3CL,EAAMlB,oBAAsBuB,EAAOE,KAAKC,YAC5CR,EAAMf,oBAAqB,EAC3Be,EAAMhB,qBAAsB,MAG9BmB,EAAQC,QAAQ7F,GAAW+F,SAAS,SAACN,EAAOK,GAC1CL,EAAMd,oBAAsBmB,EAAOE,KAAKC,UACxCR,EAAMb,uBAAwB,EAC9Ba,EAAMZ,iBAAkB,EACxBY,EAAMX,qBAAsB,KAE9Bc,EAAQC,QAAQ7F,GAAWkG,WAAW,SAACT,EAAOK,GACxCL,EAAMd,sBAAwBmB,EAAOE,KAAKC,YAC9CR,EAAMZ,iBAAkB,EACxBY,EAAMb,uBAAwB,EAC9Ba,EAAMX,qBAAsB,MAE9Bc,EAAQC,QAAQ7F,GAAWmG,UAAU,SAACV,EAAOK,GACvCL,EAAMd,sBAAwBmB,EAAOE,KAAKC,YAC9CR,EAAMb,uBAAwB,EAC9Ba,EAAMX,qBAAsB,EAC5BW,EAAMZ,iBAAkB,MAG1Be,EAAQC,QAAQ5F,GAAe8F,SAAS,SAACN,EAAOK,GAC9CL,EAAMV,oBAAsBe,EAAOE,KAAKC,UACxCR,EAAMT,uBAAwB,EAC9BS,EAAMP,sBAAuB,EAC7BO,EAAMR,uBAAwB,KAEhCW,EAAQC,QAAQ5F,GAAeiG,WAAW,SAACT,EAAOK,GAC5CL,EAAMV,sBAAwBe,EAAOE,KAAKC,YAC9CR,EAAMT,uBAAwB,EAC9BS,EAAMR,uBAAwB,EAC9BQ,EAAMN,iBAAmB,OAE3BS,EAAQC,QAAQ5F,GAAekG,UAAU,SAACV,EAAOK,GAC3CL,EAAMV,sBAAwBe,EAAOE,KAAKC,YAC9CR,EAAMT,uBAAwB,EAC9BS,EAAMP,sBAAuB,EACzBY,EAAOrC,QAAQlN,MACjBkP,EAAMN,iBAAiBiB,KAAKN,EAAOrC,QAAQlN,UAG/CqP,EAAQC,QAAQ,yBAAyB,WACvC,OAAO,eAAKxB,YAMX,GAA6CgB,GAAcgB,QAAnDb,GAAR,GAAQA,mBAGFc,IAHN,GAA4BC,aAGV,SAACd,GAAD,OAAWA,EAAMe,SAASlC,SACtC5E,GAAc,SAAC+F,GAAD,MAAY,CACrC/K,KAAM+K,EAAMe,SAAShC,aACrBC,oBAAqBgB,EAAMe,SAAS/B,oBACpCC,mBAAoBe,EAAMe,SAAS9B,qBAExB+B,GAAyB,SAAChB,GAAD,OACpCA,EAAMe,SAAS1B,qBACJ4B,GAAoB,SAACjB,GAAD,OAAWA,EAAMe,SAAS3B,iBAC9C8B,GAA0B,SAAClB,GAAD,OACrCA,EAAMe,SAAS5B,uBAEJgC,GAAyB,SAAC,GAAD,IAAGJ,EAAH,EAAGA,SAAH,MAAmB,CACvDxB,sBAAuBwB,EAASxB,sBAChCE,qBAAsBsB,EAAStB,qBAC/BD,sBAAuBuB,EAASvB,sBAChC4B,aAAcL,EAASrB,mBAGZ2B,GAAkBzB,GAAc0B,QC3MhCC,GAAQ5D,YACnB,aADmC,uCAEnC,yCAAAjI,EAAA,6DAAST,EAAT,EAASA,KAAMnB,EAAf,EAAeA,WAAgB+J,EAA/B,EAA+BA,gBAAiB2D,EAAhD,EAAgDA,SAAhD,kBAEyB/J,GAAoBxC,GAF7C,WAEUZ,EAFV,QAGgBN,YAHhB,sBAIY,IAAI6B,MAAM,wCAJtB,cAMI/B,EAAUQ,EAAQP,GANtB,UAOuB2D,GAAsBxC,EAAKsE,UAPlD,eAQIvE,EACE,CAAEC,MAFEgE,EAPV,QASmBlG,KAAM2L,SAAUzF,EAAKe,KAAM9E,MAAO+D,EAAKM,UACpDzF,GAEF0N,EAAS1D,GAAe7E,EAAKe,OAZjC,kBAaW,CAAEjH,KAAMkG,EAAKlG,KAAMmC,MAAO+D,EAAKM,WAb1C,yCAeInE,IAfJ,kBAgBWyI,EAAgB,EAAD,KAhB1B,0DAFmC,yDAwBxB4D,GAAS9D,YAAiB,cAAD,sBAAgB,sBAAAjI,EAAA,+EAE1BG,EAAY,iBAFc,eAIhDyC,QAAQD,MAAM,0BAJkC,gDAOlDC,QAAQD,MAAM,yBAAd,MAPkD,yBASlDjD,IATkD,6EAazCiE,GAAkBsE,YAC7B,uBAD6C,uCAE7C,mCAAAjI,EAAA,6DAASR,EAAT,EAASA,MAAOoE,EAAhB,EAAgBA,UAAeuE,EAA/B,EAA+BA,gBAA/B,kBAEUpG,GAA0BvC,EAAOoE,GAF3C,gFAIWuE,EAAgB,EAAD,KAJ1B,yDAF6C,yDAWlChE,GAAS8D,YACpB,cADoC,uCAEpC,2CAAAjI,EAAA,6DACI6D,EADJ,EACIA,SAAUO,EADd,EACcA,SAAU/G,EADxB,EACwBA,KAAMgH,EAD9B,EAC8BA,QAASC,EADvC,EACuCA,KAAMR,EAD7C,EAC6CA,mBACzCqE,EAFJ,EAEIA,gBAFJ,kBAKUpG,GAAiB,CACrB8B,WACAO,WACA/G,OACAgH,UACAC,OACAR,uBAXN,gFAcWqE,EAAgB,EAAD,KAd1B,yDAFoC,yDAqBzBpE,GAAgBkE,YAC3B,qBAD2C,uCAE3C,mCAAAjI,EAAA,6DAASgE,EAAT,EAASA,kBAAuBmE,EAAhC,EAAgCA,gBAAhC,kBAEuBpG,GAAwB,CACzCiC,sBAHN,cAEUT,EAFV,yBAKWA,GALX,yDAOW4E,EAAgB,EAAD,KAP1B,yDAF2C,yDAchClE,GAAwBgE,YACnC,6BADmD,uCAEnD,mCAAAjI,EAAA,6DAASgE,EAAT,EAASA,kBAAuBmE,EAAhC,EAAgCA,gBAAhC,kBAEuBpG,GAAgC,CACjDiC,sBAHN,cAEUT,EAFV,yBAKWA,GALX,yDAOW4E,EAAgB,EAAD,KAP1B,yDAFmD,yDAcxCjE,GAAoB+D,YAC/B,yBAD+C,uCAE/C,mCAAAjI,EAAA,6DAASgE,EAAT,EAASA,kBAAuBmE,EAAhC,EAAgCA,gBAAhC,kBAEuBpG,GAA4B,CAC7CiC,sBAHN,cAEUT,EAFV,yBAKWA,GALX,yDAOW4E,EAAgB,EAAD,KAP1B,yDAF+C,yDAcpClD,GAAagD,YACxB,kBADwC,uCAExC,WAAOC,EAAP,oBAAAlI,EAAA,6DAAYmI,EAAZ,EAAYA,gBAAZ,kBAEuBpG,KAFvB,cAEUxC,EAFV,yBAGWA,GAHX,yDAKW4I,EAAgB,EAAD,KAL1B,yDAFwC,yDAY7B6D,GAAe/D,YAC1B,oBAD0C,uCAE1C,WAAOzC,EAAP,oBAAAxF,EAAA,6DAAwBmI,EAAxB,EAAwBA,gBAAxB,kBAE2BpG,GAAoByD,GAF/C,cAEUhF,EAFV,yBAGWA,GAHX,yDAKW2H,EAAgB,EAAD,KAL1B,yDAF0C,yDAoD5C,IAAM8B,GAdG,iDACLgC,WAAY7M,IAEZG,KAAME,IAAqBF,KAC3BC,MAAOC,IAAqBD,OA7BvB,CACL0M,iBAAiB,EACjBC,aAAa,EACbC,oBAAoB,IAKf,CACLC,kBAAkB,EAClBC,cAAc,EACdC,eAAe,EACfC,aAAc,KAKT,CACLC,2BAA2B,EAC3BC,uBAAuB,EACvBC,qBAAsB,OAKxB,IAUEC,kBAAkB,IAOTC,GAAY1C,YAAY,CACnC9M,KAAM,OACN4M,gBACAG,SAAU,CACR0C,oBAAqB,SAACxC,GACpB3K,OAAO4K,OAAOD,EA9BX,CACLmC,2BAA2B,EAC3BC,uBAAuB,EACvBC,qBAAsB,QA6BtBI,UAAW,SAACzC,GACV3K,OAAO4K,OAAOD,EAlDX,CACL4B,iBAAiB,EACjBC,aAAa,EACbC,oBAAoB,KAiDpBY,WAAY,SAAC1C,GACX3K,OAAO4K,OAAOD,EA7CX,CACL+B,kBAAkB,EAClBC,cAAc,EACdC,eAAe,EACfC,aAAc,MA2CdS,eAAgB,SAAC3C,EAAOK,GACtBL,EAAM/K,KAAOoL,EAAOrC,SAEtB4E,gBAAiB,SAAC5C,GAChBA,EAAMkC,aAAe,KAGzBhC,cAAe,SAACC,GACdA,EAAQC,QAAQmB,GAAMjB,SAAS,SAACN,GAC9BA,EAAM4B,iBAAkB,EACxB5B,EAAM6B,aAAc,EACpB7B,EAAM8B,oBAAqB,KAE7B3B,EAAQC,QAAQmB,GAAMd,WAAW,SAACT,EAAOK,GACvCL,EAAM4B,iBAAkB,EACxB5B,EAAM2B,YAAa,EACnB3B,EAAM/K,KAAOoL,EAAOrC,QAAQjL,KAC5BiN,EAAM9K,MAAQmL,EAAOrC,QAAQ9I,SAE/BiL,EAAQC,QAAQmB,GAAMb,UAAU,SAACV,EAAOK,GAAY,IAAD,GAE/C,UAAAA,EAAOrC,eAAP,eAAgBlN,QAAS2G,EAAwBL,sBAEjD4I,EAAM8B,oBAAqB,GAE7B9B,EAAM4B,iBAAkB,EACxB5B,EAAM6B,aAAc,KAGtB1B,EAAQC,QAAQvG,GAAOyG,SAAS,SAACN,GAC/BA,EAAMkC,aAAe,GACrBlC,EAAM+B,kBAAmB,EACzB/B,EAAMgC,cAAe,KAEvB7B,EAAQC,QAAQvG,GAAO4G,WAAW,SAACT,GACjCA,EAAM6C,cAAe,EACrB7C,EAAM+B,kBAAmB,EACzB/B,EAAMgC,cAAe,KAEvB7B,EAAQC,QAAQvG,GAAO6G,UAAU,SAACV,EAAOK,GACnCA,EAAOrC,QAAQlN,KACjBkP,EAAMkC,aAAavB,KAAKN,EAAOrC,QAAQlN,MAEvCkP,EAAMgC,cAAe,EAEvBhC,EAAM+B,kBAAmB,KAG3B5B,EAAQC,QAAQqB,GAAOnB,SAAS,SAACN,GAC/BA,EAAMsC,kBAAmB,KAE3BnC,EAAQC,QAAQqB,GAAOhB,WAAW,SAACT,GACjCA,EAAMsC,kBAAmB,EACzBtC,EAAM2B,YAAa,EACnB3B,EAAM/K,KAAO,KACb+K,EAAM9K,MAAQ,QAGhBiL,EAAQC,QAAQ/G,GAAgBiH,SAAS,SAACN,GACxCA,EAAMmC,2BAA4B,EAClCnC,EAAMoC,uBAAwB,EAC9BpC,EAAMqC,qBAAuB,QAE/BlC,EAAQC,QAAQ/G,GAAgBoH,WAAW,SAACT,GAC1CA,EAAMmC,2BAA4B,EAClCnC,EAAMoC,uBAAwB,KAEhCjC,EAAQC,QAAQ/G,GAAgBqH,UAAU,SAACV,EAAOK,GAC5CA,EAAOrC,QAAQlN,OACjBkP,EAAMqC,qBAAuBhC,EAAOrC,QAAQlN,MAE9CkP,EAAMmC,2BAA4B,EAClCnC,EAAMoC,uBAAwB,KAEhCjC,EAAQC,QAAQsB,GAAapB,SAAS,SAACN,GACrCA,EAAM4B,iBAAkB,EACxB5B,EAAM6B,aAAc,EACpB7B,EAAM8B,oBAAqB,KAE7B3B,EAAQC,QAAQsB,GAAahB,UAAU,SAACV,EAAOK,GAAY,IAAD,GAEtD,UAAAA,EAAOrC,eAAP,eAAgBlN,QAAS2G,EAAwBL,sBAEjD4I,EAAM8B,oBAAqB,GAE7B9B,EAAM4B,iBAAkB,EACxB5B,EAAM6B,aAAc,QAKnB,GAMHU,GAAU3B,QALZ4B,GADK,GACLA,oBACAC,GAFK,GAELA,UACAC,GAHK,GAGLA,WACAC,GAJK,GAILA,eACAC,GALK,GAKLA,gBAIWE,GAAiB,SAAC9C,GAAD,OAAWA,EAAM+C,KAAKpB,YACvCqB,GAAU,SAAC,GAAD,IAAGD,EAAH,EAAGA,KAAH,MAAe,CACpCE,SAAUF,EAAK9N,KACfC,MAAO6N,EAAK7N,QAGDgO,GAAgB,SAAC,GAAD,IAAGH,EAAH,EAAGA,KAAH,MAAe,CAC1CpB,WAAYoB,EAAKpB,WACjBC,gBAAiBmB,EAAKnB,gBACtBC,YAAakB,EAAKlB,YAClBC,mBAAoBiB,EAAKjB,qBAGdqB,GAA2B,SAAC,GAAD,IAAGJ,EAAH,EAAGA,KAAH,MAAe,CACrDZ,0BAA2BY,EAAKZ,0BAChCC,sBAAuBW,EAAKX,sBAC5BC,qBAAsBU,EAAKV,uBAIhBe,GAAiB,SAAC,GAAD,IAAGL,EAAH,EAAGA,KAAH,MAAe,CAC3C3B,aAAc2B,EAAKb,aACnBH,iBAAkBgB,EAAKhB,iBACvBC,aAAce,EAAKf,eAGRqB,GAAcd,GAAUjB,Q,oBClU9B,SAASgC,GAAT,GAA+B,IAAbC,EAAY,EAAZA,SACjB5B,EAAa6B,YAAYV,IAE/B,OACE,wBAAQ9R,UAAWkB,IAAGV,KAAOiS,OAAQhR,IAAab,SAAlD,SACE,sBAAKZ,UAAWQ,KAAOkS,UAAvB,UACE,cAACC,GAAD,CAAMC,GAAG,IAAI5S,UAAWQ,KAAOqS,SAA/B,SACE,qBAAKC,IAAI,mBAAmBC,IAAI,OAAO/S,UAAWQ,KAAOwS,UAEzDT,IAAa5B,EAAa,cAACsC,GAAD,IAAmB,cAACC,GAAD,UCZhD,SAASP,GAAT,GAAqD,IAArCC,EAAoC,EAApCA,GAAI5S,EAAgC,EAAhCA,UAAWmT,EAAqB,EAArBA,SAAUpT,EAAW,EAAXA,QAC9C,OAAK6S,EASH,cAAC,IAAD,CACEA,GAAIA,EACJ5S,UAAWkB,IAAGO,IAAa2R,KAAMpT,EAAWyB,IAAaC,UACzD3B,QAASA,EAHX,SAKGoT,IAZD,qBAAKpT,QAASA,EAASC,UAAWkB,IAAGO,IAAa2R,KAAMpT,GAAxD,SACGmT,I,wBCJF,SAASE,GAAT,GAQH,IAPFxR,EAOC,EAPDA,MACAC,EAMC,EANDA,GACAC,EAKC,EALDA,KACAC,EAIC,EAJDA,SACAC,EAGC,EAHDA,eACAjC,EAEC,EAFDA,UACAmC,EACC,EADDA,MAEA,OACE,sBAAKnC,UAAWQ,KAAO8S,gBAAvB,UACE,uBACEC,QAASpR,EACTJ,KAAMA,EACND,GAAIA,EACJhC,KAAK,WACLE,UAAWkB,IAAGV,KAAO6B,MAAOrC,EAAWyB,IAAaC,UACpDM,SAAUA,IAEXH,GACC,uBAAO7B,UAAWkB,IAAGV,KAAOqB,MAAOI,GAAiBG,QAASN,EAA7D,SACE,sBAAM9B,UAAWQ,KAAOgT,aAAxB,SAAuC3R,S,wBCpB1C,SAAS4R,GAAT,GAUH,IATF1R,EASC,EATDA,KACAC,EAQC,EARDA,SACA0R,EAOC,EAPDA,QACA7R,EAMC,EANDA,MACA8R,EAKC,EALDA,YACA3T,EAIC,EAJDA,UACAiC,EAGC,EAHDA,eACA2R,EAEC,EAFDA,aACAvT,EACC,EADDA,QAEA,OACE,gCACE,uBACEL,UAAWkB,IAAGV,KAAOqB,MAAOI,EAAgBR,IAAaC,UAD3D,SAGGG,IAEFxB,EACC,cAAC,IAAD,CAAUL,UAAWkB,IAAGV,KAAOqT,OAAQrT,KAAOsT,gBAE9C,qBAAK9T,UAAWkB,IAAGV,KAAOuT,cAAevT,KAAOsT,cAAhD,SACE,yBACE3R,MAAOyR,EACP7R,KAAMA,EACNC,SAAUA,EACVhC,UAAWkB,IAAGV,KAAOqT,OAAQ7T,EAAWyB,IAAaC,UAJvD,UAMGiS,GAAe,wBAAQ1T,UAAQ,EAACkC,MAAM,GAAvB,SAA2BwR,IAC1CD,U,IClCTM,G,oBAEAC,GAAY,CAAC,QAAS,WAE1B,SAASC,KAA2Q,OAA9PA,GAAW7P,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkBD,GAASQ,MAAMC,KAAMN,WAEhT,SAASO,GAAyBN,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxMc,CAA8BX,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAASkB,GAAeC,EAAMC,GAC5B,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQb,GAAyBU,EAAMrB,IAE3C,OAAoB,gBAAoB,MAAOC,GAAS,CACtDwB,MAAO,6BACPC,MAAO,OACPC,OAAQ,MACRC,QAAS,mBACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAMmU,KAAOA,GAAkB,gBAAoB,IAAK,CAClElS,GAAI,UACJ,YAAa,UACbiU,UAAW,gCACG,gBAAoB,OAAQ,CAC1CjU,GAAI,SACJ,YAAa,SACbkU,GAAI,MACJC,GAAI,MACJF,UAAW,8BACXG,KAAM,OACNC,OAAQ,eACRC,iBAAkB,GAClBC,YAAa,QACE,gBAAoB,OAAQ,CAC3CvU,GAAI,SACJ,YAAa,SACbwU,GAAI,MACJL,GAAI,MACJF,UAAW,8BACXG,KAAM,OACNC,OAAQ,eACRC,iBAAkB,GAClBC,YAAa,WAIjB,IAAIE,GAA0B,aAAiBlB,I,IAChC,I,uFC7CR,SAASmB,KACd,IAAMC,EAAOC,eAEPC,EAAkBC,uBACtB,SAAC9U,EAAIwC,EAAQgH,GAAb,OACEmL,EAAKI,cACH,CAAE/U,KAAIgV,eAAgBxL,GAAYyL,GAAGjV,IAAOA,GAC5CwC,KAEJ,CAACmS,IAMH,OAHAE,EAAgB9I,OAAS4I,EAAK5I,OAC9B8I,EAAgBF,KAAOA,EAEhBE,ECbF,IAAMK,GAAU,CACrBD,GAAG,2BAAMA,IAAOE,IAChBC,GAAG,2BAAMA,IAAOC,IAChBC,GAAG,2BAAMA,IAAOC,IAChBC,GAAG,2BAAMA,IAAOC,KCfH,ICcTC,GAAY,CAAEJ,GDdL,i8ECcSL,GCdT,6iIDcaO,GEdb,y3DFciBJ,GGdjB,kmDHgBR,SAAShE,KACd,IAAM1C,EAAWiH,cACXC,EAAKlB,KACL3I,EAAS2E,YAAY3C,IACrB8H,EAAqB3M,GAAU4M,QACnC,SAAClK,GAAD,OAAcA,EAASvL,QAAU0L,KAQnC,OACE,cAACgK,GAAD,CACEC,aAAc,SAACC,EAAeC,GAAhB,OACZ,sBAAKhY,UAAWQ,KAAOyX,wBAAyBlY,QAASgY,EAAzD,UACE,cAACG,GAAD,CACElP,KAAM6E,EACNkF,IAAI,sBACJ/S,UAAWQ,KAAOJ,OAEpB,cAAC,GAAD,CACE2S,IAAI,gBACJ/S,UAAWkB,IAAGV,KAAO2X,MAAOH,GAAYxX,KAAO4X,iBAIrDC,WAAY,SAACC,GAAD,OACV,6BACGX,EAAmBnK,KAAI,WAAkB+K,GAAlB,IAAGpW,EAAH,EAAGA,MAAOJ,EAAV,EAAUA,KAAV,OACtB,qBAEE/B,UAAWQ,KAAOgY,WAClBzY,QAAS,kBA1BrB,SAA6B2N,EAAU4K,GACrC9H,EAAS1D,GAAeY,IACxB4K,IAwByBG,CAAoBtW,EAAOmW,IAH5C,UAKE,cAACJ,GAAD,CACElP,KAAM7G,EACNnC,UAAWQ,KAAOJ,KAClB2S,IAAG,UAAKhR,EAAL,WAEL,mBAAG/B,UAAWQ,KAAOkY,eAArB,SAAsChB,EAAG3V,OATpCwW,SAcbvY,UAAWQ,KAAOmY,iBAKxB,SAAST,GAAT,GAAwC,IAApBlP,EAAmB,EAAnBA,KAAMhJ,EAAa,EAAbA,UACxB,OACE,qBAAKA,UAAWA,EAAW+S,IAAG,UAAK/J,EAAL,SAAkB8J,IAAK0E,GAAUxO,K,wBI9D5D,SAAS4P,GAAT,GAAgC,IAAd5Y,EAAa,EAAbA,UACjB0X,EAAKlB,KAEX,OACE,wBAAQxW,UAAWkB,IAAGV,KAAOqY,OAAQ7Y,GAArC,SACE,sBAAKA,UAAWkB,IAAGV,KAAOsY,aAA1B,UACE,oBACE3T,KAAM,WAAaC,EAAUM,WAC7B1F,UAAWkB,IACTV,KAAOuY,UACPtX,IAAa2R,KACb3R,IAAauX,eALjB,kBAQK5T,EAAUM,cAEf,sBAAMuT,MAAO,CAAEC,WAAY,OAA3B,sBACA,cAACvG,GAAD,CACEC,GAAG,wBACH5S,UAAWkB,IAAGO,IAAa2R,KAAM3R,IAAauX,eAFhD,SAIGtB,EAAG,+B,IC5BVyB,G,2BCKSC,GAAe,SAAC,GAAuC,IAA1BC,EAAyB,EAApCC,UAAyBC,EAAW,mBAC3D5I,EAAa6B,YAAYV,IAE/B,OACE,cAAC,IAAD,2BACMyH,GADN,IAEEC,OAAQ,SAAC/D,GAAD,OACN9E,EACE,cAAC0I,EAAD,eAAe5D,IAEf,cAAC,IAAD,CACE7C,GAAI,CAAE6G,SAAU,SAAUzK,MAAO,CAAE0K,KAAMjE,EAAMvQ,kB,oBDdvD,GAAY,CAAC,QAAS,WAE1B,SAAS,KAA2Q,OAA9P,GAAWb,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAASwF,GAAgBrE,EAAMC,GAC7B,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAMsZ,KAAUA,GAAqB,gBAAoB,OAAQ,CAC3ErX,GAAI,oBACJ8X,EAAG,8lCACH1D,KAAM,mBAIV,IEjCI,GFiCA,GAA0B,aAAiByD,IE/B3C,IFgCW,IEhCC,CAAC,QAAS,YAE1B,SAAS,KAA2Q,OAA9P,GAAWtV,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAAS0F,GAAYvE,EAAMC,GACzB,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3EiC,GAAI,wBACJ8X,EAAG,sfACH1D,KAAM,mBAIV,ICjCI,GDiCA,GAA0B,aAAiB2D,IC/B3C,IDgCW,IChCC,CAAC,QAAS,YAE1B,SAAS,KAA2Q,OAA9P,GAAWxV,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAAS2F,GAAcxE,EAAMC,GAC3B,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,KACPC,OAAQ,GACRC,QAAS,cACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3EiC,GAAI,uBACJ8X,EAAG,gFACH7D,UAAW,kBACXG,KAAM,mBAIV,IClCI,GDkCA,GAA0B,aAAiB4D,IChC3C,IDiCW,ICjCC,CAAC,QAAS,YAE1B,SAAS,KAA2Q,OAA9P,GAAWzV,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAAS4F,GAAYzE,EAAMC,GACzB,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAO,GAAkB,gBAAoB,IAAK,CAClEiC,GAAI,YACJ,YAAa,YACbiU,UAAW,wBACG,gBAAoB,OAAQ,CAC1CjU,GAAI,cACJ,YAAa,cACb8X,EAAG,qqBACH7D,UAAW,kBACXG,KAAM,oBAIV,IAAI,GAA0B,aAAiB6D,IAChC,ICvBR,SAAS9G,KACd,IAAM+G,EAAUC,cACVvC,EAAKlB,KACLhG,EAAWiH,cACjB,EAA4BjF,YAAYR,IAAhCC,EAAR,EAAQA,SAAU/N,EAAlB,EAAkBA,MAEZgW,EAAcC,mBAAQ,kBrBmBvB,SAA6BjW,GAC7BA,IAAOA,EAAQ,2BAIpB,IAAMkW,EAAgBhV,EAAUO,aAAV,UACfa,8BADe,uBAElB,KACE6T,EAAOC,KAAIpW,EAAMqW,OAAOC,eACxBC,EAASlP,KAAGmP,UAAU,CAAEC,EAAGC,GAAiBhB,EAAGQ,IACrD,MAAM,mCAAN,OAA0CC,EAA1C,YAAkDI,GqB7BhBI,CAAoB3W,KAAQ,CAACA,IAE/D,OACE,cAAC2T,GAAD,CACEC,aAAc,SAACQ,EAAaN,GAC1B,OACE,sBAAKhY,UAAWQ,KAAOsa,aAAc/a,QAASuY,EAA9C,UACE,sBAAKtY,UAAWQ,KAAOua,oBAAvB,UACE,qBAAK/a,UAAWkB,IAAGV,KAAOyR,SAAUxQ,IAAaC,UAAjD,SACGuQ,IAEH,cAAC,GAAD,CACEc,IAAI,gBACJ/S,UAAWkB,IAAGV,KAAO2X,MAAOH,GAAYxX,KAAO4X,gBAGnD,qBACEtF,IAAKoH,EACLnH,IAAI,SACJ/S,UAAWQ,KAAOwa,OAClB/B,MAAO,CAAEtD,MC1CI,GD0CgBC,OC1ChB,UD+CrByC,WAAY,SAACC,GAAD,OACV,+BACE,cAAC2C,GAAD,CACElZ,KAAM2V,EAAG,QACT3X,QAAS,WACPia,EAAQrK,KAAK,KACb2I,KAJJ,SAOE,cAAC,GAAD,CAAUtY,UAAWQ,KAAOJ,KAAM2S,IAAI,qBAExC,cAACkI,GAAD,CACElZ,KAAM2V,EAAG,YACT3X,QAAS,WACPia,EAAQrK,KAAK,aACb2I,KAJJ,SAOE,cAAC,GAAD,CAActY,UAAWQ,KAAOJ,KAAM2S,IAAI,yBAE5C,cAACkI,GAAD,CACElZ,KAAM2V,EAAG,QACT3X,QAAS,WACPia,EAAQrK,KAAK,SACb2I,KAJJ,SAOE,cAAC,GAAD,CAAUtY,UAAWQ,KAAOJ,KAAM2S,IAAI,qBAExC,uBACA,cAACkI,GAAD,CACElZ,KAAM2V,EAAG,UACT3X,QAAS,WACPyQ,EAASC,MAAUyK,MAAK,WACtBlB,EAAQrK,KAAK,aAEf2I,KANJ,SASE,cAAC,GAAD,CAAYtY,UAAWQ,KAAOJ,KAAM2S,IAAI,6BAQpD,SAASkI,GAAT,GAA2D,IAAvClb,EAAsC,EAAtCA,QAASgC,EAA6B,EAA7BA,KAAMoR,EAAuB,EAAvBA,SAAUnT,EAAa,EAAbA,UAC3C,OACE,qBAAIA,UAAWkB,IAAGV,KAAOgY,WAAYxY,GAAYD,QAASA,EAA1D,UACE,mBAAGC,UAAWQ,KAAOkY,eAArB,SAAsC3W,IACrCoR,K,wBEhGA,SAASgI,KACd,IAAMzD,EAAKlB,KAOX,OALyBzL,GAAUyC,KAAI,SAACzE,EAASwP,GAAV,OACrC,wBAAQpW,MAAO4G,EAAf,SACG2O,EAAG,WAAD,OAAY3O,KADjB,UAAgCA,EAAhC,YAA2CwP,OCJxC,SAAS6C,KACd,IAAM1D,EAAKlB,KAQX,OANyBxL,GAAUwC,KAAI,SAACE,EAAU6K,GAAX,OACrC,wBAAQpW,MAAOuL,EAASvL,MAAxB,SACGuV,EAAGhK,EAAS3L,OADf,UAAuC2L,EAASvL,MAAhD,YAAyDoW,OCLtD,IAAM8C,GAAkB,SAACC,EAAQxF,EAAKyF,GAC3C,IAAMC,EAAqB5E,uBACzB,SAAC6E,GACMH,KACQG,EAAEC,MAASD,EAAEE,cAAgBF,EAAEE,gBAClC5P,SAAS+J,EAAI8F,UACrBL,OAGJ,CAACD,EAAQC,EAASzF,IAGpB+F,qBAAU,WAGR,OAFAzP,SAAS0P,KAAKC,iBAAiB,QAASP,GAEjC,WACLpP,SAAS0P,KAAKE,oBAAoB,QAASR,MAE5C,CAACA,EAAoBF,KClBnB,SAASW,GAAeC,GAC7B,OAAOL,qBAAU,WACf5W,OAAOkX,SAAS,EAAG,KAElBD,GAAQ,ICAN,SAASrE,GAAT,GAA4D,IAAxCC,EAAuC,EAAvCA,aAAcO,EAAyB,EAAzBA,WAAYrY,EAAa,EAAbA,UACnD,EAAgCoc,oBAAS,GAAzC,mBAAOC,EAAP,KAAiBC,EAAjB,KACMC,EAAaC,mBACnBnB,GAAgBgB,EAAUE,GAAY,kBAAMD,GAAY,MAExD,IAAMhE,EAAcmE,IAAM7F,aAAY,WACpC0F,GAAY,SAACD,GAAD,OAAeA,OAC1B,IAEH,OACE,sBAAKrc,UAAWQ,KAAOkc,SAAvB,UACG5E,EAAaQ,EAAa+D,GAC1BA,GACC,qBACErc,UAAWkB,IACTV,KAAOmY,eACP3Y,EACAyB,IAAaC,UAEfoU,IAAKyG,EANP,SAQGlE,EAAWC,Q,wBCvBf,SAASqE,GAAT,GAAmD,IAAlC3c,EAAiC,EAAjCA,UAAWmT,EAAsB,EAAtBA,SAAUyJ,EAAY,EAAZA,SACrCC,EAAa,CACjBxV,MAAO7G,KAAO6G,MACdyV,QAAStc,KAAOsc,SAElB,OACE,qBACE9c,UAAWkB,IACTlB,EACAQ,KAAOuc,MACPF,EAAWD,GACXnb,IAAaC,UALjB,SAQGyR,ICfA,IAAM6J,GAAiBrQ,YAC5B,qBAD4C,uCAE5C,WAAOC,EAAP,oBAAAlI,EAAA,6DAAYmI,EAAZ,EAAYA,gBAAZ,kBAE0BlI,KAF1B,cAEU2E,EAFV,yBAGWA,GAHX,yDAKWuD,EAAgB,EAAD,KAL1B,yDAF4C,wDAU5C,CACEoQ,UAAW,SAACrQ,EAAD,GAIT,IADcsQ,EAHgB,EAAfA,YAIL5T,QAAQjJ,QAAS,OAAO,KAK3BuJ,GAAY+C,YACvB,oBADuC,uCAEvC,WAAO7K,EAAP,oBAAA4C,EAAA,6DAAamI,EAAb,EAAaA,gBAAb,kBAEyBlI,GAAc7C,GAFvC,cAEUqb,EAFV,yBAGWA,GAHX,uCAKI7V,QAAQD,MAAM,wBAAd,MALJ,kBAMWwF,EAAgB,EAAD,KAN1B,yDAFuC,yDAa5BuQ,GAAmBzQ,YAC9B,uBAD8C,uCAE9C,yCAAAjI,EAAA,6DAAS5C,EAAT,EAASA,GAAIC,EAAb,EAAaA,KAAM+H,EAAnB,EAAmBA,QAASC,EAA5B,EAA4BA,UAAe8C,EAA3C,EAA2CA,gBAA3C,kBAEgClI,GAAiB,CAC3C7C,KACAC,OACA+H,UACAC,cANN,cAEUsT,EAFV,yBAQWA,GARX,uCAUI/V,QAAQD,MAAM,0BAAd,MAVJ,kBAWWwF,EAAgB,EAAD,KAX1B,yDAF8C,yDAkBnCyQ,GAAoBvQ,YAC/B,6BACA,SAAiBwQ,GAEf,OADAra,aAAaC,QAAQ,eAAgBoa,GAC9B,CAAEvQ,QAASuQ,MAkBtB,SAAS3P,KACP,OAAO,aACLtE,QAAS,KACTkU,YAAata,aAAaQ,QAAQ,iBAAmB,OACrDrD,SAAS,EACTgH,OAAO,EACPoW,eAAe,GAnBV,CACLC,gBAAiB,KACjBC,WAAY,KACZC,mBAAmB,EACnBC,iBAAiB,EACjBC,kBAAmB,KACnBC,wBAAwB,EACxBC,kBAAmB,KACnBC,oBAAoB,EACpBC,qBAAqB,IAezB,ICvFI,GDuFEvP,GAAef,KAGRuQ,GAAetP,YAAY,CACtC9M,KAAM,UACN4M,gBACAG,SAAU,CACRsP,kBAAmB,SAACpP,GAClB3K,OAAO4K,OAAOD,EAhCX,CACL0O,gBAAiB,KACjBC,WAAY,KACZC,mBAAmB,EACnBC,iBAAiB,EACjBC,kBAAmB,KACnBC,wBAAwB,EACxBC,kBAAmB,KACnBC,oBAAoB,EACpBC,qBAAqB,MA0BvBhP,cAAe,SAACC,GACdA,EAAQC,QAAQkO,IAAmB,SAACtO,EAAOK,GACzCL,EAAMwO,YAAcnO,EAAOrC,WAE7BmC,EAAQC,QAAQ4N,GAAe1N,SAAS,SAACN,GACvCA,EAAM3O,SAAU,KAElB8O,EAAQC,QAAQ4N,GAAevN,WAAW,SAACT,EAAOK,GAChDL,EAAM1F,QAAU+F,EAAOrC,QACvBgC,EAAMyO,eAAgB,EACtBzO,EAAM3O,SAAU,EAChB2O,EAAM3H,OAAQ,KAEhB8H,EAAQC,QAAQ4N,GAAetN,UAAU,SAACV,GACxCA,EAAM3H,OAAQ,EACd2H,EAAM3O,SAAU,KAElB8O,EAAQC,QAAQxF,GAAU0F,SAAS,SAACN,EAAOK,GACzCL,EAAM0O,gBAAkBrO,EAAOE,KAAKC,UACpCR,EAAM2O,WAAa,KACnB3O,EAAM4O,mBAAoB,EAC1B5O,EAAM6O,iBAAkB,EACxB7O,EAAMkP,qBAAsB,KAE9B/O,EAAQC,QAAQxF,GAAU6F,WAAW,SAACT,EAAOK,GACvCL,EAAM0O,kBAAoBrO,EAAOE,KAAKC,YAC1CR,EAAM4O,mBAAoB,EAC1B5O,EAAM2O,WAAatO,EAAOrC,YAE5BmC,EAAQC,QAAQxF,GAAU8F,UAAU,SAACV,EAAOK,GACtCL,EAAM0O,kBAAoBrO,EAAOE,KAAKC,YAC1CR,EAAM6O,iBAAkB,EACxB7O,EAAM4O,mBAAoB,MAE5BzO,EAAQC,QAAQgO,GAAiB9N,SAAS,SAACN,EAAOK,GAChDL,EAAM8O,kBAAoBzO,EAAOE,KAAKC,UACtCR,EAAM+O,wBAAyB,EAC/B/O,EAAMgP,kBAAoB,KAC1BhP,EAAMiP,oBAAqB,EAC3BjP,EAAMkP,qBAAsB,KAE9B/O,EAAQC,QAAQgO,GAAiB3N,WAAW,SAACT,EAAOK,GAC9CL,EAAM8O,oBAAsBzO,EAAOE,KAAKC,YAC5CR,EAAM+O,wBAAyB,EAC/B/O,EAAMkP,qBAAsB,EAC5BlP,EAAM2O,WAAatO,EAAOrC,YAE5BmC,EAAQC,QAAQgO,GAAiB1N,UAAU,SAACV,EAAOK,GAC7CL,EAAM8O,oBAAsBzO,EAAOE,KAAKC,YACxCH,EAAOrC,QAAQlN,OACjBkP,EAAMgP,kBAAoB,CAAEle,KAAMuP,EAAOrC,QAAQlN,OAEnDkP,EAAM+O,wBAAyB,EAC/B/O,EAAMiP,oBAAqB,EAC3BjP,EAAMkP,qBAAsB,MAE9B/O,EAAQC,QAAQ,yBAAyB,WACvC,OAAO,eAAKxB,YAMHwQ,GAAsBD,GAAavO,QAAnCwO,kBAGF/U,GAAa,SAAC2F,GAAD,OAAWA,EAAM1F,QAAQA,SACtCmU,GAAgB,SAACzO,GAAD,OAAWA,EAAM1F,QAAQmU,eACzCY,GAAmB,SAACrP,GAAD,OAAWA,EAAM1F,QAAQjC,OAC5CiX,GAAiB,SAACtP,GAAD,OAAWA,EAAM1F,QAAQkU,aAC1Ce,GAAqB,SAAC,GAAD,IAAGjV,EAAH,EAAGA,QAAH,MAAkB,CAClDqU,WAAYrU,EAAQqU,WACpBC,kBAAmBtU,EAAQsU,kBAC3BC,gBAAiBvU,EAAQuU,gBACzBG,kBAAmB1U,EAAQ0U,kBAC3BD,uBAAwBzU,EAAQyU,uBAChCE,mBAAoB3U,EAAQ2U,mBAC5BC,oBAAqB5U,EAAQ4U,sBAGlBM,GAAiBL,GAAa7N,Q,oBChLvC,GAAY,CAAC,QAAS,WAE1B,SAAS,KAA2Q,OAA9P,GAAWjM,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAASsK,GAAgBnJ,EAAMC,GAC7B,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,GACPC,OAAQ,OACRC,QAAS,gBACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3EiC,GAAI,SACJ8X,EAAG,+IACH7D,UAAW,8BACXG,KAAM,mBAIV,IClCI,GDkCA,GAA0B,aAAiBuI,IChC3C,IDiCW,ICjCC,CAAC,QAAS,YAE1B,SAAS,KAA2Q,OAA9P,GAAWpa,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAASuK,GAAgBpJ,EAAMC,GAC7B,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,GACPC,OAAQ,OACRC,QAAS,gBACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3EiC,GAAI,SACJ8X,EAAG,wHACH7D,UAAW,iCACXG,KAAM,mBAIV,IAAI,GAA0B,aAAiBwI,IAChC,IC1BR,SAASC,KACd,IAAMjH,EAAKlB,KACLhG,EAAWiH,cACX+F,EAAchL,YAAY8L,IAEhC,OACE,sBAAKte,UAAWkB,IAAGV,KAAOoe,WAAYnd,IAAab,SAAnD,UACE,oBAAIZ,UAAWkB,IAAGV,KAAOO,KAAMU,IAAaod,WAA5C,SACGnH,EAAG,gBAEN,sBAAK1X,UAAWQ,KAAOse,cAAvB,UACE,cAAC,GAAD,CACE9e,UAAWkB,IACTV,KAAOue,aACS,SAAhBvB,GAA0Bhd,KAAOwe,UAEnCjf,QAAS,kBAAMyQ,EAAS8M,GAAkB,YAE5C,cAAC,GAAD,CACEtd,UAAWkB,IACTV,KAAOye,aACS,SAAhBzB,GAA0Bhd,KAAOwe,UAEnCjf,QAAS,kBAAMyQ,EAAS8M,GAAkB,kB,wBC3B7C,SAAS4B,GAAT,GAA+C,IAA1Brf,EAAyB,EAAzBA,MAAOsC,EAAkB,EAAlBA,MAAO9B,EAAW,EAAXA,QACxC,OACE,sBAAKL,UAAWQ,KAAOqB,MAAvB,UACE,qBAAK7B,UAAWkB,IAAGV,KAAOX,MAAO4B,IAAaC,UAA9C,SACG7B,IAEH,qBAAKG,UAAWkB,IAAGV,KAAO2e,aAAc1d,IAAaC,UAArD,SACGrB,EACC,cAAC,IAAD,CAAUL,UAAWQ,KAAO2B,QAE5B,qBAAKnC,UAAWQ,KAAO2B,MAAvB,SAA+BA,S,wBCZlC,SAASd,GAAT,GAAgC,IAAdrB,EAAa,EAAbA,UACvB,OACE,qBAAKA,UAAWkB,IAAGV,KAAOc,OAAQtB,GAAlC,SACE,qBAAKA,UAAWQ,KAAO4e,eAAgBvJ,QAAQ,cAA/C,SACE,wBAAQ7V,UAAWQ,KAAO6e,WAAYC,GAAG,KAAKC,GAAG,KAAKC,EAAE,W,iCCCzD,SAASC,GAAT,GAAwD,IAAtCnE,EAAqC,EAArCA,OAAQC,EAA6B,EAA7BA,QAAS3a,EAAoB,EAApBA,QAAS8e,EAAW,EAAXA,QAC3CC,EAAYnD,mBAClBnB,GAAgBC,EAAQqE,EAAWpE,GAEnC,IAAMqE,EAAgBhf,EAAQ6M,MAAM,MAAMD,KAAI,SAACzM,EAAMwX,GAAP,OAC5C,qBAAevY,UAAWQ,KAAOqf,kBAAjC,SACG9e,GADOwX,MAgBZ,OAXAsD,qBAAU,WAMR,OALIP,EACFwE,KAAcC,KAEdD,KAAcE,MAET,WACLF,KAAcE,SAEf,CAAC1E,IAECA,EAGH,qBAAKtb,UAAWQ,KAAOyf,cAAvB,SACE,sBAAKjgB,UAAWQ,KAAO0f,cAAepK,IAAK6J,EAA3C,UACE,qBAAK3f,UAAWkB,IAAGV,KAAO2f,qBAAsB1e,IAAa2e,UAA7D,SACGR,IAEH,qBAAK5f,UAAWQ,KAAO6f,eAAvB,SACGX,GACCA,EAAQlS,KAAI,SAACrM,EAAQoX,GAAT,OACV,cAAC3Y,EAAD,CAEEM,QAASiB,EAAOjB,QAChBL,MAAOsB,EAAOtB,MACdM,KAAK,KACLJ,QAASoB,EAAOmf,QAChBtgB,UAAWQ,KAAO+f,WALbhI,aAZC,K,IC7BlB,G,4DAEA,GAAY,CAAC,QAAS,WAE1B,SAAS,KAA2Q,OAA9P,GAAWlU,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAASqM,GAAQlL,EAAMC,GACrB,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPG,QAAS,qBACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAO,GAAkB,gBAAoB,IAAK,CAClEiC,GAAI,YACJ,YAAa,YACbiU,UAAW,iCACG,gBAAoB,OAAQ,CAC1CjU,GAAI,qBACJ8X,EAAG,+JACH7D,UAAW,8BACXG,KAAM,YACS,gBAAoB,OAAQ,CAC3CpU,GAAI,WACJ,YAAa,WACb8X,EAAG,2GACH7D,UAAW,+BACXG,KAAM,SACS,gBAAoB,OAAQ,CAC3CpU,GAAI,WACJ,YAAa,WACb8X,EAAG,oHACH7D,UAAW,+BACXG,KAAM,SACS,gBAAoB,OAAQ,CAC3CpU,GAAI,WACJ,YAAa,WACb8X,EAAG,oHACH7D,UAAW,+BACXG,KAAM,SACS,gBAAoB,OAAQ,CAC3CpU,GAAI,WACJ,YAAa,WACb8X,EAAG,qlEACH7D,UAAW,+BACXG,KAAM,eAIV,IAAI,GAA0B,aAAiBsK,ICvDlCC,IDwDE,ICxDf,oDACE,WAAYhL,GAAQ,IAAD,+BACjB,cAAMA,IACDzG,MAAQ,CAAE0R,UAAU,GAFR,EADrB,sDAUE,WAIEzb,OAAOC,SAAW,WAdtB,oBAiBE,WACE,OAAIyP,KAAK3F,MAAM0R,SAEX,sBAAK1gB,UAAWQ,KAAOkS,UAAvB,UACE,cAACJ,GAAD,CAAQC,UAAQ,IAChB,sBAAKvS,UAAWQ,KAAOI,QAAvB,UACE,qBAAKZ,UAAWQ,KAAOmgB,cAAvB,SACE,cAAC,GAAD,CAAU3gB,UAAWQ,KAAOJ,SAE9B,qBAAKJ,UAAWQ,KAAOogB,QAAvB,kCACA,cAAChhB,EAAD,CACEE,KAAK,SACLD,MAAO,SACPK,QAAQ,QACRC,KAAK,KACLH,UAAWQ,KAAOqgB,IAClB9gB,QAAS4U,KAAKmM,uBAGlB,cAAClI,GAAD,CAAQ5Y,UAAWQ,KAAOqY,YAKzBlE,KAAKc,MAAMtC,YAzCtB,uCAME,WACE,MAAO,CAAEuN,UAAU,OAPvB,GAAmCjE,IAAMpD,YCFlC,SAAS0H,KAKd,OAFA9E,GAAe,CAFM+E,cAAbvH,WAID,K,wBCRF,SAASwH,GAAT,EAA8CC,GAAc,IAApCC,EAAmC,EAAnCA,KAAM/Q,EAA6B,EAA7BA,aAC7BgR,EAASF,EACZ1T,KAAI,SAAC6T,GACJ,IAAMC,EAmBZ,WAA8CD,GAAa,IAAnCF,EAAkC,EAAlCA,KAAM/Q,EAA4B,EAA5BA,aAC5B,GAAIiR,EAAWE,SACb,OAAOF,EAAWE,SAASnR,GAG7B,OAAOiR,EAAWG,UACdH,EAAWI,GAAGN,EAAKE,EAAWG,YAC9BH,EAAWI,GAAGN,EAAME,EAAWK,YA1BfC,CAAa,CAAER,OAAM/Q,gBAAgBiR,GACrD,OAAKC,EAYE,KAXU3d,KAAKC,MAClBD,KAAK+W,UAAU,CACbrT,MAAOga,EAAWO,aAClBC,MAAOR,EAAWG,UAClBM,OAAQT,EAAWK,WACnBK,YAAaV,EAAWU,kBAQ/BnK,OAAO7T,SACV,OAAOqd,EAaF,SAASY,GAAYC,EAAQniB,GAClC,OAAOmiB,EACJzU,KAAI,SAAC0U,GACJ,OAAIA,EAAGJ,OACEI,EAAGJ,OAAO,KAAOhiB,EAAOoiB,EAAG7a,MAAQ,KAExC6a,EAAGL,QAAU/hB,EACRoiB,EAAG7a,MAEL,QAERuQ,OAAO7T,SAGL,SAASud,GAAQa,GACtB,OAAO9d,OAAOC,OAAO6d,GAAKC,OAAM,SAACC,GAAD,OAASA,EAAIN,e,6CC1CxC,SAASO,GAAT,GAAuC,IAAXL,EAAU,EAAVA,OAC3BvK,EAAKlB,KACX,OAAOyL,EAAOzU,KAAI,SAAC0U,EAAIK,GACrB,OAAiB,IAAVA,EACL,mBAAGviB,UAAWkB,IAAGV,KAAO6G,MAAO5F,IAAauX,eAA5C,mBACMtB,EAAG,SADT,aACsBA,EAAGwK,KADwCA,GAG/D,QCND,SAASM,GAAT,GAUH,IATF3gB,EASC,EATDA,MACAC,EAQC,EARDA,GACAC,EAOC,EAPDA,KACAC,EAMC,EANDA,SACAygB,EAKC,EALDA,OACA3iB,EAIC,EAJDA,KACAqC,EAGC,EAHDA,MACA8f,EAEC,EAFDA,OACAS,EACC,EADDA,SAEMC,GAAcD,GAA8B,IAAlBT,EAAO1U,OACvC,OACE,sBAAKvN,UAAWQ,KAAOoiB,kBAAvB,UACE,cAACvP,GAAD,CACExR,MAAOA,EACPC,GAAIA,EACJC,KAAMA,EACNjC,KAAMA,EACNkC,SAAUA,EACVygB,OAAQA,EACRtgB,MAAOA,EACPF,eAAgB0gB,GAAclhB,KAAa8K,WAC3CvM,UAAWkB,IAAGyhB,GAAclhB,KAAaohB,gBAEzCH,GACA,qBAAK1iB,UAAWkB,IAAGyhB,GAAclhB,KAAaqhB,WAA9C,SACE,cAACR,GAAD,CAAkBL,OAAQA,SC5B7B,SAASc,GAAT,GAWH,IAVFlhB,EAUC,EAVDA,MACAC,EASC,EATDA,GACAC,EAQC,EARDA,KACAC,EAOC,EAPDA,SACAygB,EAMC,EANDA,OACA3iB,EAKC,EALDA,KACAqC,EAIC,EAJDA,MACA8f,EAGC,EAHDA,OACAS,EAEC,EAFDA,SACAriB,EACC,EADDA,QAEMsiB,GAAcD,GAA8B,IAAlBT,EAAO1U,OACvC,OACE,qCACE,cAAC3L,EAAD,CACEC,MAAOA,EACPC,GAAIA,EACJC,KAAMA,EACNjC,KAAMA,EACNkC,SAAUA,EACVygB,OAAQA,EACRtgB,MAAOA,EACPF,eAAgB0gB,GAAclhB,KAAa8K,WAC3CvM,UAAWkB,IAAGyhB,GAAclhB,KAAaohB,aACzCxiB,QAASA,KAETqiB,GACA,qBAAK1iB,UAAWkB,IAAGyhB,GAAclhB,KAAaqhB,WAA9C,SACE,cAACR,GAAD,CAAkBL,OAAQA,S,IClChC,G,oBAEA,GAAY,CAAC,QAAS,WAE1B,SAAS,KAA2Q,OAA9P,GAAW5d,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAAS6O,GAAqB1N,EAAMC,GAClC,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,OACPC,OAAQ,OACRC,QAAS,oBACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3EiC,GAAI,SACJ8X,EAAG,6pBACH7D,UAAW,6BACXG,KAAM,mBAIV,IClCI,GDkCA,GAA0B,aAAiB8M,IChC3C,IDiCW,ICjCC,CAAC,QAAS,YAE1B,SAAS,KAA2Q,OAA9P,GAAW3e,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAAS8O,GAAsB3N,EAAMC,GACnC,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,OACPC,OAAQ,OACRC,QAAS,oBACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3EiC,GAAI,mBACJ8X,EAAG,yCACH7D,UAAW,+BACXG,KAAM,mBAIV,IAAI,GAA0B,aAAiB+M,IAChC,ICzBR,SAASC,GAAT,GAAyC,IAAX/F,EAAU,EAAVA,OAMnC,OACE,qBACEnd,UAAWQ,KAAO2iB,WAClBpjB,QARJ,WACM8L,GAAkBsR,EAAOrR,QAC7B7G,OAAOme,KAAP,kBAAuBjG,EAAO9S,QAA9B,YAAyCjF,EAAUC,aAAe,WAOhE4T,MAAO,CACLoK,gBAAgB,OAAD,OAASpY,GAAakS,EAAOrR,QAC5CwX,OAASzX,GAAkBsR,EAAOrR,OAAqB,UAAZ,WAL/C,SAQE,sBAAK9L,UAAWQ,KAAO+iB,kBAAvB,UACE,qBAAKvjB,UAAWkB,IAAGV,KAAOgjB,YAAa/hB,IAAauX,eAApD,SACGhN,GAAamR,EAAOrR,SAEvB,qBAAK9L,UAAWkB,IAAGV,KAAOijB,WAAYhiB,IAAaC,UAAnD,SACGsK,GAAamR,EAAOrR,MAAOqR,EAAOnT,iBAErC,sBAAKhK,UAAWQ,KAAOkjB,eAAvB,UACE,cAAC/Q,GAAD,CACEC,GAAE,2BAAsBuK,EAAO9S,SAC/BtK,QAAS,SAAC0b,GACRA,EAAEkI,mBAEJ3jB,UAAWQ,KAAOojB,eALpB,SAOE,cAAC,GAAD,CAAc5jB,UAAWQ,KAAOqjB,wBAEhChY,GAAkBsR,EAAOrR,QACzB,cAAC,GAAD,CAAU9L,UAAWQ,KAAOsjB,yB,wBCnCjC,SAASC,GAAT,GAAyC,IAAX5G,EAAU,EAAVA,OAKnC,OACE,qBAAKnd,UAAWQ,KAAO2iB,WAAvB,SACE,sBAAKnjB,UAAWQ,KAAO+iB,kBAAvB,UACE,qBAAKvjB,UAAWQ,KAAOwjB,YAAvB,SACE,qBAAKlR,IAAK7H,GAAakS,EAAOrR,OAAQiH,IAAI,uBAE5C,sBAAK/S,UAAWQ,KAAOyjB,WAAvB,UACE,qBAAKjkB,UAAWQ,KAAOgjB,YAAvB,SAAqCxX,GAAamR,EAAOrR,SACzD,qBAAK9L,UAAWQ,KAAOijB,WAAvB,SACGzX,GAAamR,EAAOrR,MAAOqR,EAAOnT,oBAGvC,sBAAKhK,UAAWQ,KAAOkjB,eAAvB,UACE,cAAC/Q,GAAD,CACEC,GAAE,2BAAsBuK,EAAO9S,SAC/BrK,UAAWQ,KAAOojB,eAFpB,SAIE,cAAC,GAAD,CAAc5jB,UAAWQ,KAAOqjB,wBAEhChY,GAAkBsR,EAAOrR,QACzB,cAAC,GAAD,CACE9L,UAAWQ,KAAOsjB,eAClB/jB,QA1BZ,WACEkF,OAAOme,KAAP,kBAAuBjG,EAAO9S,QAA9B,YAAyCjF,EAAUC,aAAe,qB,kCCD/D,SAAS6e,GAAT,GAA6D,IAAxCC,EAAuC,EAAvCA,KAAMniB,EAAiC,EAAjCA,SAAU0gB,EAAuB,EAAvBA,SAAUpa,EAAa,EAAbA,UAC9CuF,EAAS2E,YAAY3C,IACrB6H,EAAKlB,KACL4N,EAA0B,KAAd9b,GAAkC,OAAdA,EAClCjB,EAAQ,GACZ,EAAwC+U,oBAAS,GAAjD,mBAAOiI,EAAP,KAAqBC,EAArB,KAQA,SAASC,EAAapiB,GACpBH,EAASG,GAgBX,MAvBkB,KAAdmG,EACFjB,EAAQqQ,EAAG,yCACY,OAAdpP,IACTjB,EAAQqQ,EAAG,gCAObmE,qBAAU,WAERyI,GAAgB,GAChBC,EAAa,QAEZ,CAAC1W,IAEJgO,qBAAU,WACHwI,GACHC,GAAgB,KAEjB,CAACD,IAGF,qCACE,qBAAKrkB,UAAWQ,KAAOgkB,MAAvB,SACGH,GACC,cAAC,KAAD,CACEvO,IAAKqO,EACLM,MAAO,OACPC,QAASle,2CACTxE,SAAUuiB,EACVI,GAAI9W,OAIR6U,GAAY0B,GACZ,qBAAKpkB,UAAWkB,IAAGV,KAAOsiB,WAA1B,SACE,mBAAG9iB,UAAWkB,IAAG0jB,KAAYvd,OAA7B,SAAsCA,SCjDzC,SAASwd,GAAT,GAWH,IAVFlR,EAUC,EAVDA,YACA5R,EASC,EATDA,KACAC,EAQC,EARDA,SACAygB,EAOC,EAPDA,OACAR,EAMC,EANDA,OACAS,EAKC,EALDA,SACAhP,EAIC,EAJDA,QACA7R,EAGC,EAHDA,MACA+R,EAEC,EAFDA,aACAvT,EACC,EADDA,QAEMsiB,GAAcD,GAA8B,IAAlBT,EAAO1U,OACvC,OACE,qCACE,cAACkG,GAAD,CACE5R,MAAOA,EACP+R,aAAcA,EACd7R,KAAMA,EACNC,SAAUA,EACVygB,OAAQA,EACR9O,YAAaA,EACbD,QAASA,EACTzR,eAAgB0gB,GAAclhB,KAAa8K,WAC3CvM,UAAWkB,IAAGyhB,GAAclhB,KAAaohB,aACzCxiB,QAASA,KAETqiB,GACA,qBAAK1iB,UAAWkB,IAAGyhB,GAAclhB,KAAaqhB,WAA9C,SACE,cAACR,GAAD,CAAkBL,OAAQA,S,iCClC7B,SAAS6C,GAAiB3iB,GAC/B,OAAO4B,QAAQ5B,GA4BV,SAAS4iB,GAAmB5D,EAAMO,GACvC,OAAOP,EAAKO,EAAW,MAAQP,EAAKO,EAAW,IClBjD,IAAMsD,GAAqB,CACzB,CACEvD,GAAIqD,GACJlD,aAAc,oCACdJ,UAAW,aAITyD,GAA4B,CAChC,CACExD,GAAIqD,GACJlD,aAAc,oCACdJ,UAAW,oBAIT0D,GAAmB,UACpBF,GADoB,CAEvB,CACEvD,GDPG,SAAwBtf,GAE7B,OAAOA,EAAMoL,QADK,GCOhBqU,aAAc,kDACdJ,UAAW,YAEb,CACEC,GDxBG,SAA+Btf,GACpC,MAAO,eAAegjB,KAAKhjB,ICwBzByf,aAAc,0DACdJ,UAAW,YAEb,CACEC,GDzBG,SAAgCtf,GACrC,MAAO,eAAegjB,KAAKhjB,ICyBzByf,aAAc,0DACdJ,UAAW,YAEb,CACEC,GD1BG,SAA2Btf,GAChC,MAAO,eAAegjB,KAAKhjB,IC0BzByf,aAAc,8CACdJ,UAAW,YAEb,CACEC,GDlBG,SAAuBN,EAAMO,GAClC,OAAOP,EAAKO,EAAW,MAAQP,EAAKO,EAAW,KCkB7CE,aAAc,8DACdF,WAAY,CAAC,kBAAmB,aAElC,CACED,GAAIsD,GACJnD,aAAc,2CACdF,WAAY,CAAC,WAAY,WAIvB0D,GAAiB,CACrB,CACE3D,GAAIqD,GACJlD,aAAc,oBACdJ,UAAW,QAEb,CACEC,GAAIsD,GACJnD,aAAc,2CACdF,WAAY,CAAC,WAAY,UAIvB2D,GAAkB,CACtB,CACE5D,GAAIqD,GACJlD,aAAc,yCACdJ,UAAW,UAGT8D,GAAe,UAChBD,GADgB,CAEnB,CACE5D,GDjFG,SAAuBtf,GAG5B,MAAO,8aAA8agjB,KACnbhjB,IC8EAyf,aAAc,8CACdJ,UAAW,WAIT+D,GAAoB,CACxB,CACE9D,GAAIqD,GACJlD,aAAc,sBACdJ,UAAW,YAsBTgE,GAA6B,CACjC,CACEjE,SAAU,SAACU,GAAD,OAAaA,EAAOlW,SAASjG,EAAcK,qBACrDyb,aAAc,qBACdJ,UAAW,kBACXO,aAAa,IAIJ0D,GAAgB,UAnBJ,CACvB,CACElE,SAAU,SAACU,GAAD,OAAaA,EAAOlW,SAASjG,EAAcC,sBACrD6b,aACE,2EACFJ,UAAW,QACXO,aAAa,IAdO,CACtB,CACEN,GAAIqD,GACJlD,aAAc,uCACdJ,UAAW,gBA0BV+D,GAHwB,aAIxBD,IACAF,GALwB,aAMxBF,KAGQQ,GAAwB,uBAChCR,IACAD,GACAO,IAGQG,GAA0B,aAAOL,IACjCM,GAAe,UAAOP,GAAoBL,IAE1Ca,GAAsB,UAAON,GAAsBH,ICxHzD,SAASU,GAAT,GAAqC,IAAT7hB,EAAQ,EAARA,KAC3ByT,EAAKlB,KACHxI,EAAwBwE,YAAYvJ,IAApC+E,oBACFK,EAAsBmE,YAAYxC,IAClC5B,EAAkBoE,YAAYvC,IAC9B9B,EAAwBqE,YAAYtC,IACpC6V,EAAmB5K,KACnB6K,EAAmB5K,KACnB6K,EAAUzJ,mBAEVhM,EAAWiH,cAEjB,EAAgC2E,oBAAS,GAAzC,mBAAOsG,EAAP,KAAiBwD,EAAjB,KAZyC,4CAczC,mCAAAxhB,EAAA,yDAA8B3C,EAA9B,EAA8BA,KAAM2L,EAApC,EAAoCA,SAAU3E,EAA9C,EAA8CA,QAC5Cmd,GAAY,GACPnkB,GAASgH,EAFhB,uBAGIkD,GAA6Bga,EAAQrK,SAHzC,0CAOqBpL,EACjBjH,GAAW,CACTxH,OACAiH,KAAM0E,EACN3E,aAXN,OAckC,eAP1Bd,EAPR,QAcWsH,KAAK4W,gBACZ3V,EAASmB,GAAe1J,EAAKsH,KAAK6W,IAAIrkB,OACtCyO,EAAS1D,GAAe7E,EAAKsH,KAAK6W,IAAIpd,OACtChF,EAAQ,CAAEC,KAAMgE,EAAKsH,KAAK6W,IAAIrkB,MAAQuB,MAjB1C,4CAdyC,sBAmCzC,OACE,cAAC,IAAD,CACE+iB,oBAAoB,EACpBC,cAAe,CACbvkB,MAAU,OAAJkC,QAAI,IAAJA,OAAA,EAAAA,EAAMlC,OAAQ,GACpBgH,SAAa,OAAJ9E,QAAI,IAAJA,OAAA,EAAAA,EAAM8E,UAAW,GAC1B2E,UAAc,OAAJzJ,QAAI,IAAJA,OAAA,EAAAA,EAAM+E,OAAQ,IAE1Bud,SA3CqC,4CAoCvC,SASG,SAAC9Q,GACA,IAAM+Q,EAAmBvF,GACvB,CAAEE,KAAM1L,EAAMnR,QACduhB,IAEIY,EAAezE,GAAYwE,EAAkB,QAC7CE,EAAkB1E,GAAYwE,EAAkB,WACtD,OACE,uBACED,SAAU9Q,EAAMkR,aAChB3mB,UAAWkB,IACTO,IAAa0f,KACb1f,IAAamlB,cACbpmB,KAAOqmB,kBAET/Q,IAAKmQ,EAPP,UASE,cAAClD,GAAD,CACElhB,MAAO6V,EAAG,QACV5V,GAAG,aACHC,KAAK,OACLC,SAAUyT,EAAM8O,aAChB9B,OAAQhN,EAAMqR,WACd3kB,MAAOsT,EAAMnR,OAAOvC,KACpB2gB,SAAUA,EACVT,OAAQwE,EACRpmB,QAAS2N,IAGX,cAAC6W,GAAD,CACE9iB,KAAK,UACLC,SAAUyT,EAAM8O,aAChB9B,OAAQhN,EAAMqR,WACdpT,QAASqS,EACTlkB,MAAO6V,EAAG,WACVgL,SAAUA,EACVT,OAAQyE,EACRrmB,QAAS2N,EACT4F,aAAc6B,EAAMnR,OAAOyE,SAAW9E,EAAK8E,UAE7C,cAAC0K,GAAD,CACE1R,KAAK,WACLC,SAAUyT,EAAM8O,aAChB9B,OAAQhN,EAAMqR,WACdpT,QAASsS,EACTnkB,MAAO6V,EAAG,oBACVgL,SAAUA,EACVriB,QAAS2N,EACT4F,aAAc6B,EAAMnR,OAAOoJ,UAAYzJ,EAAK+E,OAE7CqF,GACC,cAACsO,GAAD,CAAOC,SAAS,QAAhB,SAAyBlF,EAAG,0BAE7BtJ,GACC,eAACuO,GAAD,CAAOC,SAAS,UAAhB,cAA4BlF,EAAG,mBAEjC,qBAAK1X,UAAWkB,IAAGO,IAAaslB,SAAUvmB,KAAOumB,UAAjD,SACE,cAACnnB,EAAD,CACEE,KAAK,SACLD,MAAO6X,EAAG,QACVvX,KAAK,KACLD,QAAQ,UACRD,SAAU+N,GAAuBG,EACjC9N,QAAS8N,YClHlB,SAAS6Y,GAAT,GAAuC,IAAT/iB,EAAQ,EAARA,KAC7ByT,EAAKlB,KACLhG,EAAWiH,cACjB,EAKIjF,YAAYrC,IAJd1B,EADF,EACEA,qBACAD,EAFF,EAEEA,sBACAD,EAHF,EAGEA,sBACA6B,EAJF,EAIEA,aAGMpC,EAAwBwE,YAAYvJ,IAApC+E,oBACR,EAAgCoO,oBAAS,GAAzC,mBAAOsG,EAAP,KAAiBwD,EAAjB,KAEMe,EAASC,YAAU,CACvBZ,cAAe,CACba,gBAAiB,GACjBre,SAAU,GACVse,gBAAiB,IAEnBb,SAAS,WAAD,4BAAE,WAAOjiB,GAAP,iBAAAI,EAAA,yDACRwhB,GAAY,GACJpd,EAA8BxE,EAA9BwE,SAAUqe,EAAoB7iB,EAApB6iB,gBAZLhF,EAaDqE,GAbSniB,OAAOC,OAAO6d,GAAKC,OAAM,SAACC,GAAD,OAASA,EAAIN,eAUnD,gCAIevR,EACnBhH,GAAe,CACbE,aAAcyd,EACd1d,aAAcX,KAPZ,OAU4B,cAV5B,OAUKyG,KAAK4W,gBACdD,GAAY,GACZe,EAAOI,aAZH,uBAeNpb,KAfM,kCAVI,IAACkW,IAUL,OAAF,mDAAC,KAoBLqE,EAAmBvF,GACvB,CAAEE,KAAM8F,EAAO3iB,OAAQ8L,gBACvBsV,IAGI4B,EAAetF,GAAYwE,EAAkB,YAC7Ce,EAAsBvF,GAAYwE,EAAkB,mBACpDgB,EAAiBxF,GAAYwE,EAAkB,mBAErD,OACE,uBACED,SAAUU,EAAON,aACjB3mB,UAAWkB,IAAGO,IAAa0f,KAAM1f,IAAamlB,eAFhD,UAIE,cAAC1H,GAAD,CACErf,MAAO6X,EAAG,gBACVvV,MAAO8B,EAAKsE,SACZlI,QAAS2N,IAEX,cAAC+U,GAAD,CACElhB,MAAO6V,EAAG,mBACV5V,GAAG,wBACHC,KAAK,kBACLjC,KAAK,WACLkC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAO6iB,gBACrBzE,SAAUA,EACVT,OAAQuF,EACRnnB,QAAS2N,IAEX,cAAC+U,GAAD,CACElhB,MAAO6V,EAAG,gBACV5V,GAAG,iBACHC,KAAK,WACLjC,KAAK,WACLkC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAOwE,SACrB4Z,SAAUA,EACVT,OAAQqF,EACRjnB,QAAS2N,IAEX,cAAC+U,GAAD,CACElhB,MAAO6V,EAAG,wBACV5V,GAAG,uBACHhC,KAAK,WACLiC,KAAK,kBACLC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAO8iB,gBACrB1E,SAAUA,EACVT,OAAQsF,EACRlnB,QAAS2N,IAEVS,GACC,cAACkO,GAAD,CAAOC,SAAS,QAAhB,SACGlF,EAAG,8CAGPlJ,GACC,eAACmO,GAAD,CAAOC,SAAS,UAAhB,cAA4BlF,EAAG,uBAEjC,qBAAK1X,UAAWkB,IAAGO,IAAaslB,SAAUvmB,KAAOumB,UAAjD,SACE,cAACnnB,EAAD,CACEE,KAAK,SACLD,MAAO6X,EAAG,QACVvX,KAAK,KACLD,QAAQ,UACRD,SAAU+N,GAAuBO,EACjClO,QAASkO,S,IC/Hf,G,oBAEA,GAAY,CAAC,QAAS,WAE1B,SAAS,KAA2Q,OAA9P,GAAWlK,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAASsT,GAAiBnS,EAAMC,GAC9B,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,OACPC,OAAQ,OACRC,QAAS,oBACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3EiC,GAAI,SACJ8X,EAAG,oEACH7D,UAAW,+BACXG,KAAM,mBAIV,IAAI,GAA0B,aAAiBuR,IAChC,IC5BR,SAASC,KACd,IAAMhQ,EAAKlB,KACLwD,EAAUC,cAMhB,OACE,sBAAKja,UAAWQ,KAAOmnB,aAAc5nB,QALvC,WACEia,EAAQrK,KAAK,UAIb,UACE,qBAAK3P,UAAWkB,IAAGV,KAAOonB,kBAAmBnmB,IAAauX,eAA1D,SACGtB,EAAG,gBAEN,qBAAK1X,UAAWQ,KAAOqnB,gBAAvB,SACE,cAAC,GAAD,MAEF,qBAAK7nB,UAAWkB,IAAGV,KAAOsnB,iBAAkBrmB,IAAaC,UAAzD,SACGgW,EAAG,6C,wBCjBL,SAASqQ,KACd,IAAMrQ,EAAKlB,KACLwD,EAAUC,cAMhB,OACE,qBAAKja,UAAWQ,KAAOmnB,aAAvB,SACE,qBAAK3nB,UAAWQ,KAAOwnB,oBAAvB,SACE,sBACEhoB,UAAWQ,KAAOynB,oBAClBloB,QATR,WACEia,EAAQrK,KAAK,UAMT,UAIE,qBAAK3P,UAAWQ,KAAOqnB,gBAAvB,SACE,cAAC,GAAD,MAEF,qBAAK7nB,UAAWkB,IAAGV,KAAOsnB,iBAAkBrmB,IAAaC,UAAzD,SACGgW,EAAG,iDCNT,SAASwQ,KACd,IAAMxQ,EAAKlB,KACLhG,EAAWiH,cACXuC,EAAUC,cAChB,EAKIzH,YAAYN,IAJdtB,EADF,EACEA,gBACAC,EAFF,EAEEA,YACAF,EAHF,EAGEA,WACAG,EAJF,EAIEA,mBAEF,EAAgCsL,oBAAS,GAAzC,mBAAOsG,EAAP,KAAiBwD,EAAjB,KAEArK,qBAAU,WACHlL,GACLqJ,EAAQmO,QAAQ,OACf,CAACxX,EAAYqJ,IAEhB6B,qBAAU,WACRrL,EAASiB,QACR,CAACjB,IAEJ,IAAMyW,EAASC,YAAU,CACvBZ,cAAe,CACbpiB,MAAO,GACP4E,SAAU,GACVhG,YAAY,GAEdyjB,SAAU,SAACjiB,GACT4hB,GAAY,GACZ,IAAQhiB,EAAgCI,EAAhCJ,MAAO4E,EAAyBxE,EAAzBwE,SAAUhG,EAAewB,EAAfxB,WACrBwe,GAAQkF,GACVhW,EAASD,GAAM,CAAEtM,KAAM,CAAEsE,SAAUrE,EAAO4E,YAAYhG,gBAEtDmJ,QAKAua,EAAmBvF,GACvB,CAAEE,KAAM8F,EAAO3iB,QACfshB,IAGIwC,EAAgBpG,GAAYwE,EAAkB,SAC9Cc,EAAetF,GAAYwE,EAAkB,YAEnD,OACE,sBAAKxmB,UAAWQ,KAAO6nB,UAAvB,UACE,uBAAM9B,SAAUU,EAAON,aAAc3mB,UAAWyB,IAAa0f,KAA7D,UACE,oBAAInhB,UAAWkB,IAAGO,IAAa5B,MAAO4B,IAAaod,WAAnD,SACGnH,EAAG,iCAEN,cAACqL,GAAD,CACElhB,MAAO6V,EAAG,SACV5V,GAAG,cACHC,KAAK,QACLC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAOJ,MACrB+d,OAAQmG,EACR1F,SAAUA,IAGZ,cAACK,GAAD,CACElhB,MAAO6V,EAAG,YACV5V,GAAG,iBACHC,KAAK,WACLjC,KAAK,WACLkC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAOwE,SACrBmZ,OAAQqF,EACR5E,SAAUA,IAEZ,sBAAK1iB,UAAWQ,KAAO8nB,kBAAvB,UACE,qBAAKtoB,UAAWQ,KAAO+nB,YAAvB,SACE,cAAClV,GAAD,CACExR,MAAO6V,EAAG,eACV5V,GAAG,aACHC,KAAK,aACLC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAOxB,eAGzB,sBAAK9C,UAAWQ,KAAO+nB,YAAvB,UACE,cAAC5V,GAAD,CAAMC,GAAG,qBAAT,SAA+B8E,EAAG,6BAClC,cAAC/E,GAAD,CAAMC,GAAG,UAAT,SAAoB8E,EAAG,2BAG3B,cAAC9X,EAAD,CACES,QAASuQ,EACT5Q,UAAWQ,KAAOW,OAClBrB,KAAK,SACLD,MAAO6X,EAAG,SACVzX,SAAU2Q,EACV1Q,QAAQ,eAGX2Q,GACC,mBAAGoI,MAAO,CAAEuP,MAAO,MAAOC,UAAW,UAArC,SAEM/Q,EADH5G,EACM,sBACA,6B,wBC/GjB,SAAS4X,GAAW1f,GAId,MAAgB,OAATA,EChBE,q8rBCAA,uqnBFsBR,SAAS2f,GAAT,GAAmC,IAAd3oB,EAAa,EAAbA,UACpBgJ,EAAOwJ,YAAY3C,IACnB6H,EAAKlB,KAEX,OACE,cAACoS,GAAD,CACE/oB,MAAO6X,EAAG,gBACVmR,KAAMH,GAAW1f,GACjB8f,cAAe9oB,I,IG9BjB,G,oBAEA,GAAY,CAAC,QAAS,WAE1B,SAAS,KAA2Q,OAA9P,GAAWqE,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAAS4U,GAASzT,EAAMC,GACtB,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,GACPC,OAAQ,GACRC,QAAS,gBACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3EqW,KAAM,UACN0D,EAAG,8hBAIP,IChCI,GDgCA,GAA0B,aAAiBmP,IC9B3C,ID+BW,IC/BC,CAAC,QAAS,YAE1B,SAAS,KAA2Q,OAA9P,GAAW1kB,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAAS6U,GAAe1T,EAAMC,GAC5B,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,GACPC,OAAQ,GACRM,KAAM,MACNL,QAAS,gBACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3E+Z,EAAG,6NAIP,IChCI,GDgCA,GAA0B,aAAiBoP,IC9B3C,ID+BW,IC/BC,CAAC,QAAS,YAE1B,SAAS,KAA2Q,OAA9P,GAAW3kB,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAAS8U,GAAQ3T,EAAMC,GACrB,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,GACPC,OAAQ,GACRM,KAAM,OACNL,QAAS,gBACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3E+Z,EAAG,ukBAIP,IAAI,GAA0B,aAAiBqP,IAChC,ICrBR,SAASC,GAAT,GAMH,IALFlpB,EAKC,EALDA,UACAE,EAIC,EAJDA,QACAa,EAGC,EAHDA,KACAooB,EAEC,EAFDA,YAEC,IADDC,gBACC,MADU,IACV,EACK1R,EAAKlB,KACLwD,EAAUC,cAChBgC,GAAe,IAMf,IAAM3b,EAAW,CACfwc,QAAS,cAAC,GAAD,IACTzV,MAAO,cAAC,GAAD,IACPgiB,KAAM,cAAC,GAAD,KAGR,OAAKnpB,EAEH,sBAAKF,UAAWkB,IAAGlB,EAAWQ,KAAO8oB,YAArC,UACGhpB,EAASJ,GACV,mBAAGF,UAAWkB,IAAGV,KAAOO,KAAMU,IAAa2e,UAA3C,SAAuDrf,IACvD,cAACnB,EAAD,CACEE,KAAK,SACLD,MAAO6X,EAAGyR,GACVjpB,QAAQ,QACRC,KAAK,KACLH,UAAWQ,KAAOqgB,IAClB9gB,QArBN,WACEia,EAAQrK,KAAKyZ,SASM,KCAhB,SAASG,KACd,IAAM7R,EAAKlB,KACLhG,EAAWiH,cACjB,EACEjF,YAAYJ,IADNhC,EAAR,EAAQA,aAAcW,EAAtB,EAAsBA,iBAAkBC,EAAxC,EAAwCA,aAExC,EAA0BoL,mBAAS,UAAnC,mBAAOoN,EAAP,KAAcC,EAAd,KACMvkB,EAAW8b,cACX+E,EAAmB5K,KACnB6K,EAAmB5K,KACnBsO,EAAelN,mBAErBX,qBAAU,WACRrL,EAASkB,QACR,CAAClB,IAEJqL,qBAAU,WACkB,0BAAtB3W,EAASuU,UACXgQ,EAAS,SAEe,YAAtBvkB,EAASuU,UACXgQ,EAAS,YAEV,CAACvkB,EAASuU,WAEb,IAAMwN,EAASC,YAAU,CACvBZ,cAAe,CACbpiB,MAAO,GACP4E,SAAU,GACVse,gBAAiB,GACjBrlB,KAAM,GACNgH,QAAS,GACT2E,SAAU,KACVic,aAAa,GAGfpD,SAAS,WAAD,4BAAE,WAAOjiB,GAAP,yBAAAI,EAAA,yDACRwhB,GAAY,GACJhiB,EAA6CI,EAA7CJ,MAAO4E,EAAsCxE,EAAtCwE,SAAU/G,EAA4BuC,EAA5BvC,KAAMgH,EAAsBzE,EAAtByE,QAAS2E,EAAapJ,EAAboJ,UACpC4T,GAAQkF,KAAqBle,EAHzB,gCAIakI,EACjB3H,GAAO,CACLN,SAAUrE,EACV8E,KAAM0E,EACN5E,WACA/G,OACAgH,UACA2E,WACAlF,mBAAoBF,KAZlB,OAe0B,cAf1B,OAeGiH,KAAK4W,cACZsD,EAAS,YAETG,EAAa,IACb,UAAAF,EAAa9N,eAAb,SAAsBiO,QACtB5d,MApBI,uBAuBNA,KAvBM,4CAAF,mDAAC,KA4BX4P,qBAAU,WACJzL,EAAa7C,QACfiD,EAASoB,QAGV,CAACqV,EAAO3iB,OAAOJ,MAAOsM,IAEzB,MAAkC4L,mBAAS,IAA3C,mBAAO9T,EAAP,KAAkBshB,EAAlB,KACA,EAAgCxN,oBAAS,GAAzC,mBAAOsG,EAAP,KAAiBwD,EAAjB,KAMMM,EAAmBvF,GACvB,CAAEE,KAAM8F,EAAO3iB,OAAQ8L,gBACvBqV,IAGI2C,EAAgBpG,GAAYwE,EAAkB,SAC9Cc,EAAetF,GAAYwE,EAAkB,YAC7Ce,EAAsBvF,GAAYwE,EAAkB,mBACpDC,EAAezE,GAAYwE,EAAkB,QAC7CsD,EAAiB9H,GAAYwE,EAAkB,eAC/CE,EAAkB1E,GAAYwE,EAAkB,WAEtD,OACE,qCACa,UAAVgD,GAAqB,cAACb,GAAD,IACX,YAAVa,GACC,cAACN,GAAD,CACEnoB,KAAM2W,EACJ,qEAEFxX,QAAQ,UACRipB,YAAa,YAGjB,sBACEnpB,UAAWkB,IACC,WAAVsoB,GAAsBhpB,KAAOe,OAC7Bf,KAAOupB,WACPtoB,IAAab,SAJjB,UAOE,oBAAIZ,UAAWkB,IAAGO,IAAa5B,MAAO4B,IAAaod,WAAnD,SACGnH,EAAG,uBAEN,uBACE6O,SAAUU,EAAON,aACjB3mB,UAAWkB,IAAGV,KAAO2gB,KAAM1f,IAAa0f,MAF1C,UAKE,sBAAKlI,MAAO,CAAErD,OAAQ,EAAGoU,SAAU,UAAnC,UACG,IACD,uBAAOlqB,KAAK,OAAOiC,KAAK,QAAQkoB,SAAS,OAAQ,IACjD,uBAAOnqB,KAAK,WAAWiC,KAAK,WAAWkoB,SAAS,OAAQ,OAE1D,cAAClH,GAAD,CACElhB,MAAO6V,EAAG,SACV5V,GAAG,cACHC,KAAK,QACLC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAOJ,MACrB+d,OAAQmG,EACR1F,SAAUA,IAEZ,cAACK,GAAD,CACElhB,MAAO6V,EAAG,YACV5V,GAAG,iBACHC,KAAK,WACLjC,KAAK,WACLkC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAOwE,SACrBmZ,OAAQqF,EACR5E,SAAUA,IAEZ,cAACK,GAAD,CACElhB,MAAO6V,EAAG,oBACV5V,GAAG,uBACHhC,KAAK,WACLiC,KAAK,kBACLC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAO8iB,gBACrBnF,OAAQsF,EACR7E,SAAUA,IAEZ,cAACK,GAAD,CACElhB,MAAO6V,EAAG,QACV5V,GAAG,aACHC,KAAK,OACLC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAOvC,KACrBkgB,OAAQwE,EACR/D,SAAUA,IAEZ,cAACmC,GAAD,CACE9iB,KAAK,UACLC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACfpT,QAASqS,EACTpS,YAAa+D,EAAG,WAChB9D,aAAcqT,EAAO3iB,OAAOyE,QAC5B2Z,SAAUA,EACVT,OAAQyE,EACR7kB,MAAO6V,EAAG,aAEZ,cAACjE,GAAD,CACE1R,KAAK,WACLC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACfpT,QAASsS,EACTpS,aAAcqT,EAAO3iB,OAAOoJ,SAC5B7L,MAAO6V,EAAG,sBAEZ,sBAAK1X,UAAWQ,KAAO8nB,kBAAvB,UACE,cAAC9F,GAAD,CACE3gB,MAAO6V,EAAG,+BACV5V,GAAG,oBACHC,KAAK,cACLC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAOqlB,YACrB1H,OAAQ6H,EACRpH,SAAUA,IAEZ,cAAC/P,GAAD,CACE3S,UAAWkB,IAAGV,KAAO4S,KAAM5S,KAAO0pB,WAClCtX,GAAI,wBAFN,SAIG8E,EAAG,uBAIR,cAACwM,GAAD,CACEC,KAAMuF,EACN1nB,SAlIO,SAACG,GAChBynB,EAAaznB,IAkILugB,SAAUA,EACVpa,UAAWA,IAEZ0I,GACC,cAAC2L,GAAD,CAAOC,SAAS,QAAQ5c,UAAWQ,KAAOuc,MAA1C,SACGrF,EAAG,0BAGR,cAAC9X,EAAD,CACEE,KAAK,SACLE,UAAWQ,KAAOW,OAClBtB,MAAO6X,EAAG,YACVxX,QAAQ,UACRG,QAAS0Q,IAEX,uBAAM/Q,UAAWQ,KAAO4S,KAAxB,oBACMsE,EAAG,2BADT,KAEE,cAAC/E,GAAD,CAAMC,GAAI,SAAV,SAAqB8E,EAAG,+C,wBC1O9ByS,GAAgB,CACpBjkB,UAAW,4BACXkkB,aAAc,wBAGT,SAASC,KACd,IAAM3S,EAAKlB,KACLtR,EAAW8b,cACXxQ,EAAWiH,cACjBoE,qBAAU,WACRrL,EAASgB,QACR,CAAChB,IAEJ,IAAMkZ,EAAelN,mBACrB,EAAgCJ,oBAAS,GAAzC,mBAAOsG,EAAP,KAAiBwD,EAAjB,KACA,EAAkC9J,mBAAS,IAA3C,mBAAO9T,EAAP,KAAkBshB,EAAlB,KACA,EAA0BxN,mBAAS,YAAnC,mBAAOoN,EAAP,KAAcC,EAAd,KAEA,EAIIjX,YAAYL,IAHdf,EADF,EACEA,sBACAC,EAFF,EAEEA,qBACAF,EAHF,EAGEA,0BAGIyQ,EAAelK,EACnByS,GAAc9Y,GAAwB,iBAGlC4V,EAASC,YAAU,CACvBZ,cAAe,CACbpiB,MAAO,IAETqiB,SA3BmC,8CA8B/BC,EAAmBvF,GACvB,CAAEE,KAAM8F,EAAO3iB,QACfqhB,IAOF,SAAS2E,IAAmB,IAAD,EACzB,OAAO,UAAAplB,EAAS8J,aAAT,eAAgBub,eAAgB,aAAe,SAxCnB,4CA2CrC,WAA4BjmB,GAA5B,iBAAAI,EAAA,yDACEwhB,GAAY,IACRM,EAAiBjZ,QAAWjF,EAFlC,uBAGI2D,KAHJ,iCAMU/H,EAAUI,EAAVJ,MANV,SAOqBsM,EAASnI,GAAgB,CAAEnE,QAAOoE,eAPvD,OAQkC,cARlC,OAQWiH,KAAK4W,eACZsD,EAAS,WAEX,UAAAC,EAAa9N,eAAb,SAAsBiO,QACtBD,EAAa,IACb1D,GAAY,GAbd,6CA3CqC,sBA2DrC,OACE,qCACa,YAAVsD,GACC,cAACN,GAAD,CACEnoB,KAAM2W,EACJ,2FAEFxX,QAAQ,UACRipB,YAAa,UACbC,SAAUkB,MAGH,aAAVd,GACC,qBAAKxpB,UAAWkB,IAAGO,IAAab,QAASJ,KAAOupB,YAAhD,SACE,uBAAMxD,SAAUU,EAAON,aAAc3mB,UAAWyB,IAAa0f,KAA7D,UACE,oBAAInhB,UAAWkB,IAAGO,IAAa5B,MAAO4B,IAAaod,WAAnD,SACGnH,EAAG,6BAEN,oBAAI1X,UAAWkB,IAAGO,IAAa+oB,SAAU/oB,IAAa2e,UAAtD,SACG1I,EAAG,uDAEN,cAACqL,GAAD,CACElhB,MAAO6V,EAAG,SACV5V,GAAG,cACHC,KAAK,QACLC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAOJ,MACrB+d,OAAQD,GAAYwE,EAAkB,SACtC9D,SAAUA,IAEZ,cAACwB,GAAD,CACEC,KAAMuF,EACN1nB,SAzDZ,SAA+BG,GAC7BynB,EAAaznB,IAyDHugB,SAAUA,EACVpa,UAAWA,IAEZ8I,GACC,cAACuL,GAAD,CAAO3c,UAAWQ,KAAO6G,MAAOuV,SAAS,QAAzC,SACGgF,IAGL,cAAChiB,EAAD,CACEI,UAAWQ,KAAOW,OAClBrB,KAAK,SACLD,MAAO6X,EAAG,oBACVzX,SAAUkR,EACVjR,QAAQ,UACRG,QAAS8Q,IAEX,uBAAMnR,UAAWQ,KAAOiqB,WAAxB,oBACM/S,EAAG,2BADT,KAEE,cAAC/E,GAAD,CAAMC,GAAI0X,IAAV,SACG5S,EAAG,8C,wBC1Hb,SAASgT,KACd,IAAMla,EAAWiH,cACXC,EAAKlB,KACLlN,EAAUkJ,YAAYnJ,IACtBmU,EAAchL,YAAY8L,IAC1BqM,EAAuBnY,YAAY6L,IACnCuM,EAAyBpY,YAAYiL,IAa3C,OAXA5B,qBAAU,WACRrL,EAASwM,QACR,CAACxM,IAEJqL,qBAAU,WACR,IAAMgP,EAAWC,aAAY,WAC3Bta,EAASwM,Q5C7BiB,K4C+B5B,OAAO,kBAAM+N,cAAcF,MAC1B,CAACra,IAGF,sBAAKxQ,UAAWQ,KAAOwqB,YAAvB,UACE,cAACrM,GAAD,IACCgM,IAAyBC,EACxB,cAACjO,GAAD,CAAOC,SAAS,QAAQ5c,UAAWQ,KAAOyqB,aAA1C,SACGvT,EAAG,0BAGN,qCACmB,SAAhB8F,GAA0B,cAAC0N,GAAD,CAAiB5hB,QAASA,IACpC,SAAhBkU,GAA0B,cAAC2N,GAAD,CAAiB7hB,QAASA,U,IC5C3D,G,oBCUG,SAAS4hB,GAAT,GAAuC,IAAZ5hB,EAAW,EAAXA,QAC1BwT,EAAUtK,YAAYiL,IAEtB2N,EAAYzf,MALW,GAM1BuK,OACA1I,KAAI,SAACZ,EAAG2L,GAAJ,OAAY,cAAC,IAAD,CAAoBvY,UAAWQ,KAAO6qB,UAAvB9S,MAElC,OACE,qBAAKvY,UAAWkB,IAAGV,KAAO8qB,gBAAiB7pB,IAAab,SAAxD,SACGkc,EACC,4CACGxT,QADH,IACGA,OADH,EACGA,EAASkE,KAAI,SAAC2P,GAAD,OACZ,cAAC+F,GAAD,CAAoB/F,OAAQA,GAAaA,EAAOoO,aAElD,cAAC7D,GAAD,OAGF0D,IDzBR,IAAI,GAAY,CAAC,QAAS,WAE1B,SAAS,KAA2Q,OAA9P,GAAW/mB,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAASqX,GAAalW,EAAMC,GAC1B,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDI,MAAO,6BACPC,MAAO,OACPC,OAAQ,OACRC,QAAS,oBACTC,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAM,KAAU,GAAqB,gBAAoB,OAAQ,CAC3EiC,GAAI,eACJ8X,EAAG,2JACH7D,UAAW,iCACXG,KAAM,WAIV,IAAI,GAA0B,aAAiBsV,IAChC,IEjBR,SAASC,KACd,IAAM/T,EAAKlB,KACX,EAA0DhE,YACxDvJ,IADM+E,EAAR,EAAQA,oBAAqB/J,EAA7B,EAA6BA,KAAMgK,EAAnC,EAAmCA,mBAGnC,EAA0BmO,mBAAS,YAAnC,mBAAOoN,EAAP,KAAcC,EAAd,KACMjZ,EAAWiH,cACjB,EAAkC2E,oBAAS,GAA3C,mBAAOsP,EAAP,KAAkBC,EAAlB,KAPiC,4CAcjC,sBAAAjnB,EAAA,6DACE+kB,EAAS,WADX,SAEQjZ,EAAS7G,MAFjB,4CAdiC,sBAmBjC,OAVAkS,qBAAU,WACRrL,EAASzB,MACTyB,EAAS9D,QACR,CAAC8D,IAQF,qCACa,YAAVgZ,GACC,cAACN,GAAD,CACEnoB,KAAM2W,EACJ,8FAEFxX,QAAQ,UACRipB,YAAa,YAGN,aAAVK,GACC,sBAAKxpB,UAAWkB,IAAGO,IAAab,QAASJ,KAAOuN,cAAhD,UACE,qBACE/N,UAAWkB,IAAGO,IAAamqB,gBAAiBnqB,IAAab,SAD3D,SAGE,oBAAIZ,UAAWyB,IAAaod,UAA5B,SAAwCnH,EAAG,gBAE5CzJ,GACC,cAAC0O,GAAD,CAAOC,SAAS,QAAQ5c,UAAWQ,KAAOqrB,kBAA1C,SACGnU,EAAG,uBAGR,sBAAK1X,UAAWQ,KAAOsrB,gBAAvB,UACE,cAAC9E,GAAD,CAAoB/iB,KAAMA,IAC1B,cAAC6hB,GAAD,CAAkB7hB,KAAMA,IAExB,qBAAKjE,UAAWQ,KAAOurB,iBAAvB,SACE,cAACnsB,EAAD,CACEE,KAAK,SACLI,QAAQ,SACRC,KAAK,KACLH,UAAWQ,KAAOwrB,UAClBnsB,MAAO6X,EAAG,UACVtX,KAAM,cAAC,GAAD,IACNH,SAAU+N,EACVjO,QAAS,kBAAM4rB,GAAa,QAGhC,qBACE3rB,UAAWkB,IACTO,IAAawqB,SACZhe,GAAsBxM,IAAaF,UAGxC,cAACke,GAAD,CACE7e,QAAS8W,EACP,iFAEF4D,OAAQoQ,EACRnQ,QAAS,kBAAMoQ,GAAa,IAC5BjM,QAAS,CACP,CACE7f,MAAO6X,EAAG,cACV4I,QAAS,kBAAMqL,GAAa,IAC5BzrB,QAAS,SAEX,CACEL,MAAO6X,EAAG,yBACV4I,QAAS,kBA9EQ,0CA8EFqG,IACfzmB,QAAS,sB,wBCtFpB,SAASirB,GAAT,GAAuC,IAAZ7hB,EAAW,EAAXA,QAC1BoO,EAAKlB,KACLsG,EAAUtK,YAAYiL,IAEtB2N,EAAYzf,MANW,GAO1BuK,OACA1I,KAAI,SAACZ,EAAG2L,GAAJ,OACH,cAAC,IAAD,CAEEvY,UAAWkB,IACTV,KAAO6qB,SACP9S,EAAM,IAAM,EAAI/X,KAAO0rB,KAAO1rB,KAAO2rB,MAHlC5T,MAQX,OACE,qBACEvY,UAAWkB,IACTV,KAAO4rB,gBACP3qB,IAAab,QACba,IAAaC,UAJjB,SAOE,sBAAK1B,UAAWQ,KAAO6rB,uBAAvB,UACE,sBAAKrsB,UAAWQ,KAAO8rB,mBAAvB,UACE,qBAAKtsB,UAAWQ,KAAO+rB,YAAvB,SAAqC7U,EAAG,WACxC,qBAAK1X,UAAWQ,KAAOgsB,WAAvB,SAAoC9U,EAAG,aAExCoF,EACC,4CACGxT,QADH,IACGA,OADH,EACGA,EAASkE,KAAI,SAAC2P,EAAQ5E,GAAT,OACZ,cAACwL,GAAD,CACE5G,OAAQA,EAER5E,IAAKA,GADA4E,EAAOoO,aAIhB,cAACxD,GAAD,OAGFqD,O,wBCnCJjB,GAAgB,CACpBlkB,oBAAqB,uBACrBmkB,aAAc,wBAGT,SAASqC,KACd,IAAM/U,EAAKlB,KACLhG,EAAWiH,cACjB,EAQIjF,YAAY+L,IAPdZ,EADF,EACEA,WACAK,EAFF,EAEEA,kBACAC,EAHF,EAGEA,mBACAF,EAJF,EAIEA,uBACAH,EALF,EAKEA,kBACAC,EANF,EAMEA,gBACAK,EAPF,EAOEA,oBAEMpc,EAAO4qB,cAAP5qB,GAEF8f,EAAelK,EACnByS,IAA+B,OAAjBnM,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBle,OAAQ,iBAQ3C,OALA+b,qBAAU,WACRrL,EAAS4N,MACT5N,EAAS5G,GAAU9H,MAClB,CAAC0O,EAAU1O,IAGZ,sBAAK9B,UAAWkB,IAAGO,IAAab,QAASJ,KAAOmsB,gBAAhD,UACE,qBAAK3sB,UAAWkB,IAAGO,IAAamqB,gBAAiBnqB,IAAab,SAA9D,SACE,oBAAIZ,UAAWyB,IAAaod,UAA5B,SAAwCnH,EAAG,yBAE5CmG,GACC,cAAClB,GAAD,CAAOC,SAAS,QAAQ5c,UAAWQ,KAAOosB,oBAA1C,SACGlV,EAAG,yBAGR,cAAC,IAAD,CACE2O,oBAAoB,EACpBC,cAAe,CACbvkB,MAAgB,OAAV4b,QAAU,IAAVA,OAAA,EAAAA,EAAY3T,gBAAiB,GACnCF,SAAmB,OAAV6T,QAAU,IAAVA,OAAA,EAAAA,EAAY7T,UAAW,IAElCyc,SAAU,YAAwB,IAArBxkB,EAAoB,EAApBA,KAAM+H,EAAc,EAAdA,QACjB0G,EACE4M,GAAiB,CACftb,KACAiI,UAAW4T,EAAW5T,UACtBhI,OACA+H,cAZR,SAiBG,SAAC2L,GAAD,OACC,mCACE,uBACE8Q,SAAU9Q,EAAMkR,aAChB3mB,UAAWkB,IAAGV,KAAO2gB,KAAM1f,IAAa0f,MAF1C,UAIE,cAACjC,GAAD,CACErf,MAAO6X,EAAG,SACVvV,MAAO6J,GAAY,OAAC2R,QAAD,IAACA,OAAD,EAACA,EAAY7R,OAChCzL,QAASud,IAEX,cAAChc,EAAD,CACEC,MAAO6V,EAAG,QACV5V,GAAG,cACHC,KAAK,OACLC,SAAUyT,EAAM8O,aAChB9B,OAAQhN,EAAMqR,WACd3kB,MAAOsT,EAAMnR,OAAOvC,KACpB1B,QAASud,IAEX,cAAChc,EAAD,CACEC,MAAO6V,EAAG,WACV5V,GAAG,iBACHC,KAAK,UACLG,WAAW,EACXF,SAAUyT,EAAM8O,aAChB9B,OAAQhN,EAAMqR,WACd3kB,MAAOsT,EAAMnR,OAAOwF,QACpBzJ,QAASud,IAEVM,GACC,eAACvB,GAAD,CAAOC,SAAS,UAAhB,cAA4BlF,EAAG,qBAEhCuG,GACC,cAACtB,GAAD,CAAOC,SAAS,QAAhB,SAAyBgF,IAE3B,qBAAK5hB,UAAWyB,IAAaslB,SAA7B,SACE,cAACnnB,EAAD,CACEO,KAAK,KACLL,KAAK,SACLE,UAAWQ,KAAOW,OAClBtB,MAAO6X,EAAG,QACVzX,SAAU2d,GAAqBG,EAC/B1d,QAAS0d,MAGb,qBACE/d,UAAWkB,IACTO,IAAawqB,SACZpO,GAAmBpc,IAAaF,qB,wBCrH5C,SAASqnB,GAAT,GAKH,IAJF/oB,EAIC,EAJDA,MACAgpB,EAGC,EAHDA,KACAC,EAEC,EAFDA,cACA+D,EACC,EADDA,iBAEA,OACE,sBAAK7sB,UAAWkB,IAAGV,KAAOssB,SAAUhE,GAApC,UACE,qBAAK9oB,UAAWkB,IAAGV,KAAOorB,gBAAiBnqB,IAAab,SAAxD,SACGf,GAAS,oBAAIG,UAAWyB,IAAaod,UAA5B,SAAwChf,MAEpD,qBAAKG,UAAWQ,KAAOusB,iBAAvB,SACE,qBACE/sB,UAAWkB,IAAGO,IAAab,QAASJ,KAAOI,QAASisB,GACpDG,wBAAyB,CAAEC,OAAQpE,UCoBtC,SAASqE,KACd,IACMrE,EAxBR,SAAoB7f,GAId,OAAQA,GACN,QACA,IAAK,KAAM,MCtBJ,6/JDuBP,IAAK,KAAM,MEvBJ,gzLFwBP,IAAK,KAAM,MGxBJ,oxMHyBP,IAAK,KAAM,MIzBJ,y6KJ4BT,OAAQA,GACN,QACA,IAAK,KAAM,MK9BJ,qmFL+BP,IAAK,KAAM,MM/BJ,ipGNgCP,IAAK,KAAM,MOhCJ,o9GPiCP,IAAK,KAAM,MQjCJ,45FRwCA0f,CADAlW,YAAY3C,KAGzB,OACE,cAAC+Y,GAAD,CACEC,KAAMA,I,wBSnCL,SAASsE,KACd,MAA4B/Q,mBAAS,IAArC,mBAAOzU,EAAP,KAAeylB,EAAf,KACA,EAA8BhR,mBAAS,IAAvC,mBAAO/R,EAAP,KAAgBgjB,EAAhB,KAsBA,OApBAxR,qBAAU,WACR,IAAMyR,EAAUjiB,GAAc,YAC9B,GAAIiiB,EAAJ,CACE,IAAMC,EAAWliB,GAAc,YAAa,IAC5CpG,OAAOuoB,OAAOtoB,SAAd,UAA4BsB,8BAA5B,2BAA6E+mB,EAA7E,kBAA+FD,OAFjG,CAMA,IAAMG,EAASpiB,GAAc,SAAU,IACjCqiB,EAAQriB,GAAc,QAAS,IAC/BhB,EAAUojB,EAAOhgB,MAAM,KAAK,IAAM,cAClC9F,EACoB,OAAxB+lB,EAAMlT,cACF,0CACA,oBAEN6S,EAAWhjB,GACX+iB,EAAUzlB,MACT,IAGD,sBAAK3H,UAAWQ,KAAOmtB,YAAvB,UACE,mBAAGxoB,KAAMqB,+BAAsCxG,UAAWQ,KAAOwS,KAAjE,SACE,qBAAKF,IAAI,oBAAoBC,IAAI,WAEnC,oBAAG/S,UAAWQ,KAAO6oB,KAArB,UACE,6CAAgBhf,KAChB,8BAAM1C,UChCP,SAASimB,KACd,IAAMlW,EAAKlB,KACLhG,EAAWiH,cACX/O,EAAoB2C,GAAc,UACxC,EAA8B+Q,mBAAS,IAAvC,mBAAOwE,EAAP,KAAgBiN,EAAhB,KACA,EAA8BzR,mBAAS,IAAvC,mBAAOlc,EAAP,KAAgB4tB,EAAhB,KAEMnH,EAAe/P,sBAAW,uCAC9B,WAAOlO,GAAP,SAAAhE,EAAA,sEACqB8L,EAAS/H,GAAc,CAAEC,uBAD9C,OAGkC,cAHlC,OAGW6G,KAAK4W,eACZ0H,EACEnW,EACE,2FAGJoW,EAAW,aAEXA,EAAW,SACXD,EAAWnW,EAAG,2CAZlB,2CAD8B,sDAgB9B,CAAClH,EAAUkH,IAWb,OARAmE,qBAAU,WACJnT,EACFie,EAAaje,GAEb1D,MAED,CAAC0D,EAAmBie,IAGrB,mCACE,cAACuC,GAAD,CAAYnoB,KAAM6f,EAAS1gB,QAASA,EAASipB,YAAa,YCpCzD,SAAS4E,KACd,IAAMrW,EAAKlB,KACLhG,EAAWiH,cACjB,EAA8B2E,mBAAS,IAAvC,mBAAOwE,EAAP,KAAgBiN,EAAhB,KACA,EAA8BzR,mBAAS,IAAvC,mBAAOlc,EAAP,KAAgB4tB,EAAhB,KACMplB,EAAoB2C,GAAc,UAElCsb,EAAe/P,sBAAW,uCAC9B,WAAOlO,GAAP,eAAAhE,EAAA,sEACqB8L,EAAS7H,GAAsB,CAAED,uBADtD,OAGkC,eAF1BT,EADR,QAGWsH,KAAK4W,eACZ0H,EAAWnW,EAAG,6BAA+BzP,EAAK+E,QAAQvD,cAC1DqkB,EAAW,aAEXA,EAAW,SACXD,EAAWnW,EAAG,8CARlB,2CAD8B,sDAY9B,CAAClH,EAAUkH,IAWb,OARAmE,qBAAU,WACJnT,EACFie,EAAaje,GAEb1D,MAED,CAAC0D,EAAmBie,IAGrB,mCACE,cAACuC,GAAD,CAAYnoB,KAAM6f,EAAS1gB,QAASA,EAASipB,YAAa,YChCzD,SAAS6E,KACd,IAAMtW,EAAKlB,KACLhG,EAAWiH,cACjB,EAA8B2E,mBAAS,IAAvC,mBAAOwE,EAAP,KAAgBiN,EAAhB,KACA,EAA8BzR,mBAAS,IAAvC,mBAAOlc,EAAP,KAAgB4tB,EAAhB,KACMplB,EAAoB2C,GAAc,UAElCsb,EAAe/P,sBAAW,uCAC9B,WAAOlO,GAAP,SAAAhE,EAAA,sEACqB8L,EAAS5H,GAAkB,CAAEF,uBADlD,OAGkC,cAHlC,OAGW6G,KAAK4W,eACZ3V,EAASC,MACTod,EAAWnW,EAAG,6CACdoW,EAAW,aAEXA,EAAW,SACXD,EAAWnW,EAAG,uDATlB,2CAD8B,sDAa9B,CAAClH,EAAUkH,IAWb,OARAmE,qBAAU,WACJnT,EACFie,EAAaje,GAEb1D,MAED,CAAC0D,EAAmBie,IAGrB,mCACE,cAACuC,GAAD,CAAYnoB,KAAM6f,EAAS1gB,QAASA,EAASipB,YAAa,Y,ICzC5D,GAAO8E,GAAQC,GAAQ,GAAIC,G,6BAE3B,GAAY,CAAC,QAAS,WAE1B,SAAS,KAA2Q,OAA9P,GAAW9pB,OAAO4K,QAAU,SAAUkF,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAU9G,OAAQ6G,IAAK,CAAE,IAAIE,EAASD,UAAUD,GAAI,IAAK,IAAI5Q,KAAO8Q,EAAcjQ,OAAOkQ,UAAUC,eAAeC,KAAKH,EAAQ9Q,KAAQ2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAY,OAAO2Q,GAAkB,GAASO,MAAMC,KAAMN,WAEhT,SAAS,GAAyBC,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAAkE9Q,EAAK4Q,EAAnED,EAEzF,SAAuCG,EAAQO,GAAY,GAAc,MAAVP,EAAgB,MAAO,GAAI,IAA2D9Q,EAAK4Q,EAA5DD,EAAS,GAAQW,EAAazQ,OAAO0Q,KAAKT,GAAqB,IAAKF,EAAI,EAAGA,EAAIU,EAAWvH,OAAQ6G,IAAO5Q,EAAMsR,EAAWV,GAAQS,EAASG,QAAQxR,IAAQ,IAAa2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAQ,OAAO2Q,EAFxM,CAA8BG,EAAQO,GAAuB,GAAIxQ,OAAO6Q,sBAAuB,CAAE,IAAIC,EAAmB9Q,OAAO6Q,sBAAsBZ,GAAS,IAAKF,EAAI,EAAGA,EAAIe,EAAiB5H,OAAQ6G,IAAO5Q,EAAM2R,EAAiBf,GAAQS,EAASG,QAAQxR,IAAQ,GAAkBa,OAAOkQ,UAAUa,qBAAqBX,KAAKH,EAAQ9Q,KAAgB2Q,EAAO3Q,GAAO8Q,EAAO9Q,IAAU,OAAO2Q,EAMne,SAASia,GAAuB9Y,EAAMC,GACpC,IAAI1V,EAAQyV,EAAKzV,MACb2V,EAAUF,EAAKE,QACfC,EAAQ,GAAyBH,EAAM,IAE3C,OAAoB,gBAAoB,MAAO,GAAS,CACtDK,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTK,KAAM,OACNR,MAAO,6BACPI,IAAKP,EACL,kBAAmBC,GAClBC,GAAQ5V,EAAqB,gBAAoB,QAAS,CAC3DiC,GAAI0T,GACH3V,GAAS,KAAmB,gBAAoB,IAAK,CACtDwuB,SAAU,sBACT,KAAU,GAAqB,gBAAoB,OAAQ,CAC5DC,SAAU,UACVC,SAAU,UACV3U,EAAG,yxBACH1D,KAAM,aACU,gBAAoB,OAAQ,CAC5CpU,GAAI,eACJmX,MAAO,CACLuV,SAAU,aAEZC,UAAW,iBACXC,EAAG,EACHC,EAAG,EACHhZ,MAAO,GACPC,OAAQ,IACPqY,KAAWA,GAAsB,gBAAoB,OAAQ,CAC9DrU,EAAG,4CACH1D,KAAM,YACW,gBAAoB,IAAK,CAC1C0Y,KAAM,sBACQ,gBAAoB,OAAQ,CAC1C9sB,GAAI,eACJmX,MAAO,CACLuV,SAAU,aAEZC,UAAW,iBACXC,GAAI,EACJC,EAAG,EACHhZ,MAAO,GACPC,OAAQ,IACPsY,KAAWA,GAAsB,gBAAoB,OAAQ,CAC9DtU,EAAG,yxBACH1D,KAAM,YACF,KAAO,GAAkB,gBAAoB,IAAK,CACtD0Y,KAAM,sBACQ,gBAAoB,OAAQ,CAC1ChV,EAAG,qDACH1D,KAAM,gBACAiY,KAAUA,GAAqB,gBAAoB,OAAQ,KAAmB,gBAAoB,WAAY,CACpHrsB,GAAI,gBACU,gBAAoB,OAAQ,CAC1C6T,MAAO,GACPC,OAAQ,GACRM,KAAM,cAIV,IAAI,GAA0B,aAAiBkY,IAChC,ICvDR,SAASS,KACd,MAAgCzS,oBAAS,GAAzC,mBAAOsG,EAAP,KAAiBwD,EAAjB,KACM1V,EAAWiH,cAEXC,EAAKlB,KAEXqF,qBAAU,WACRrL,EAASiB,QACR,CAACjB,IAEJ,MACEgC,YAAYN,IADNtB,EAAR,EAAQA,gBAAiBC,EAAzB,EAAyBA,YAAaC,EAAtC,EAAsCA,mBAGhCge,EAAe,IAAIC,gBAAgB9pB,OAAOC,SAASsG,QAEnDwjB,EAAsB,aAAIF,EAAaG,WAAWC,QACtD,SAACC,EAAD,GAAqC,IAAD,mBAAtBC,EAAsB,KAAXjtB,EAAW,KAClC,OAAO,2BACFgtB,GADL,mBAEGC,EAAYjtB,MAGjB,IAGI8kB,EAASC,YAAU,CACvBZ,cAAc,2BACT0I,GADQ,IAEX9qB,MAAO,GACP4E,SAAU,KAEZyd,SAAS,WAAD,4BAAE,WAAOjiB,GAAP,eAAAI,EAAA,yDACRwhB,GAAY,IACR5E,GAAQkF,GAFJ,gCAGahW,EACjBE,GAAa,2BACRse,GADO,IAEVzmB,SAAUjE,EAAOJ,MACjB4E,SAAUxE,EAAOwE,aAPf,OAU0B,eAP1Bb,EAHA,QAUGsH,KAAK4W,gBACZlhB,OAAOC,SAASC,KAAO8C,EAAK+E,QAAQ9H,UAXhC,sBAcN+G,KAdM,2CAAF,mDAAC,KAmBLua,EAAmBvF,GACvB,CAAEE,KAAM8F,EAAO3iB,QACfshB,IAGIwC,EAAgBpG,GAAYwE,EAAkB,SAC9Cc,EAAetF,GAAYwE,EAAkB,YAEnD,OACE,sBAAKxmB,UAAWkB,IAAGmuB,KAAYhH,UAAW7nB,KAAO8uB,eAAjD,UACE,uBAAM/I,SAAUU,EAAON,aAAc3mB,UAAWyB,IAAa0f,KAA7D,UACE,oBAAInhB,UAAWkB,IAAGO,IAAa5B,MAAO4B,IAAaod,WAAnD,SACGnH,EAAG,8BAEN,qBAAK1X,UAAWQ,KAAO+uB,mBAAvB,SACE,cAAC,GAAD,MAEF,qBAAKvvB,UAAWkB,IAAGO,IAAa+oB,SAAU/oB,IAAa2e,UAAvD,SACG1I,EAAG,8BAEN,cAACqL,GAAD,CACElhB,MAAO6V,EAAG,SACV5V,GAAG,cACHC,KAAK,QACLC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAOJ,MACrB+d,OAAQmG,EACR1F,SAAUA,IAEZ,cAACK,GAAD,CACElhB,MAAO6V,EAAG,YACV5V,GAAG,iBACHC,KAAK,WACLjC,KAAK,WACLkC,SAAUilB,EAAO1C,aACjB9B,OAAQwE,EAAOH,WACf3kB,MAAO8kB,EAAO3iB,OAAOwE,SACrBmZ,OAAQqF,EACR5E,SAAUA,IAEZ,qBACE1iB,UAAWkB,IACTmuB,KAAY/G,kBACZ9nB,KAAO8nB,mBAHX,SAME,qBAAKtoB,UAAWqvB,KAAY9G,YAA5B,SACE,cAAC5V,GAAD,CACEC,GAAI,CACF6G,SAAU,qBACVzK,MAAO,CAAEub,eAAe,IAH5B,SAMG7S,EAAG,iCAIV,qBAAK1X,UAAWyB,IAAaslB,SAA7B,SACE,cAACnnB,EAAD,CACES,QAASuQ,EACT5Q,UAAWqvB,KAAYluB,OACvBrB,KAAK,SACLD,MAAO6X,EAAG,aACVzX,SAAU2Q,EACV1Q,QAAQ,iBAIb2Q,GACC,mBAAGoI,MAAO,CAAEuP,MAAO,MAAOC,UAAW,UAArC,SAEM/Q,EADH5G,EACM,sBACA,6B,wBCvBF0e,OAnFf,WACE,I/EtBgC3hB,E+ESX4hB,EAafC,EAAgBld,YAAY3C,IAC5B8f,E/EtBW3Y,GADenJ,E+EuBG6hB,K/EpBjCpoB,QAAQsoB,KAAR,yBAA+B/hB,EAA/B,wBAA6DA,GACtDmJ,GAAQD,I+EoBX7R,EAAW8b,cACX6O,GAhBeJ,EAgBUvqB,EAASuU,SAfjC,CACL,SACA,UACA,wBACA,kBACA,qBACA,QACA,cACA1N,SAAS0jB,IAiBX,OARA5T,qBAAU,WACJgU,EACFzjB,SAAS0P,KAAKgU,UAAUC,OAAOvvB,KAAOwvB,mBAEtC5jB,SAAS0P,KAAKgU,UAAUG,IAAIzvB,KAAOwvB,qBAEpC,CAACH,IAGF,cAAC,IAAD,CACEhiB,OAAQ6hB,EACRQ,cA/BkB,KAgClBP,SAAUA,EAHZ,SAKE,eAAC,IAAD,WACE,cAAC,IAAD,CAAOjU,KAAK,WAAZ,SACE,cAACyR,GAAD,MAEF,cAAC,IAAD,CAAOzR,KAAK,IAAZ,SACE,qBACE1b,UAAWkB,IACTV,KAAO2vB,SACNN,GAAYrvB,KAAOwvB,mBAHxB,SAME,sBAAKhwB,UAAWQ,KAAOkS,UAAvB,UACE,cAACJ,GAAD,IACA,qBAAKtS,UAAWQ,KAAOI,QAAvB,SACE,eAAC,IAAD,WACE,cAAC,IAAD,CAAO8a,KAAK,SAAZ,SACE,cAACwM,GAAD,MAEF,cAAC,IAAD,CAAOxM,KAAK,kCAAZ,SACE,cAAC6N,GAAD,MAEF,cAAC,IAAD,CAAO7N,KAAK,qBAAZ,SACE,cAAC2O,GAAD,MAEF,cAAC,IAAD,CAAO3O,KAAK,kBAAZ,SACE,cAACkS,GAAD,MAEF,cAAC,IAAD,CAAOlS,KAAK,2BAAZ,SACE,cAACqS,GAAD,MAEF,cAAC,IAAD,CAAOrS,KAAK,uBAAZ,SACE,cAACsS,GAAD,MAEF,cAAC,IAAD,CAAOtS,KAAK,QAAZ,SACE,cAACwR,GAAD,MAEF,cAAC,IAAD,CAAOxR,KAAK,aAAZ,SACGtW,EAAUQ,aACT,cAACipB,GAAD,IAEA,cAAC,IAAD,CAAUjc,GAAG,QAGjB,cAAC,GAAD,CAAcwd,OAAK,EAAC1U,KAAK,IAAIpC,UAAWoR,KACxC,cAAC,GAAD,CAAchP,KAAK,YAAYpC,UAAWmS,KAC1C,cAAC,GAAD,CACE/P,KAAK,uBACLpC,UAAWmT,KAEb,cAAC,IAAD,CAAO/Q,KAAK,IAAZ,SACE,cAAC,IAAD,CAAU9I,GAAG,aAInB,cAACgG,GAAD,iBC3GDyX,GAAsB1jB,YACjC,4BADiD,uCAEjD,WAAOtC,EAAP,oBAAA3F,EAAA,6DAAkBmI,EAAlB,EAAkBA,gBAAlB,kBAEyBlI,GAAkB0F,GAF3C,cAEU1C,EAFV,yBAGWA,GAHX,yDAKWkF,EAAgB,EAAD,KAL1B,yDAFiD,wDAUjD,CACEoQ,UAAW,SAAC5S,EAAD,GAIT,GAAmD,cADrC6S,EAHsB,EAAfA,YAIXtX,aAAa0D,QAAQe,GAAS1C,OACtC,OAAO,KAKF4C,GAAcoC,YACzB,2BADyC,uCAEzC,WAAOtC,EAAP,oBAAA3F,EAAA,6DAAkBmI,EAAlB,EAAkBA,gBAAlB,kBAE2BlI,GAAgB0F,GAF3C,cAEUimB,EAFV,yBAGW,CAAEjmB,UAASimB,SAAUA,EAASA,SAAUC,MAAOD,EAASC,QAHnE,yDAKW1jB,EAAgB,EAAD,KAL1B,yDAFyC,wDAUzC,CACEoQ,UAAW,SAAC5S,EAAD,GAET,IADc6S,EADsB,EAAfA,YAEXtX,aAAa0D,QAAQe,GAAShK,QAAS,OAAO,KAKjDmwB,GAAa7jB,YACxB,0BADwC,uCAExC,WAAO8jB,EAAP,wBAAA/rB,EAAA,6DAAwBmI,EAAxB,EAAwBA,gBAAxB,SAEYxC,EAAqBomB,EAArBpmB,QAASI,EAAYgmB,EAAZhmB,QACXimB,EAHV,2BAIS/sB,KAAKC,MAAM6sB,EAAchmB,QAAQ6O,YAJ1C,IAKMtP,cAAeS,EAAQ1I,KACvBjC,KAAM2K,EAAQ3K,OANpB,SAQU6E,GAAgB,CAAE0F,QAASA,EAASI,QAASimB,IARvD,gCASW,CAAErmB,UAASqmB,eATtB,yDAWW7jB,EAAgB,EAAD,KAX1B,yDAFwC,wDAgBxC,CACEoQ,UAAW,SAACrQ,EAAD,GAET,IADcsQ,EADgB,EAAfA,YAELtX,aAAa+qB,cAAe,OAAO,KAKtChmB,GAAgBgC,YAC3B,6BAD2C,uCAE3C,WAAO8jB,EAAP,kBAAA/rB,EAAA,6DAAwBmI,EAAxB,EAAwBA,gBAAxB,kBAEUlI,GAAkB8rB,GAF5B,+EAIW5jB,EAAgB,EAAD,KAJ1B,wDAF2C,wDAS3C,CACEoQ,UAAW,SAACrQ,EAAD,GAET,IADcsQ,EADgB,EAAfA,YAELtX,aAAagrB,iBAAkB,OAAO,KAKzC9lB,GAAiB6B,YAC5B,8BAD4C,uCAE5C,WAAOtC,EAAP,kBAAA3F,EAAA,6DAAkBmI,EAAlB,EAAkBA,gBAAlB,kBAEUlI,GAAmB0F,GAF7B,+EAIWwC,EAAgB,EAAD,KAJ1B,wDAF4C,wDAS5C,CACEoQ,UAAW,SAACrQ,EAAD,GAET,IADcsQ,EADgB,EAAfA,YAELtX,aAAagrB,iBAAkB,OAAO,KA+CtD,IAAMjiB,GArCG,CACLkiB,SALK,CAAElpB,OAAQ,aAAcmpB,WAAY,GAAIC,eAAgB,IAM7DJ,eAAe,EACfC,kBAAkB,EAClBvpB,OAAO,EACPiC,QAAS,IAkCA0nB,GAAoBniB,YAAY,CAC3C9M,KAAM,eACN4M,gBACAG,SAAU,CACRmiB,aAAc,SAACjiB,EAAOK,GACpBL,EAAM6hB,SAAWxhB,EAAOrC,QAAUqC,EAAOrC,QAhDtC,CAAErF,OAAQ,aAAcmpB,WAAY,GAAIC,eAAgB,KAkD7DG,SAAU,SAACliB,GACT3K,OAAO4K,OAAOD,EAjBX,CACL3H,OAAO,EACPspB,eAAe,EACfC,kBAAkB,MAiBpB1hB,cAAe,SAACC,GACdA,EAAQC,QAAQ7E,GAAY+E,SAAS,SAACN,EAAOK,GAC3CL,EAAM1F,QAAQ+F,EAAOE,KAAK6W,KAAK/lB,SAAU,KAE3C8O,EAAQC,QAAQ7E,GAAYkF,WAAW,SAACT,EAAOK,GAC7C,MAAqCA,EAAOrC,QAApC3C,EAAR,EAAQA,QAASimB,EAAjB,EAAiBA,SAAUC,EAA3B,EAA2BA,MAC3BvhB,EAAM1F,QAAQe,GAAd,2BACK2E,EAAM1F,QAAQe,IADnB,IAEEymB,WAAYR,EAAS1Y,QAAO,SAAC0B,GAAD,OAC1BA,EAAU9E,eAAe,WAE3Buc,eAAgBT,EAAS1Y,QACvB,SAAC0B,GAAD,OAAgBA,EAAU9E,eAAe,WAE3C+b,QACAlwB,SAAS,EACT8wB,QAAQ,IAELZ,EAAMhjB,SACTyB,EAAM1F,QAAQe,GAAS1C,OAAS,YAGpCwH,EAAQC,QAAQ7E,GAAYmF,UAAU,SAACV,EAAOK,GAC5CL,EAAM1F,QAAQ+F,EAAOE,KAAK6W,KAAK/lB,SAAU,EACzC2O,EAAM1F,QAAQ+F,EAAOE,KAAK6W,KAAK+K,QAAS,EACxCniB,EAAM1F,QAAQ+F,EAAOE,KAAK6W,KAAKze,OAAS,gBACpC0H,EAAOrC,QAAQlN,OACjBkP,EAAM1F,QAAQ+F,EAAOE,KAAK6W,KAAK/e,MAAQgI,EAAOrC,QAAQlN,SAG1DqP,EAAQC,QAAQohB,GAAWlhB,SAAS,SAACN,GACnCA,EAAM2hB,eAAgB,KAExBxhB,EAAQC,QAAQohB,GAAW/gB,WAAW,SAACT,EAAOK,GAC5C,MAAgCA,EAAOrC,QAA/B3C,EAAR,EAAQA,QAASqmB,EAAjB,EAAiBA,WACXU,EAAepiB,EAAM1F,QAAQe,GAASymB,WAAWO,WACrD,SAACf,GAAD,OAAcA,EAASxuB,KAAO4uB,EAAW5uB,OAEzB,IAAlBsvB,EACKpiB,EAAM1F,QAAQe,GAASymB,WAAWM,GAAgBV,EAClD1hB,EAAM1F,QAAQe,GAASymB,WAAvB,uBACI9hB,EAAM1F,QAAQe,GAASymB,YAD3B,CAECJ,IAEN1hB,EAAM1F,QAAQe,GAAS0mB,eAAiB/hB,EAAM1F,QAC5Ce,GACA0mB,eAAenZ,QAAO,SAAC0Y,GAAD,OAAcA,EAASxuB,KAAO4uB,EAAW5uB,MACjEkN,EAAM2hB,eAAgB,KAExBxhB,EAAQC,QAAQohB,GAAW9gB,UAAU,SAACV,EAAOK,GAC3CL,EAAM3H,OAAQ,EACd2H,EAAM2hB,eAAgB,EAClBthB,EAAOrC,QAAQlN,OACjBkP,EAAM1F,QAAQ+F,EAAOE,KAAK6W,IAAI/b,SAAShD,MAAQgI,EAAOrC,QAAQlN,SAGlEqP,EAAQC,QAAQihB,GAAoB/gB,SAAS,SAACN,EAAOK,GACnDL,EAAM1F,QAAQ+F,EAAOE,KAAK6W,KAAKze,OAAS,cAE1CwH,EAAQC,QAAQihB,GAAoB5gB,WAAW,SAACT,EAAOK,GACrDL,EAAM1F,QAAQ+F,EAAOE,KAAK6W,KAAKze,OAAS0H,EAAOrC,QAAQrF,UAEzDwH,EAAQC,QAAQihB,GAAoB3gB,UAAU,SAACV,EAAOK,GACpDL,EAAM1F,QAAQ+F,EAAOE,KAAK6W,KAAKze,OAAS,gBACpC0H,EAAOrC,QAAQlN,OACjBkP,EAAM1F,QAAQ+F,EAAOE,KAAK6W,KAAK/e,MAAQgI,EAAOrC,QAAQlN,SAG1DqP,EAAQC,QAAQzE,GAAc2E,SAAS,SAACN,GACtCA,EAAM4hB,kBAAmB,KAE3BzhB,EAAQC,QAAQzE,GAAc8E,WAAW,SAACT,EAAOK,GAC/CL,EAAM3H,OAAQ,EACd2H,EAAM4hB,kBAAmB,EACzB,IAAMtX,EAAYtK,EAAM1F,QAAQ+F,EAAOE,KAAK6W,IAAI/b,SAASymB,WAAW5jB,MAClE,SAACzC,GAAD,OAAaA,EAAQ3I,KAAOuN,EAAOE,KAAK6W,IAAIxb,aAExCkmB,EAAa9hB,EAAM1F,QAAQ+F,EAAOE,KAAK6W,IAAI/b,SAASymB,WAC1D9hB,EAAM1F,QAAQ+F,EAAOE,KAAK6W,IAAI/b,SAASymB,WAAaA,EAAWlZ,QAC7D,SAACnN,GAAD,OAAaA,EAAQ3I,KAAOuN,EAAOE,KAAK6W,IAAIxb,aAE9CoE,EAAM1F,QAAQ+F,EAAOE,KAAK6W,IAAI/b,SAAS0mB,eAAvC,uBACK/hB,EAAM1F,QAAQ+F,EAAOE,KAAK6W,IAAI/b,SAAS0mB,gBAD5C,CAEEzX,OAGJnK,EAAQC,QAAQzE,GAAc+E,UAAU,SAACV,EAAOK,GAC9CL,EAAM3H,OAAQ,EACd2H,EAAM4hB,kBAAmB,EACrBvhB,EAAOrC,QAAQlN,OACjBkP,EAAM1F,QAAQ+F,EAAOE,KAAK6W,IAAI/b,SAAShD,MAAQgI,EAAOrC,QAAQlN,SAGlEqP,EAAQC,QAAQtE,GAAewE,SAAS,SAACN,GACvCA,EAAM4hB,kBAAmB,KAE3BzhB,EAAQC,QAAQtE,GAAe2E,WAAW,SAACT,EAAOK,GAChDL,EAAM4hB,kBAAmB,EACzB5hB,EAAM1F,QAAQ+F,EAAOE,KAAK6W,KAAKze,OAAS,MAE1CwH,EAAQC,QAAQtE,GAAe4E,UAAU,SAACV,EAAOK,GAC/CL,EAAM4hB,kBAAmB,EACzB5hB,EAAM1F,QAAQ+F,EAAOE,KAAK6W,KAAKze,OAAS,mBAE1CwH,EAAQC,QAAQqB,GAAOhB,WAAW,WAChC,OAAO,eA3JJ,CACLohB,SALK,CAAElpB,OAAQ,aAAcmpB,WAAY,GAAIC,eAAgB,IAM7DJ,eAAe,EACfC,kBAAkB,EAClBvpB,OAAO,EACPiC,QAAS,QAwJT6F,EAAQC,QAAQ4N,GAAevN,WAAW,SAACT,EAAOK,GApJtD,IAAmC/F,EAqJ7B0F,EAAM1F,QAAN,2BApJJ,QADiCA,EAsJE+F,EAAOrC,eArJ1C,IAAO1D,OAAP,EAAOA,EACHsO,QAAO,SAACuF,GAAD,OAAY/X,EAAUS,gBAAgBkG,SAASoR,EAAOrR,UAC9DojB,QACC,SAACoC,EAAYnU,GAAb,mBAAC,eACImU,GADL,mBAEGnU,EAAO9S,QAAU,CAChB1C,OAAQ,GACRtH,SAAS,EACT8wB,QAAQ,EACR9pB,MAAO,KACPypB,WAAY,GACZC,eAAgB,GAChBR,MAAO,QAGX,KAuIKvhB,EAAM1F,eAMV,GAAmC0nB,GAAkBphB,QAmB/C2hB,IAnBN,GAAQN,aAAR,GAAsBC,SAmBMF,GAAkB1gB,SC/RxCkhB,GAAQC,YAAe,CAClCnhB,QAAS,CACPyB,KAAMM,GACN/I,QAASkV,GACTzO,SAAUM,GACVzK,aAAc2rB,MCXZG,GAAY,CAChB,kBAAmB,UACnB,kBAAmB,uBAUd,WACL,MAA2BzsB,OAAOC,SAE5BysB,EAVR,SAA6BjW,GAC3B,MACErX,OAAO4qB,QAAQyC,IAAWxkB,MAAK,gBAAEoH,EAAF,2BAAuC,IAAzBoH,EAAK1G,QAAQV,OAC1D,GACF,OAHA,oBASiBsd,CAFjB,EAAQnY,SAAR,EAAkBY,MAGbsX,IACL1sB,OAAOC,SAAWysB,GCPpBE,GAEAC,IAAStY,OACP,cAAC,IAAMuY,WAAP,UACE,cAAC,IAAD,CAAUP,MAAOA,GAAjB,SACE,eAAC,IAAD,WACE,cAACzQ,GAAD,IACA,cAAC,GAAD,UACE,cAAC,GAAD,aAKR3U,SAAS4lB,eAAe,W","file":"static/js/main.a80a9dd0.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"title\":\"shared_title__1kxaD\",\"subtitle\":\"shared_subtitle__1i_CK\",\"content\":\"shared_content__3ExR8\",\"form\":\"shared_form__1mqVk\",\"btnGroup\":\"shared_btnGroup__25xlW\",\"hidden\":\"shared_hidden__2MP6x\",\"overlay\":\"shared_overlay__1iqv9\",\"headerContainer\":\"shared_headerContainer__1YqIb\",\"link\":\"shared_link__22fay\",\"backLink\":\"shared_backLink__fjUgh\",\"formSeparator\":\"shared_formSeparator__1VceP\",\"pageTitle\":\"shared_pageTitle__1di9V\",\"mainText\":\"shared_mainText__wioeL\",\"formText\":\"shared_formText__2i-rm\",\"secondaryText\":\"shared_secondaryText__ptu0A\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"button\":\"Button_button__LwMAv\",\"buttonContent\":\"Button_buttonContent__2WyaJ\",\"buttonTextWithIcon\":\"Button_buttonTextWithIcon__3H1wy\",\"disabled\":\"Button_disabled__2Ejco\",\"danger\":\"Button_danger__2AbMH\",\"light\":\"Button_light__1Y1gt\",\"buttonText\":\"Button_buttonText__8AJHD\",\"primary\":\"Button_primary__qrr19\",\"hidden\":\"Button_hidden__35sBw\",\"buttonTextSm\":\"Button_buttonTextSm__20p4u\",\"buttonTextLg\":\"Button_buttonTextLg__3yLli\",\"sm\":\"Button_sm__18vFv\",\"loader\":\"Button_loader__35mck\",\"lg\":\"Button_lg__2PQPk\",\"icon\":\"Button_icon__2b0BQ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"errorsBox\":\"shared_errorsBox__sZcLb\",\"errorBorder\":\"shared_errorBorder__71yXg\",\"errorLabel\":\"shared_errorLabel__7cOS2\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"avatar\":\"UserDropdown_avatar__2QWCs\",\"userDropdown\":\"UserDropdown_userDropdown__zdb1u\",\"userDropdownWrapper\":\"UserDropdown_userDropdownWrapper__3Ekm8\",\"arrow\":\"UserDropdown_arrow__3eawC\",\"userName\":\"UserDropdown_userName__1V2i6\",\"arrowOpen\":\"UserDropdown_arrowOpen__1o5rP\",\"optionItem\":\"UserDropdown_optionItem__QxfKL\",\"optionItemName\":\"UserDropdown_optionItemName__3yDqS\",\"icon\":\"UserDropdown_icon__i0Wo8\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"userSettings\":\"UserSettingsPage_userSettings__2Ek4Q\",\"settingsWrapper\":\"UserSettingsPage_settingsWrapper__1zSCF\",\"containerForLink\":\"UserSettingsPage_containerForLink__3P_DF\",\"btnDanger\":\"UserSettingsPage_btnDanger__4leqj\",\"userSettingsError\":\"UserSettingsPage_userSettingsError__3UaCA\",\"hidden\":\"UserSettingsPage_hidden__1F_Uh\",\"btnGroup\":\"UserSettingsPage_btnGroup__1Au7p\",\"backLinkZindex\":\"UserSettingsPage_backLinkZindex__1385p\",\"userSettingsForm\":\"UserSettingsPage_userSettingsForm__2nqng\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"loginPage\":\"LoginPage_loginPage__3_fdA\",\"containerForLinks\":\"LoginPage_containerForLinks__W5TON\",\"formSection\":\"LoginPage_formSection__1jHsK\",\"errorsBox\":\"LoginPage_errorsBox__175sz\",\"errorBorder\":\"LoginPage_errorBorder__B1_3S\",\"errorLabel\":\"LoginPage_errorLabel__2mBeg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"title\":\"DeviceCardListView_title__3oCjn\",\"subtitle\":\"DeviceCardListView_subtitle__2bqeN\",\"content\":\"DeviceCardListView_content__ej5G2\",\"form\":\"DeviceCardListView_form__G_Whv\",\"btnGroup\":\"DeviceCardListView_btnGroup__M6f_a\",\"hidden\":\"DeviceCardListView_hidden__26alL\",\"overlay\":\"DeviceCardListView_overlay__1ZRuA\",\"headerContainer\":\"DeviceCardListView_headerContainer__1rJ5u\",\"link\":\"DeviceCardListView_link__3rd6O\",\"backLink\":\"DeviceCardListView_backLink__23tuO\",\"formSeparator\":\"DeviceCardListView_formSeparator__DSTnO\",\"pageTitle\":\"DeviceCardListView_pageTitle__3-WTc\",\"mainText\":\"DeviceCardListView_mainText__oNtYl\",\"formText\":\"DeviceCardListView_formText__3TMJS\",\"secondaryText\":\"DeviceCardListView_secondaryText__-Gyyb\",\"deviceCard\":\"DeviceCardListView_deviceCard__3qvXF\",\"deviceCardWrapper\":\"DeviceCardListView_deviceCardWrapper__2huQT\",\"deviceLink\":\"DeviceCardListView_deviceLink__1U8nf\",\"deviceImage\":\"DeviceCardListView_deviceImage__10wWI\",\"deviceInfo\":\"DeviceCardListView_deviceInfo__jq7RL\",\"model\":\"DeviceCardListView_model__3kFh3\",\"deviceName\":\"DeviceCardListView_deviceName__1MUmh\",\"deviceModel\":\"DeviceCardListView_deviceModel__3tAU2\",\"deviceBtnGroup\":\"DeviceCardListView_deviceBtnGroup__H8kz9\",\"devicePlayIcon\":\"DeviceCardListView_devicePlayIcon__R7MmA\",\"deviceSettingsIcon\":\"DeviceCardListView_deviceSettingsIcon__s6LnC\",\"deviceIconLink\":\"DeviceCardListView_deviceIconLink__1WuGl\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"hidden\":\"SignUpPage_hidden__2nr_G\",\"signupPage\":\"SignUpPage_signupPage__1_rv3\",\"link\":\"SignUpPage_link__2oHLl\",\"button\":\"SignUpPage_button__2dtb2\",\"form\":\"SignUpPage_form__3J9kV\",\"containerForLinks\":\"SignUpPage_containerForLinks__3GGPP\",\"termsLink\":\"SignUpPage_termsLink__3tXSo\",\"alert\":\"SignUpPage_alert__2DOur\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"languageDropdownWrapper\":\"LanguageDropdown_languageDropdownWrapper__3Rpnl\",\"popoverWrapper\":\"LanguageDropdown_popoverWrapper__30dC8\",\"arrowOpen\":\"LanguageDropdown_arrowOpen__L9M5R\",\"arrow\":\"LanguageDropdown_arrow__t1jMP\",\"optionItem\":\"LanguageDropdown_optionItem__1oQ8v\",\"optionItemName\":\"LanguageDropdown_optionItemName__1unYo\",\"icon\":\"LanguageDropdown_icon__17UYP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"deviceCard\":\"DeviceCardGridView_deviceCard__1H2_f\",\"deviceCardWrapper\":\"DeviceCardGridView_deviceCardWrapper__1h4Ah\",\"deviceLink\":\"DeviceCardGridView_deviceLink__1dIdr\",\"deviceModel\":\"DeviceCardGridView_deviceModel__2eRHP\",\"deviceName\":\"DeviceCardGridView_deviceName__5-8rL\",\"deviceBtnGroup\":\"DeviceCardGridView_deviceBtnGroup__3QTTY\",\"devicePlayIcon\":\"DeviceCardGridView_devicePlayIcon__2iiRK\",\"deviceSettingsIcon\":\"DeviceCardGridView_deviceSettingsIcon__1hwHL\",\"deviceIconLink\":\"DeviceCardGridView_deviceIconLink__3qdza\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"devicesListView\":\"DevicesListView_devicesListView__3NL_8\",\"devicesListViewWrapper\":\"DevicesListView_devicesListViewWrapper__2q7b5\",\"devicesListHeaders\":\"DevicesListView_devicesListHeaders__3sj2A\",\"modelHeader\":\"DevicesListView_modelHeader__ANcmV\",\"nameHeader\":\"DevicesListView_nameHeader__jW_7s\",\"skeleton\":\"DevicesListView_skeleton__3GLQF\",\"odd\":\"DevicesListView_odd__1LKjA\",\"even\":\"DevicesListView_even__Yi8Kf\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"input\":\"Input_input__119AQ\",\"textarea\":\"Input_textarea__kLQiU\",\"label\":\"Input_label__2lxHn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"viewSwitch\":\"ViewSwitch_viewSwitch__1HMqV\",\"text\":\"ViewSwitch_text__CDYfx\",\"viewTypeGroup\":\"ViewSwitch_viewTypeGroup__1QorT\",\"listViewIcon\":\"ViewSwitch_listViewIcon__20F1k\",\"gridViewIcon\":\"ViewSwitch_gridViewIcon__3HEhP\",\"inactive\":\"ViewSwitch_inactive__2D8r7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"ErrorBoundary_container__1JHFf\",\"content\":\"ErrorBoundary_content__2YheA\",\"iconContainer\":\"ErrorBoundary_iconContainer__2R2pN\",\"icon\":\"ErrorBoundary_icon__1m-Gb\",\"message\":\"ErrorBoundary_message__3grri\",\"footer\":\"ErrorBoundary_footer__3W7LI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"selectWrapper\":\"Select_selectWrapper__tncVI\",\"marginBottom\":\"Select_marginBottom__1xY8P\",\"select\":\"Select_select__hhi0_\",\"label\":\"Select_label__1bIW3\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dialogOverlay\":\"Dialog_dialogOverlay__33PGK\",\"dialogWrapper\":\"Dialog_dialogWrapper__2Lzo9\",\"dialogContentWrapper\":\"Dialog_dialogContentWrapper__22NgP\",\"dialogBtnGroup\":\"Dialog_dialogBtnGroup__3ds78\",\"dialogBtn\":\"Dialog_dialogBtn__76tVA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapper\":\"App_wrapper__RCHjb\",\"container\":\"App_container__eSJ6i\",\"content\":\"App_content__1Wt3K\",\"privateBackground\":\"App_privateBackground__3xlM_\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"label\":\"TextField_label__16rTg\",\"title\":\"TextField_title__2bGM0\",\"value\":\"TextField_value__1ElE_\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"title\":\"AddNewDeviceListView_title__3d3g1\",\"subtitle\":\"AddNewDeviceListView_subtitle__25o9m\",\"content\":\"AddNewDeviceListView_content__1-GDG\",\"form\":\"AddNewDeviceListView_form__154fd\",\"btnGroup\":\"AddNewDeviceListView_btnGroup__27nph\",\"hidden\":\"AddNewDeviceListView_hidden__1UuyD\",\"overlay\":\"AddNewDeviceListView_overlay__sSH8v\",\"headerContainer\":\"AddNewDeviceListView_headerContainer__CoFzP\",\"link\":\"AddNewDeviceListView_link__2eyQK\",\"backLink\":\"AddNewDeviceListView_backLink__ITnIO\",\"formSeparator\":\"AddNewDeviceListView_formSeparator__2hw13\",\"pageTitle\":\"AddNewDeviceListView_pageTitle__MVHli\",\"mainText\":\"AddNewDeviceListView_mainText__GWDea\",\"formText\":\"AddNewDeviceListView_formText__1U1lk\",\"secondaryText\":\"AddNewDeviceListView_secondaryText__3W1ZE\",\"addNewDevice\":\"AddNewDeviceListView_addNewDevice__dj1W0\",\"addNewDeviceWrapper\":\"AddNewDeviceListView_addNewDeviceWrapper__2Q-Aa\",\"addNewDeviceContent\":\"AddNewDeviceListView_addNewDeviceContent__39e8U\",\"addNewDeviceLink\":\"AddNewDeviceListView_addNewDeviceLink__ncFzF\",\"addNewDeviceImg\":\"AddNewDeviceListView_addNewDeviceImg__1GG_9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"header\":\"Header_header__2XAj3\",\"container\":\"Header_container__1H-1u\",\"logo\":\"Header_logo__2XG30\",\"homeLink\":\"Header_homeLink__3Hesi\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"checkboxWrapper\":\"Checkbox_checkboxWrapper__3Mq79\",\"input\":\"Checkbox_input__3X7kq\",\"label\":\"Checkbox_label__TG9yw\",\"labelContent\":\"Checkbox_labelContent__3_WnQ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"addNewDevice\":\"AddNewDeviceGridView_addNewDevice__2cQPF\",\"addNewDeviceTitle\":\"AddNewDeviceGridView_addNewDeviceTitle__YXGeq\",\"addNewDeviceImg\":\"AddNewDeviceGridView_addNewDeviceImg__r_ELz\",\"addNewDeviceLink\":\"AddNewDeviceGridView_addNewDeviceLink__2nuT7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"backButton\":\"PasswordRecoveryPage_backButton__2Uoac\",\"error\":\"PasswordRecoveryPage_error__8P-3J\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"deviceSettings\":\"DeviceSettings_deviceSettings__1LXxr\",\"form\":\"DeviceSettings_form__11V5C\",\"btnGroup\":\"DeviceSettings_btnGroup__1JFs5\",\"deviceSettingsError\":\"DeviceSettings_deviceSettingsError__14cxw\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"infoPage\":\"InfoPage_infoPage__2ekjC\",\"headerContainer\":\"InfoPage_headerContainer__6rIeW\",\"contentContainer\":\"InfoPage_contentContainer__2apmL\",\"content\":\"InfoPage_content__30mHa\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"error\":\"ValidationErrors_error__1y2KR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"Footer_footer__1G6Wy\",\"footerLinks\":\"Footer_footerLinks__vYW8Z\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"alert\":\"Alert_alert__27tUY\",\"error\":\"Alert_error__2GL4B\",\"success\":\"Alert_success__EftFN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"loader\":\"Loader_loader__d9YUC\",\"circularLoader\":\"Loader_circularLoader__21k6B\",\"rotate\":\"Loader_rotate__2e9O3\",\"loaderPath\":\"Loader_loaderPath__3fr-l\",\"animate-stroke\":\"Loader_animate-stroke__1Tm81\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"statusPage\":\"StatusPage_statusPage__2rnwF\",\"text\":\"StatusPage_text__3VnOy\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"offlinePage\":\"OfflinePage_offlinePage__3dQmo\",\"logo\":\"OfflinePage_logo__2_IO9\",\"info\":\"OfflinePage_info__2d0aA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"authorizePage\":\"AuthorizePage_authorizePage__38rYM\",\"alexaLogoContainer\":\"AuthorizePage_alexaLogoContainer__TFRcD\",\"containerForLinks\":\"AuthorizePage_containerForLinks__Wv6oI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dropdown\":\"Dropdown_dropdown__1ETdN\",\"popoverWrapper\":\"Dropdown_popoverWrapper__1313N\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"outer\":\"Recaptcha_outer__oAC23\",\"errorsBox\":\"Recaptcha_errorsBox__3oDAl\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"skeleton\":\"MyDevicesPage_skeleton__3X_aU\",\"devicesError\":\"MyDevicesPage_devicesError__3dOjx\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"devicesGridView\":\"DevicesGridView_devicesGridView__HYoFM\",\"skeleton\":\"DevicesGridView_skeleton__1mzmS\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"checkBoxContainer\":\"ValidatedCheckbox_checkBoxContainer__1VwSs\"};","import styles from \"./Button.module.scss\";\nimport cn from \"classnames\";\nimport { Loader } from \".\";\nimport sharedStyles from \"../shared.module.scss\";\n\nexport function Button({\n title,\n type,\n onClick,\n className,\n disabled,\n variant,\n size,\n icon,\n loading,\n}) {\n const variants = {\n danger: styles.danger,\n light: styles.light,\n primary: styles.primary,\n };\n\n const sizeBtn = {\n content: {\n sm: styles.sm,\n lg: styles.lg,\n },\n text: {\n sm: styles.buttonTextSm,\n lg: styles.buttonTextLg,\n },\n };\n\n return (\n \n
\n {loading && }\n {icon && (\n
\n {icon}\n
\n )}\n \n {title}\n \n
\n \n );\n}\n","import styles from \"./Input.module.scss\";\nimport cn from \"classnames\";\nimport Skeleton from \"react-loading-skeleton\";\nimport sharedStyles from \"../shared.module.scss\";\n\nexport function Input({\n label,\n id,\n name,\n onChange,\n className,\n labelClassName,\n type,\n multiline,\n value,\n loading,\n}) {\n return (\n <>\n {label && (\n \n {label}\n \n )}\n {!multiline ? (\n <>\n {loading ? (\n \n ) : (\n \n )}\n \n ) : (\n <>\n {loading ? (\n \n ) : (\n \n )}\n \n )}\n \n );\n}\n","import * as api from \"../api/idderocloud-api\";\n\nconst items = {\n ACCESS_TOKEN: \"access_token\",\n REFRESH_TOKEN: \"refresh_token\",\n USER: \"user\",\n EMAIL: \"email\",\n REMEMBER_ME: \"remember_me\",\n};\n\nexport const setTokens = ({ accessToken, refreshToken }, rememberMe) => {\n setItemToStorage(rememberMe, items.ACCESS_TOKEN, accessToken);\n setItemToStorage(rememberMe, items.REFRESH_TOKEN, refreshToken);\n localStorage.setItem(items.REMEMBER_ME, rememberMe);\n};\n\nexport function setTokensAfterRefresh(tokens) {\n setTokens(tokens, isRememberMe());\n}\n\nexport function getItemFromStorage(key) {\n let storage = getStorage(isRememberMe());\n return storage.getItem(key);\n}\n\nexport function setItemToStorage(rememberMe, name, value) {\n let storage = getStorage(rememberMe);\n storage.setItem(name, value);\n}\n\nexport function isRememberMe() {\n const rememberMe = localStorage.getItem(items.REMEMBER_ME);\n return JSON.parse(rememberMe || \"false\");\n}\n\nexport function getStorage(rememberMe) {\n return rememberMe ? localStorage : sessionStorage;\n}\n\nexport function hasAccessToken() {\n const accessToken = getItemFromStorage(items.ACCESS_TOKEN);\n return Boolean(accessToken);\n}\n\nexport function setUser({ user, email }, rememberMe) {\n setItemToStorage(rememberMe, items.USER, user);\n setItemToStorage(rememberMe, items.EMAIL, email);\n}\n\nexport function getUserFromStorage() {\n return {\n user: getItemFromStorage(items.USER),\n email: getItemFromStorage(items.EMAIL),\n };\n}\n\nexport function clearStorages() {\n clearLocalStorage();\n clearSessionStorage();\n}\n\nexport function clearLocalStorage() {\n Object.values(items).forEach((item) => localStorage.removeItem(item));\n}\n\nexport function clearSessionStorage() {\n Object.values(items).forEach((item) => sessionStorage.removeItem(item));\n}\n\nexport async function refreshToken() {\n const refreshToken = getItemFromStorage(items.REFRESH_TOKEN);\n const tokens = await api.refreshAuthToken(refreshToken);\n if (!tokens.accessToken) {\n throw new Error(\"Failed to get token from the backend\");\n }\n setTokensAfterRefresh(tokens);\n return tokens.accessToken;\n}\n\nexport async function revokeToken(tokenType) {\n const token = getItemFromStorage(tokenType);\n return await api.revokeToken(token, tokenType);\n}\n\nexport function redirectToLogin() {\n clearStorages();\n window.location.href = \"/login\";\n}\n","const oemValuesMap = {\n iddero: {\n cloudDomain: \"iddero.net\",\n modelPrefix: \"Iddero\",\n modelNameMap: {\n VERIP: \"VERSO+IP\",\n VERIND: \"VERSO INDOOR\",\n \"VERIP2\": \"VERSO+IP 2\",\n \"SER3-KNX\": \"Home Server 3\",\n },\n footerLink: \"www.iddero.com\",\n customAvatar: true,\n voiceControl: true,\n voiceCompatible: [\"HC3-KNX\", \"HC3L-KNX\", \"VERIP\", \"VERIND\", \"VERIP2\"]\n },\n eelectron: {\n cloudDomain: \"eelectron.online\",\n modelPrefix: \"\",\n modelNameMap: {\n VERIP: \"TP43I11KNX\",\n VERIND: \"TP43I21KNX\",\n \"VERIP2\": \"TP43M11KNX\",\n \"HC3-KNX\": \"TP70I12KNX\",\n \"HC3L-KNX\": \"TP10I12KNX\",\n },\n footerLink: \"www.eelectron.com\",\n customAvatar: false,\n voiceControl: false,\n voiceCompatible: []\n },\n};\n\nexport const oemFlavor = process.env.REACT_APP_OEM_FLAVOR || \"iddero\";\n\nexport const oemValues = oemValuesMap[oemFlavor];\n","import axios from \"axios\";\nimport {\n getItemFromStorage,\n redirectToLogin,\n refreshToken,\n} from \"../services/auth-service\";\nimport { oemValues } from \"../constants/oem\";\n\nexport const SERVER_ERRORS = {\n USER_ALREADY_EXISTS: \"USER_ALREADY_EXISTS\",\n DEVICE_ACCESS_DENIED: \"DEVICE_ACCESS_DENIED\",\n PRECONDITION_FAILED: \"PRECONDITION_FAILED\",\n NOT_FOUND: \"NOT_FOUND\",\n INCORRECT_PASSWORD: \"INCORRECT_PASSWORD\",\n INVALID_CREDENTIALS: \"INVALID_CREDENTIALS\",\n BAD_REQUEST: \"BAD_REQUEST\",\n GATEWAY_TIMEOUT: \"GATEWAY_TIMEOUT\",\n};\n\nfunction getApiBaseUrl() {\n const basePath =\n process.env.REACT_APP_API_BASE_URL || \"MISSING_REACT_APP_API_BASE_URL\";\n return `${basePath}/v1`;\n}\n\nfunction getVoiceApiBaseUrl() {\n const basePath =\n process.env.REACT_APP_VOICE_API_BASE_URL ||\n \"MISSING_REACT_APP_VOICE_API_BASE_URL\";\n return `${basePath}/v1`;\n}\n\nconst apiClient = axios.create({\n baseURL: getApiBaseUrl(),\n});\n\nconst voiceApiClient =\n oemValues.voiceControl && axios.create({ baseURL: getVoiceApiBaseUrl() });\n\nfunction setupInterceptors(client) {\n client.interceptors.request.use(\n (config) => {\n const token = getItemFromStorage(\"access_token\");\n if (token) {\n config.headers[\"Authorization\"] = `Bearer ${token}`;\n }\n return config;\n },\n (error) => {\n console.error(error, \"request error\");\n return Promise.reject(error);\n }\n );\n\n client.interceptors.response.use(\n (response) => response,\n async (error) => {\n const originalRequest = error.config;\n if (error.response.status === 401 && !originalRequest._retry) {\n try {\n originalRequest._retry = true;\n const accessToken = await refreshToken();\n originalRequest.headers[\"Authorization\"] = `Bearer ${accessToken}`;\n return client(originalRequest);\n } catch (error) {\n console.error(\"Failed to refresh token\", error);\n redirectToLogin();\n return;\n }\n }\n return Promise.reject(error);\n }\n );\n}\n\nsetupInterceptors(apiClient);\n\nif (oemValues.voiceControl) {\n setupInterceptors(voiceApiClient);\n}\n\nexport async function getTokens(user) {\n try {\n const { data } = await axios.post(`${getApiBaseUrl()}/token`, {\n ...user,\n grant_type: \"password\",\n client_id: process.env.REACT_APP_CLIENT_ID,\n });\n return { accessToken: data.access_token, refreshToken: data.refresh_token };\n } catch (err) {\n if (\n err.response.status === 401 &&\n err.response.data?.error === \"invalid_grant\"\n ) {\n const error = new Error(\"Invalid credentials\");\n error.type = SERVER_ERRORS.INVALID_CREDENTIALS;\n throw error;\n }\n\n throw err;\n }\n}\n\nexport async function refreshAuthToken(token) {\n const { data } = await axios.post(`${getApiBaseUrl()}/token`, {\n client_id: process.env.REACT_APP_CLIENT_ID,\n grant_type: \"refresh_token\",\n refresh_token: token,\n });\n return { accessToken: data.access_token, refreshToken: data.refresh_token };\n}\n\nexport async function recoverPassword(email, recaptcha) {\n try {\n const response = await axios.post(`${getApiBaseUrl()}/forgot_password`, {\n client_id: process.env.REACT_APP_CLIENT_ID,\n username: email,\n recaptcha_response: recaptcha,\n });\n return response.data;\n } catch (err) {\n if (err.response.status === 404) {\n const error = new Error(\"User not found\");\n error.type = SERVER_ERRORS.NOT_FOUND;\n throw error;\n }\n\n throw err;\n }\n}\n\nexport async function confirmSignUp({ confirmation_code }) {\n const { data } = await axios.post(`${getApiBaseUrl()}/confirm_signup`, {\n confirmation_code,\n });\n return data;\n}\n\nexport async function confirmForgotPassword({ confirmation_code }) {\n const { data } = await axios.post(\n `${getApiBaseUrl()}/confirm_forgot_password`,\n {\n confirmation_code,\n }\n );\n return data;\n}\n\nexport async function confirmDeleteUser({ confirmation_code }) {\n const { data } = await axios.post(`${getApiBaseUrl()}/confirm_delete_user`, {\n confirmation_code,\n });\n return data;\n}\n\nexport async function signup({\n username,\n password,\n name,\n country,\n lang,\n recaptcha_response,\n}) {\n try {\n const { data } = await axios.post(`${getApiBaseUrl()}/signup`, {\n client_id: process.env.REACT_APP_CLIENT_ID,\n username,\n password,\n name,\n country,\n lang,\n recaptcha_response,\n });\n return data;\n } catch (err) {\n if (err.response.status === 422) {\n const error = new Error(\"User already exists\");\n error.type = SERVER_ERRORS.USER_ALREADY_EXISTS;\n throw error;\n }\n\n throw err;\n }\n}\n\nexport async function getUserData(email) {\n const { data } = await apiClient.get(\"/user\", { username: email });\n return data;\n}\n\nexport async function revokeToken(token, tokenType) {\n const { data } = await apiClient.post(\"/revoke\", {\n token,\n token_type_hint: tokenType,\n });\n return data.revoked;\n}\n\nexport async function getDevices() {\n const email = getItemFromStorage(\"user\");\n const { data } = await apiClient.get(\"/devices\", {\n username: email,\n });\n return data.devices;\n}\n\nexport async function updateUser({ name, country, lang }) {\n const { data } = await apiClient.post(\"/user\", {\n name,\n country,\n lang,\n });\n\n return data;\n}\n\nexport async function changePassword({ new_password, old_password }) {\n try {\n const { data } = await apiClient.post(\"/password\", {\n old_password,\n new_password,\n });\n return data;\n } catch (err) {\n if (err.response.status === 401) {\n const error = new Error(\"Invalid password\");\n error.type = SERVER_ERRORS.INCORRECT_PASSWORD;\n throw error;\n }\n }\n}\n\nexport async function deleteUser() {\n const { data } = await apiClient.post(\"/delete_user\");\n return data;\n}\n\nexport async function getDevice(id) {\n try {\n const { data } = await apiClient.get(`/devices/${id}`);\n return data.devices[0];\n } catch (error) {\n if (error.response.status === 403) {\n const error = new Error(\"You don't have access to this device\");\n error.type = SERVER_ERRORS.DEVICE_ACCESS_DENIED;\n throw error;\n }\n throw error;\n }\n}\n\nexport async function updateDevice({ name, comment, updatekey, id }) {\n try {\n const { data } = await apiClient.post(`/devices/${id}`, {\n friendly_name: name,\n comment,\n updatekey,\n });\n return data.devices[0];\n } catch (error) {\n if (error.response.status === 412) {\n const error = new Error(\"Precondition failed\");\n error.type = SERVER_ERRORS.PRECONDITION_FAILED;\n throw error;\n }\n throw error;\n }\n}\n\nexport async function authorize(authorizeData) {\n try {\n const { data } = await axios.post(\n `${getApiBaseUrl()}/authorize`,\n authorizeData\n );\n return data;\n } catch (err) {\n if (err.response.status === 400) {\n const error = new Error(\"Bad request\");\n error.type = SERVER_ERRORS.INVALID_REQUEST;\n throw error;\n }\n if (err.response.status === 401) {\n const error = new Error(\"Invalid credentials\");\n error.type = SERVER_ERRORS.INVALID_CREDENTIALS;\n throw error;\n }\n throw err;\n }\n}\n\n// Voice API\n\nexport async function refreshDevice(cloudId) {\n try {\n const { data } = await voiceApiClient.post(\n `voice/devices/${cloudId}/refresh`,\n {\n access_token: await refreshToken(),\n client_id: \"iddero-mobile-app\",\n }\n );\n return data;\n } catch (error) {\n if (error.response.status === 404) {\n const error = new Error(\"Device not found\");\n error.type = SERVER_ERRORS.NOT_FOUND;\n throw error;\n }\n if (error.response.status === 504) {\n const error = new Error(\"Device timed out\");\n error.type = SERVER_ERRORS.TIME_OUT;\n throw error;\n }\n throw error;\n }\n}\n\nexport async function getControls(cloudId) {\n try {\n const { data } = await voiceApiClient.get(\n `voice/devices/${cloudId}/controls`\n );\n return data;\n } catch (err) {\n if (err.response.status === 404) {\n const error = new Error(\"Device not found\");\n error.type = SERVER_ERRORS.NOT_FOUND;\n throw error;\n }\n throw err;\n }\n}\n\nexport async function saveControl({ cloudId, control }) {\n try {\n const newData = {\n name: control.friendly_name,\n type: control.type,\n };\n const { data } = await voiceApiClient.post(\n `voice/devices/${cloudId}/controls/${control.id}`,\n newData\n );\n return data;\n } catch (err) {\n if (err.response.status === 400) {\n const error = new Error(\"Bad request\");\n error.type = SERVER_ERRORS.INVALID_REQUEST;\n throw error;\n }\n throw err;\n }\n}\n\nexport async function deleteControl({ cloudId, controlId }) {\n try {\n const { data } = await voiceApiClient.delete(\n `voice/devices/${cloudId}/controls/${controlId}`\n );\n return data;\n } catch (err) {\n if (err.response.status === 400) {\n const error = new Error(\"Bad request\");\n error.type = SERVER_ERRORS.INVALID_REQUEST;\n throw error;\n }\n throw err;\n }\n}\n\nexport async function deleteControls(cloudId) {\n try {\n const { data } = await voiceApiClient.delete(\n `voice/devices/${cloudId}/controls`\n );\n return data;\n } catch (err) {\n throw err;\n }\n}\n","export const countries = [\n \"AF\",\n \"AL\",\n \"DZ\",\n \"AS\",\n \"AD\",\n \"AO\",\n \"AI\",\n \"AQ\",\n \"AG\",\n \"AR\",\n \"AM\",\n \"AW\",\n \"AU\",\n \"AT\",\n \"AZ\",\n \"BS\",\n \"BH\",\n \"BD\",\n \"BB\",\n \"BY\",\n \"BE\",\n \"BZ\",\n \"BJ\",\n \"BM\",\n \"BT\",\n \"BO\",\n \"BA\",\n \"BW\",\n \"BV\",\n \"BR\",\n \"IO\",\n \"VG\",\n \"BN\",\n \"BG\",\n \"BF\",\n \"BI\",\n \"KH\",\n \"CM\",\n \"CA\",\n \"CV\",\n \"KY\",\n \"CF\",\n \"TD\",\n \"CL\",\n \"CN\",\n \"CX\",\n \"CC\",\n \"CO\",\n \"KM\",\n \"CG\",\n \"CD\",\n \"CK\",\n \"CR\",\n \"HR\",\n \"CU\",\n \"CY\",\n \"CZ\",\n \"CI\",\n \"DK\",\n \"DJ\",\n \"DM\",\n \"DO\",\n \"EC\",\n \"EG\",\n \"SV\",\n \"GQ\",\n \"ER\",\n \"EE\",\n \"ET\",\n \"FK\",\n \"FO\",\n \"FJ\",\n \"FI\",\n \"FR\",\n \"GF\",\n \"PF\",\n \"TF\",\n \"GA\",\n \"GM\",\n \"GE\",\n \"DE\",\n \"GH\",\n \"GI\",\n \"GR\",\n \"GL\",\n \"GD\",\n \"GP\",\n \"GU\",\n \"GT\",\n \"GG\",\n \"GN\",\n \"GW\",\n \"GY\",\n \"HT\",\n \"HM\",\n \"HN\",\n \"HK\",\n \"HU\",\n \"IS\",\n \"IN\",\n \"ID\",\n \"IR\",\n \"IQ\",\n \"IE\",\n \"IM\",\n \"IL\",\n \"IT\",\n \"JM\",\n \"JP\",\n \"JE\",\n \"JO\",\n \"KZ\",\n \"KE\",\n \"KI\",\n \"KW\",\n \"KG\",\n \"LA\",\n \"LV\",\n \"LB\",\n \"LS\",\n \"LR\",\n \"LY\",\n \"LI\",\n \"LT\",\n \"LU\",\n \"MO\",\n \"MK\",\n \"MG\",\n \"MW\",\n \"MY\",\n \"MV\",\n \"ML\",\n \"MT\",\n \"MH\",\n \"MQ\",\n \"MR\",\n \"MU\",\n \"YT\",\n \"MX\",\n \"FM\",\n \"MD\",\n \"MC\",\n \"MN\",\n \"ME\",\n \"MS\",\n \"MA\",\n \"MZ\",\n \"MM\",\n \"NA\",\n \"NR\",\n \"NP\",\n \"NL\",\n \"AN\",\n \"NC\",\n \"NZ\",\n \"NI\",\n \"NE\",\n \"NG\",\n \"NU\",\n \"NF\",\n \"KP\",\n \"MP\",\n \"NO\",\n \"OM\",\n \"PK\",\n \"PW\",\n \"PS\",\n \"PA\",\n \"PG\",\n \"PY\",\n \"PE\",\n \"PH\",\n \"PN\",\n \"PL\",\n \"PT\",\n \"PR\",\n \"QA\",\n \"RO\",\n \"RU\",\n \"RW\",\n \"RE\",\n \"BL\",\n \"SH\",\n \"KN\",\n \"LC\",\n \"MF\",\n \"PM\",\n \"VC\",\n \"WS\",\n \"SM\",\n \"SA\",\n \"SN\",\n \"RS\",\n \"CS\",\n \"SC\",\n \"SL\",\n \"SG\",\n \"SK\",\n \"SI\",\n \"SB\",\n \"SO\",\n \"ZA\",\n \"GS\",\n \"KR\",\n \"ES\",\n \"LK\",\n \"SD\",\n \"SR\",\n \"SJ\",\n \"SZ\",\n \"SE\",\n \"CH\",\n \"SY\",\n \"ST\",\n \"TW\",\n \"TJ\",\n \"TZ\",\n \"TH\",\n \"TL\",\n \"TG\",\n \"TK\",\n \"TO\",\n \"TT\",\n \"TN\",\n \"TR\",\n \"TM\",\n \"TC\",\n \"TV\",\n \"UM\",\n \"VI\",\n \"UG\",\n \"UA\",\n \"AE\",\n \"GB\",\n \"US\",\n \"UY\",\n \"UZ\",\n \"VU\",\n \"VA\",\n \"VE\",\n \"VN\",\n \"WF\",\n \"EH\",\n \"YE\",\n \"ZM\",\n \"ZW\",\n \"AX\",\n];\n\nexport const languages = [\n { value: \"en\", name: \"english\" },\n { value: \"es\", name: \"spanish\" },\n { value: \"fr\", name: \"french\" },\n { value: \"de\", name: \"german\" },\n];\n","export default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTMxLjUxIiBoZWlnaHQ9IjExMi4yOTEiIHZpZXdCb3g9IjAgMCAxMzEuNTEgMTEyLjI5MSI+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cmVjdCB3aWR0aD0iMTAxLjExNSIgaGVpZ2h0PSI1OC40ODciLz48L2NsaXBQYXRoPjxjbGlwUGF0aCBpZD0iYiI+PHJlY3Qgd2lkdGg9IjI4LjY1NCIgaGVpZ2h0PSIzNi43NiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJjIj48cmVjdCB3aWR0aD0iOS42MjciIGhlaWdodD0iNi40NTgiLz48L2NsaXBQYXRoPjwvZGVmcz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzAxLjgzOSAtMTk2LjQzNCkiPjxwYXRoIGQ9Ik0zODUuNTI4LDIwOC4yNjRoLS4wNzhtLTIuMTUzLDEuMjE1LDIuMTUzLTEuMjE1LDkuOTgyLDUuOG0uMTE0LDIuNS0uMzkxLTEuNDA3bTAsMFYyMTVsLjEyLS4xMm0uMzEyLS43ODJ2LjQ2OWwtLjA0Mi4wNzh2LjEybC0uMTE0LjAzNi0uMTU2LjA3OG0uMzEyLS43ODItLjA0Mi0uMDM2di0uMDQybC0uMTE0LjA0Mm0wLDAtMi4xNTMsMS4yMTRtNjIuNDM2LDM5LjUzMi05LjMxNC01LjRtMCwxNC42NDJ2LTMuODM2bDkuMzE0LTUuNDA2djMuODQzWm0tODkuNzY4LDIyLjk0MS0zLjI4MywxLjkxOG0wLDMuNDM5LDcuMjc2LDQuMjdtLTcuMjc2LTQuMjd2LTMuNDRsNy4yNzYsNC4yMjdtMCwzLjQ4Myw0LjA3Ny0yLjM1Mm0tNC4wNzcsMi4zNTJ2LTMuNDgybDMuMzY4LTEuOTE4bTMxLjU1Mi03Ny4yLTEwLjAxOC01Ljc1NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzLjA1IC01LjI5NCkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMSIvPjxwYXRoIGQ9Ik00MzAsMzE4Ljk0Nmw5LjMyMS01LjRWMjk2LjU5NEw0NDUsMjkzLjM0N3YtNy43MTVsMzAuMDYxLTE3LjM0M1YyNzZsNS42NDEtMy4yODl2MTYuOTUybDkuMzE0LTUuNFYzMDQuM2wtMTYuOTg3LDkuNzktLjMxMy0zLjYtMjUuNDA2LDE0LjZMNDQ3LDMyOS4xMjcsNDMwLDMzOC45NTNabTM0LjQ1LTUyLjUzMy0uMTItLjI3Ni0uMjcxLS4yMzUtLjM5MS0uMTU2LS40NjktLjA3OGgtLjU0N2wtLjQzMy4xMi0uMzEzLjE5My0uMjM0LjI3Ni0uMDQyLjE1Nm0tLjU0OCwxLjkxOC0uMDc4LS4yNzYtLjMxMi0uMjM1LS4zOTEtLjE1Ni0uNDY5LS4wNzgtLjQ3LjA0Mi0uNDMzLjExNC0uMzkxLjItLjIuMjM1LS4wMzYuMTU2bTMuNzU4LTEuNDA3LjM5MS4xNTYuNDY5LjA3OC41MTItLjA0Mi40MjctLjExNGMuNjg2LS4yNC44MjktLjg2Ni4yLTEuMjU3bC0uMzkxLS4xNTYtLjQ2OS0uMDc4LS41NDguMDQyLS40MzMuMTE0QzQ2MS41MjUsMjY1Ljk4LDQ2MS4zODEsMjY2LjUzOSw0NjIuMDY2LDI2Ni45MjRabS0zLjM2NywxLjkxOC40MzMuMTU2LjQ2OS4wNzguNDY5LS4wNDIuNDMzLS4xMi4zNDktLjE5Mi4yMzQtLjIzNXYtLjMxMmwtLjA3OC0uMjc3LS4zMTItLjIzNC0uMzkxLS4xNTYtLjQ2OS0uMDc4LS40Ny4wNDItLjQzMy4xMTQtLjM5MS4yLS4yLjIzNS0uMDM2LjMxMy4xMi4yNzZaTTQ0NS40MTgsMjc3LjJsLjQzMy4xNTYuNDY5LjA3OC40NjktLjA0Mi40MzMtLjEyLjM0OS0uMTkyLjIzNC0uMjM1di0uMzEybC0uMDc4LS4yNzctLjMxMi0uMjM0LS4zOTEtLjE1Ni0uNDY5LS4wNzgtLjQ3LjA0Mi0uNDMzLjExNC0uMzkxLjItLjIuMjM1LS4wMzYuMzEzLjEyLjI3NlptNi4yMjEtNC4zNC42MTkuMjI0LjY3MS4xMTIuNjcxLS4wNi42Mi0uMTcyLjUtLjI3NS4zMzUtLjMzNnYtLjQ0N2wtLjExMi0uNC0uNDQ3LS4zMzUtLjU2LS4yMjMtLjY3MS0uMTEyLS42NzEuMDYtLjYxOS4xNjMtLjU1OS4yODQtLjI4NC4zMzYtLjA1Mi40NDguMTcyLjRaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNTcuMzUgLTMwLjkxKSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxIi8+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzE2Ljc5NCAxOTYuNDM0KSI+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNMzk5Ljg4OCwyNTQuNzg1bC03MC43LTQwLjg2NywyOS45ODMtMTcuMzQzLDcwLjc3OCw0MC44NjciIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMjkuMDMzIC0xOTYuNDk3KSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxIi8+PC9nPjwvZz48cGF0aCBkPSJNMzc0LjgxLDMyMi4xNTFsLTMwLjM3NC0xNy41LS4zMTMtNC4wNzEtOS4zNTctNS40MDYtLjEyLDEuMjU2TTMwNi42NiwyNzQuMzE1bDMwLjY4NiwxNy43NjkuMzEzLTExLjM1MywzLjUyNCwyLC4zMTksMTEuNzQ0TDM3Mi4yMzEsMzEyLjJsLjMxMy0xMS4zODksMi4yNjcsMS4zMjltLTU1LjctNjYuNDcyLTUuNjc3LDMuMjg5bTY5LjcxOSw1Ny4xOTMuOTgxLjU5bS02OS43Mi0yOC43NzJWMjU2LjQ2bC0uOTgtLjU0N1YyMzguOTYybDcwLjcsNDAuODNtLTM2LjE3MSw3LjYsMi42MjIsMS41MjgsMjEuOTM0LDEyLjltLTY0LjktMjkuOTc1LDYuODM0LTQsMi40NzYsMS40NDEsMjAuNzExLDEyLjE4Mm0xMS42MDgsNS4xNzVWMjc2LjYyM2wtLjk3NC0uNTg5bTQxLjUzNC41MTEtNzAuNy00MC44NzN2LTcuNzA5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMi4xNTcgLTE0LjEwOCkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMS44MzkgMjQ3LjA0OCkiPjxnIGNsaXAtcGF0aD0idXJsKCNiKSI+PHBhdGggZD0iTTMzMC4zNjQsMzI0LjczNGwtMjguMzg0LTE2LjRWMjg4LjMyM2wyLjIzMSwxLjI1Ny4zNTUsMTEuNzQ0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzAxLjkwMiAtMjg4LjE2NykiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMSIvPjwvZz48L2c+PHBhdGggZD0iTTQxNi4zMzUsMzE2LjcxN2wtLjE5Mi0yLjU0NG0tMTAyLjIwOS0zNy43NC04LjM0LDQuODUzbS41ODksMTMsMS4wMTYtLjU0Ny41NDguMzQ5LDcuNzA5LDQuNDI2LDIxLjQ1NiwxMi40MDZtMTEuODU4LTQuMzA2LTYuODA3LDMuOTU3bS0xLjQ5MS05LjE1OSwxLjI1MS43NG0tNC41NC0xLjQ0OSwxLjAyMi0uNjI1LDEuMjkzLjc0Nm05LjI3Mi00LjIyOC04LjMsNC44MTdtLS45NzQtLjU4OSw4LjMtNC44MTdtLTcuMDg5LDYuNjkzLDEuMDE2LS41NDcuMzE5LDExLjc0NG03Ny4zNS00MS4zLDUuNjQxLDMuMjg5bS04NC4wMDcsMzguNTU4LDEuMDE2LS41NDgsMjkuNzEyLDE3LjE1bTIuNTgtMTAuMSw4LjM0LTQuODE3bS04LjM0LDQuODE3LTEuMjUxLS43LTEuMDE2LjU0NyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEuNjggLTM0LjA4MSkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iMSIvPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMS44MzkgMjQxLjY0OSkiPjxnIGNsaXAtcGF0aD0idXJsKCNjKSI+PHBhdGggZD0iTTMwMy45NzcsMjgzLjk1bDEuMjUxLjcwOW02LjEwOS02LjEwOS05LjM1Nyw1LjQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMDEuOTAyIC0yNzguMzk0KSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIxIi8+PC9nPjwvZz48L2c+PC9zdmc+\"","export default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4Mi40NTgiIGhlaWdodD0iMTI0LjMzMyIgdmlld0JveD0iMCAwIDgyLjQ1OCAxMjQuMzMzIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5NzQuNDU4IC0xMzEpIHJvdGF0ZSg5MCkiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMiA4OTMpIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDApIiBmaWxsPSIjZmZmIj48cGF0aCBkPSJNIDExOS40NzE3NjM2MTA4Mzk4IDgwLjk1ODQyNzQyOTE5OTIyIEwgMi44NjE2MDYzNTk0ODE4MTIgODAuOTU4NDI3NDI5MTk5MjIgQyAxLjAwODAwNjIxNTA5NTUyIDgwLjk1ODQyNzQyOTE5OTIyIC0wLjQ5OTk5MzcxMTcwOTk3NjIgNzkuNTAwMTY3ODQ2Njc5NjkgLTAuNDk5OTkzNzExNzA5OTc2MiA3Ny43MDc3MTc4OTU1MDc4MSBMIC0wLjQ5OTk5MzcxMTcwOTk3NjIgMi43NTA3MjE0NTQ2MjAzNjEgQyAtMC40OTk5OTM3MTE3MDk5NzYyIDAuOTU4MjU5ODgwNTQyNzU1MSAxLjAwODAwNjIxNTA5NTUyIC0wLjUwMDAwMTY2ODkzMDA1MzcgMi44NjE2MDYzNTk0ODE4MTIgLTAuNTAwMDAxNjY4OTMwMDUzNyBMIDExOS40NzE3NjM2MTA4Mzk4IC0wLjUwMDAwMTY2ODkzMDA1MzcgQyAxMjEuMzI1MzYzMTU5MTc5NyAtMC41MDAwMDE2Njg5MzAwNTM3IDEyMi44MzMzNzQwMjM0Mzc1IDAuOTU4MjU5ODgwNTQyNzU1MSAxMjIuODMzMzc0MDIzNDM3NSAyLjc1MDcyMTQ1NDYyMDM2MSBMIDEyMi44MzMzNzQwMjM0Mzc1IDc3LjcwNzcxNzg5NTUwNzgxIEMgMTIyLjgzMzM3NDAyMzQzNzUgNzkuNTAwMTY3ODQ2Njc5NjkgMTIxLjMyNTM2MzE1OTE3OTcgODAuOTU4NDI3NDI5MTk5MjIgMTE5LjQ3MTc2MzYxMDgzOTggODAuOTU4NDI3NDI5MTk5MjIgWiIgc3Ryb2tlPSJub25lIi8+PHBhdGggZD0iTSAyLjg2MTYwMjc4MzIwMzEyNSAwIEMgMS4yODExODEzMzU0NDkyMTkgMCAwIDEuMjMxNTI5MjM1ODM5ODQ0IDAgMi43NTA3MTcxNjMwODU5MzggTCAwIDc3LjcwNzczMzE1NDI5Njg4IEMgMCA3OS4yMjY4OTgxOTMzNTkzOCAxLjI4MTE4MTMzNTQ0OTIxOSA4MC40NTg0Mjc0MjkxOTkyMiAyLjg2MTYwMjc4MzIwMzEyNSA4MC40NTg0Mjc0MjkxOTkyMiBMIDExOS40NzE3NDgzNTIwNTA4IDgwLjQ1ODQyNzQyOTE5OTIyIEMgMTIxLjA1MjIwMDMxNzM4MjggODAuNDU4NDI3NDI5MTk5MjIgMTIyLjMzMzM2NjM5NDA0MyA3OS4yMjY4OTgxOTMzNTkzOCAxMjIuMzMzMzY2Mzk0MDQzIDc3LjcwNzczMzE1NDI5Njg4IEwgMTIyLjMzMzM2NjM5NDA0MyAyLjc1MDcxNzE2MzA4NTkzOCBDIDEyMi4zMzMzNjYzOTQwNDMgMS4yMzE1MjkyMzU4Mzk4NDQgMTIxLjA1MjIwMDMxNzM4MjggMCAxMTkuNDcxNzQ4MzUyMDUwOCAwIEwgMi44NjE2MDI3ODMyMDMxMjUgMCBNIDIuODYxNjAyNzgzMjAzMTI1IC0xIEwgMTE5LjQ3MTc0ODM1MjA1MDggLTEgQyAxMjEuNjAxMDUxMzMwNTY2NCAtMSAxMjMuMzMzMzY2Mzk0MDQzIDAuNjgyNTYzNzgxNzM4MjgxMiAxMjMuMzMzMzY2Mzk0MDQzIDIuNzUwNzE3MTYzMDg1OTM4IEwgMTIzLjMzMzM2NjM5NDA0MyA3Ny43MDc3MzMxNTQyOTY4OCBDIDEyMy4zMzMzNjYzOTQwNDMgNzkuNzc1ODc4OTA2MjUgMTIxLjYwMTA1MTMzMDU2NjQgODEuNDU4NDI3NDI5MTk5MjIgMTE5LjQ3MTc0ODM1MjA1MDggODEuNDU4NDI3NDI5MTk5MjIgTCAyLjg2MTYwMjc4MzIwMzEyNSA4MS40NTg0Mjc0MjkxOTkyMiBDIDAuNzMyMjk5ODA0Njg3NSA4MS40NTg0Mjc0MjkxOTkyMiAtMSA3OS43NzU4Nzg5MDYyNSAtMSA3Ny43MDc3MzMxNTQyOTY4OCBMIC0xIDIuNzUwNzE3MTYzMDg1OTM4IEMgLTEgMC42ODI1NjM3ODE3MzgyODEyIDAuNzMyMjk5ODA0Njg3NSAtMSAyLjg2MTYwMjc4MzIwMzEyNSAtMSBaIiBzdHJva2U9Im5vbmUiIGZpbGw9IiMwMDAiLz48L2c+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTguNTY3IDE3LjE5MikiIGZpbGw9IiNmZmYiPjxwYXRoIGQ9Ik0gODMuNzQyMzE3MTk5NzA3MDMgNDYuNTc0NDg5NTkzNTA1ODYgTCAxLjQ1NjM4NzE2MjIwODU1NyA0Ni41NzQ0ODk1OTM1MDU4NiBDIDAuMzc3NjMxNTc0ODY5MTU1OSA0Ni41NzQ0ODk1OTM1MDU4NiAtMC41MDAwMDE3ODgxMzkzNDMzIDQ1LjczMzIwMzg4NzkzOTQ1IC0wLjUwMDAwMTc4ODEzOTM0MzMgNDQuNjk5MTIzMzgyNTY4MzYgTCAtMC41MDAwMDE3ODgxMzkzNDMzIDEuMzc1MzU3ODY2Mjg3MjMxIEMgLTAuNTAwMDAxNzg4MTM5MzQzMyAwLjM0MTI4MDA0MzEyNTE1MjYgMC4zNzc2MzE1NzQ4NjkxNTU5IC0wLjQ5OTk5NzczNTAyMzQ5ODUgMS40NTYzODcxNjIyMDg1NTcgLTAuNDk5OTk3NzM1MDIzNDk4NSBMIDgzLjc0MjMxNzE5OTcwNzAzIC0wLjQ5OTk5NzczNTAyMzQ5ODUgQyA4NC44MjEwNzU0Mzk0NTMxMiAtMC40OTk5OTc3MzUwMjM0OTg1IDg1LjY5ODcwNzU4MDU2NjQxIDAuMzQxMjgwMDQzMTI1MTUyNiA4NS42OTg3MDc1ODA1NjY0MSAxLjM3NTM1Nzg2NjI4NzIzMSBMIDg1LjY5ODcwNzU4MDU2NjQxIDQ0LjY5OTEyMzM4MjU2ODM2IEMgODUuNjk4NzA3NTgwNTY2NDEgNDUuNzMzMjAzODg3OTM5NDUgODQuODIxMDc1NDM5NDUzMTIgNDYuNTc0NDg5NTkzNTA1ODYgODMuNzQyMzE3MTk5NzA3MDMgNDYuNTc0NDg5NTkzNTA1ODYgWiIgc3Ryb2tlPSJub25lIi8+PHBhdGggZD0iTSAxLjQ1NjM5MDM4MDg1OTM3NSAwIEMgMC42NTIwNDYyMDM2MTMyODEyIDAgMCAwLjYxNTc2NDYxNzkxOTkyMTkgMCAxLjM3NTM1MDk1MjE0ODQzOCBMIDAgNDQuNjk5MTI3MTk3MjY1NjIgQyAwIDQ1LjQ1ODcxNzM0NjE5MTQxIDAuNjUyMDQ2MjAzNjEzMjgxMiA0Ni4wNzQ0OTM0MDgyMDMxMiAxLjQ1NjM5MDM4MDg1OTM3NSA0Ni4wNzQ0OTM0MDgyMDMxMiBMIDgzLjc0MjMxNzE5OTcwNzAzIDQ2LjA3NDQ5MzQwODIwMzEyIEMgODQuNTQ2NjY5MDA2MzQ3NjYgNDYuMDc0NDkzNDA4MjAzMTIgODUuMTk4NzA3NTgwNTY2NDEgNDUuNDU4NzE3MzQ2MTkxNDEgODUuMTk4NzA3NTgwNTY2NDEgNDQuNjk5MTI3MTk3MjY1NjIgTCA4NS4xOTg3MDc1ODA1NjY0MSAxLjM3NTM1MDk1MjE0ODQzOCBDIDg1LjE5ODcwNzU4MDU2NjQxIDAuNjE1NzY0NjE3OTE5OTIxOSA4NC41NDY2NjkwMDYzNDc2NiAwIDgzLjc0MjMxNzE5OTcwNzAzIDAgTCAxLjQ1NjM5MDM4MDg1OTM3NSAwIE0gMS40NTYzOTAzODA4NTkzNzUgLTEgTCA4My43NDIzMTcxOTk3MDcwMyAtMSBDIDg1LjA5Njc3ODg2OTYyODkxIC0xIDg2LjE5ODcwNzU4MDU2NjQxIDAuMDY1NTc0NjQ1OTk2MDkzNzUgODYuMTk4NzA3NTgwNTY2NDEgMS4zNzUzNTA5NTIxNDg0MzggTCA4Ni4xOTg3MDc1ODA1NjY0MSA0NC42OTkxMjcxOTcyNjU2MiBDIDg2LjE5ODcwNzU4MDU2NjQxIDQ2LjAwODkwNzMxODExNTIzIDg1LjA5Njc3ODg2OTYyODkxIDQ3LjA3NDQ5MzQwODIwMzEyIDgzLjc0MjMxNzE5OTcwNzAzIDQ3LjA3NDQ5MzQwODIwMzEyIEwgMS40NTYzOTAzODA4NTkzNzUgNDcuMDc0NDkzNDA4MjAzMTIgQyAwLjEwMTkyODcxMDkzNzUgNDcuMDc0NDkzNDA4MjAzMTIgLTEgNDYuMDA4OTA3MzE4MTE1MjMgLTEgNDQuNjk5MTI3MTk3MjY1NjIgTCAtMSAxLjM3NTM1MDk1MjE0ODQzOCBDIC0xIDAuMDY1NTc0NjQ1OTk2MDkzNzUgMC4xMDE5Mjg3MTA5Mzc1IC0xIDEuNDU2MzkwMzgwODU5Mzc1IC0xIFoiIHN0cm9rZT0ibm9uZSIgZmlsbD0iIzAwMCIvPjwvZz48L2c+PC9nPjwvc3ZnPg==\"","/* eslint-disable */\nimport HC3KNX from \"!!url-loader!../assets/icons/device-images/HC3-KNX.svg\";\nimport HC3LKNX from \"!!url-loader!../assets/icons/device-images/HC3L-KNX.svg\";\nimport HC2KNX from \"!!url-loader!../assets/icons/device-images/HC2-KNX.svg\";\nimport HC2LKNX from \"!!url-loader!../assets/icons/device-images/HC2L-KNX.svg\";\nimport HC1iKNX from \"!!url-loader!../assets/icons/device-images/HC1i-KNX.svg\";\nimport SER1KNX from \"!!url-loader!../assets/icons/device-images/SER1-KNX.svg\";\nimport VERIP from \"!!url-loader!../assets/icons/device-images/VERIP.svg\";\n/* eslint-enable */\n\nexport const deviceImages = {\n \"HC3-KNX\": HC3KNX,\n \"HC3L-KNX\": HC3LKNX,\n \"HC2-KNX\": HC2KNX,\n \"HC2L-KNX\": HC2LKNX,\n \"HC1i-KNX\": HC1iKNX,\n \"SER1-KNX\": SER1KNX,\n \"SER3-KNX\": SER1KNX,\n VERIP: VERIP,\n VERIND: VERIP,\n VERIP2: VERIP\n};\n\nexport const devicesWithoutPlayIcon = [\"VERIP\", \"VERIND\", \"VERIP2\"];\n","export default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNzIiIGhlaWdodD0iMTE4IiB2aWV3Qm94PSIwIDAgMTcyIDExOCI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEzMS41IC04OTIuNSkiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgNTU2KSI+PHBhdGggZD0iTTQsMEgxNjdhNCw0LDAsMCwxLDQsNFYxMTNhNCw0LDAsMCwxLTQsNEg0YTQsNCwwLDAsMS00LTRWNEE0LDQsMCwwLDEsNCwwWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyIDMzNykiIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxIi8+PHBhdGggZD0iTTIsMEgxMTVhMiwyLDAsMCwxLDIsMlY2NWEyLDIsMCwwLDEtMiwySDJhMiwyLDAsMCwxLTItMlYyQTIsMiwwLDAsMSwyLDBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTkgMzYyKSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEiLz48L2c+PHBhdGggZD0iTTEsMEExLDEsMCwxLDEsMCwxLDEsMSwwLDAsMSwxLDBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDkgOTkyKSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEiLz48cGF0aCBkPSJNMS41LDBBMS41LDEuNSwwLDEsMSwwLDEuNSwxLjUsMS41LDAsMCwxLDEuNSwwWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjI0IDk5MS41KSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEiLz48L2c+PC9zdmc+\"","export default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOTguOTIyIiBoZWlnaHQ9IjE0NS43OTMiIHZpZXdCb3g9IjAgMCAxOTguOTIyIDE0NS43OTMiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMzEuNSAtODkyLjUpIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzIgODkzKSI+PHBhdGggZD0iTTQuNjMsMEgxOTMuMjkyYTQuOCw0LjgsMCwwLDEsNC42Myw0Ljk1VjEzOS44NDNhNC44LDQuOCwwLDAsMS00LjYzLDQuOTVINC42M0E0LjgsNC44LDAsMCwxLDAsMTM5Ljg0M1Y0Ljk1QTQuOCw0LjgsMCwwLDEsNC42MywwWiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEiLz48cGF0aCBkPSJNMi40MjcsMEgxMzkuNTc3QTIuNTQxLDIuNTQxLDAsMCwxLDE0MiwyLjY0Vjg1LjgwOGEyLjU0MSwyLjU0MSwwLDAsMS0yLjQyNywyLjY0SDIuNDI3QTIuNTQxLDIuNTQxLDAsMCwxLDAsODUuODA4VjIuNjRBMi41NDEsMi41NDEsMCwwLDEsMi40MjcsMFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3Ljg2MyAyOC44NjYpIiBmaWxsPSIjZmZmIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMSIvPjwvZz48cGF0aCBkPSJNMS4xNTUsMEExLjE1NSwxLjE1NSwwLDEsMSwwLDEuMTU1LDEuMTU1LDEuMTU1LDAsMCwxLDEuMTU1LDBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjIuNjk4IDEwMTcuOTcpIiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMC41Ii8+PHBhdGggZD0iTTEuNzMyLDBBMS43MzIsMS43MzIsMCwxLDEsMCwxLjczMiwxLjczMiwxLjczMiwwLDAsMSwxLjczMiwwWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjM2LjUyOCAxMDE3LjM5MykiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIwLjUiLz48L2c+PC9zdmc+\"","export default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNzEuNSIgaGVpZ2h0PSIxMTcuNjU4IiB2aWV3Qm94PSIwIDAgMTcxLjUgMTE3LjY1OCI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEzMS41IC04OTIuNSkiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMiA4OTMpIj48cGF0aCBkPSJNMy45ODgsMEgxNjYuNTEyQTMuOTg4LDMuOTg4LDAsMCwxLDE3MC41LDMuOTg4VjExMi42N2EzLjk4OCwzLjk4OCwwLDAsMS0zLjk4OCwzLjk4OEgzLjk4OEEzLjk4OCwzLjk4OCwwLDAsMSwwLDExMi42N1YzLjk4OEEzLjk4OCwzLjk4OCwwLDAsMSwzLjk4OCwwWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAwKSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEiLz48cGF0aCBkPSJNMS45OTIsMGgxMTIuNTRhMi4wNDIsMi4wNDIsMCwwLDEsMS45OTIsMi4wODhWNjcuODcyYTIuMDQyLDIuMDQyLDAsMCwxLTEuOTkyLDIuMDg4SDEuOTkyQTIuMDQyLDIuMDQyLDAsMCwxLDAsNjcuODcyVjIuMDg4QTIuMDQyLDIuMDQyLDAsMCwxLDEuOTkyLDBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNi4zNTkgMjQuMDQ0KSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEiLz48L2c+PHBhdGggZD0iTTEuNSwwQTEuNSwxLjUsMCwxLDEsMCwxLjUsMS41LDEuNSwwLDAsMSwxLjUsMFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI4MSA5MTQuNjM0KSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjAuNSIvPjxwYXRoIGQ9Ik0xLjIwNiwwQTEuMjA2LDEuMjA2LDAsMSwxLDAsMS4yMDYsMS4yMDYsMS4yMDYsMCwwLDEsMS4yMDYsMFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI4MS4yOSA5NTEuOTA4KSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjAuNSIvPjwvZz48L3N2Zz4=\"","export default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOTcuOTA1IiBoZWlnaHQ9IjE1Ny43MTQiIHZpZXdCb3g9IjAgMCAxOTcuOTA1IDE1Ny43MTQiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMzEuNSAtODkyLjUpIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzIgODkzKSI+PHBhdGggZD0iTTQuNjA2LDBIMTkyLjNjMi41NDQsMCw0LjYwNiwyLjQsNC42MDYsNS4zNTh2MTQ2YzAsMi45NTktMi4wNjIsNS4zNTgtNC42MDYsNS4zNThINC42MDZjLTIuNTQ0LDAtNC42MDYtMi40LTQuNjA2LTUuMzU4di0xNDZDMCwyLjQsMi4wNjIsMCw0LjYwNiwwWiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEiLz48cGF0aCBkPSJNMi4yMTUsMEgxMjcuMzgxQzEyOC42LDAsMTI5LjYsMS4zMiwxMjkuNiwyLjk0OXY5Mi44OWMwLDEuNjI5LS45OTIsMi45NDktMi4yMTUsMi45NDlIMi4yMTVDLjk5Miw5OC43ODgsMCw5Ny40NjgsMCw5NS44MzlWMi45NDlDMCwxLjMyLjk5MiwwLDIuMjE1LDBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNC4yMDggMjguNzE3KSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEiLz48L2c+PHBhdGggZD0iTTEuMTQ5LDBBMS4xNDksMS4xNDksMCwxLDEsMCwxLjE0OSwxLjE0OSwxLjE0OSwwLDAsMSwxLjE0OSwwWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzA0LjY2NCA5NzAuMjA4KSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjAuNSIvPjxwYXRoIGQ9Ik0xLjcyMywwQTEuNzIzLDEuNzIzLDAsMSwxLDAsMS43MjMsMS43MjMsMS43MjMsMCwwLDEsMS43MjMsMFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMy44MTQgOTIwLjc2MykiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIwLjUiLz48L2c+PC9zdmc+\"","export default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNzIiIGhlaWdodD0iMTE4IiB2aWV3Qm94PSIwIDAgMTcyIDExOCI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEzMS41IC04OTIuNSkiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMiA4OTMpIj48cGF0aCBkPSJNNCwwSDE2N2E0LDQsMCwwLDEsNCw0VjExM2E0LDQsMCwwLDEtNCw0SDRhNCw0LDAsMCwxLTQtNFY0QTQsNCwwLDAsMSw0LDBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDApIiBmaWxsPSIjZmZmIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMSIvPjxwYXRoIGQ9Ik0xLjU1NywwSDg5LjUxOWExLjgyMSwxLjgyMSwwLDAsMSwxLjU1NywyVjY1YTEuODIxLDEuODIxLDAsMCwxLTEuNTU3LDJIMS41NTdBMS44MjEsMS44MjEsMCwwLDEsMCw2NVYyQTEuODIxLDEuODIxLDAsMCwxLDEuNTU3LDBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOS4wMzMgMjUpIiBmaWxsPSIjZmZmIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMSIvPjwvZz48cGF0aCBkPSJNMS41LDBBMS41LDEuNSwwLDEsMSwwLDEuNSwxLjUsMS41LDAsMCwxLDEuNSwwWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc3LjcyMiA5MTQuNjk4KSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjAuNSIvPjwvZz48L3N2Zz4=\"","import qs from \"qs\";\nimport md5 from \"md5\";\nimport { devicesWithoutPlayIcon } from \"./constants/images\";\nimport { oemValues } from \"./constants/oem\";\nimport sharedErrorStyles from \"./pages/components/shared.module.scss\";\nimport { AVATAR_SIZE } from \"./constants/constants\";\n\nexport function getQueryParam(name, fallback) {\n const query = qs.parse(window.location.search, { ignoreQueryPrefix: true });\n const value = query[name];\n if ((value === null || value === undefined) && fallback !== undefined)\n return fallback;\n if (Array.isArray(value)) return value[0];\n return value;\n}\n\nexport function isDeviceClickable(model) {\n return devicesWithoutPlayIcon.includes(model);\n}\n\nexport function getModelName(model, name) {\n if (name) return name;\n\n model = oemValues.modelNameMap[model] || model;\n\n // Prefix is only used when friendly name not specified\n // i.e. when we are expected to always return the model name\n if (typeof name === \"undefined\" && oemValues.modelPrefix) {\n return oemValues.modelPrefix + \" \" + model;\n } else {\n return model;\n }\n}\n\nexport function scrollToFirstValidationError(elem) {\n const firstError = (elem || document).querySelector(\n `.${sharedErrorStyles.errorLabel}`\n );\n if (!firstError) return;\n firstError.scrollIntoView({ behavior: \"smooth\" });\n}\n\nexport function generateGravatarUrl(email) {\n if (!email) email = \"DUMMY_EMAIL_PLACEHOLDER\";\n // If an image URL is used it must be publicly available;\n // won't work on localhost\n // https://www.gravatar.com/site/implement/images/\n const defaultAvatar = oemValues.customAvatar\n ? `${process.env.REACT_APP_BASE_URL}/default-avatar.png`\n : \"mp\";\n const hash = md5(email.trim().toLowerCase());\n const params = qs.stringify({ s: AVATAR_SIZE * 2, d: defaultAvatar });\n return `https://www.gravatar.com/avatar/${hash}?${params}`;\n}\n","import { createAsyncThunk, createSlice, createAction } from \"@reduxjs/toolkit\";\nimport * as apiClient from \"../api/idderocloud-api\";\nimport { languages } from \"../constants/select\";\nimport { getQueryParam } from \"../utils\";\n\nexport const getUserDetails = createAsyncThunk(\n \"settings/userData\",\n async (_, { rejectWithValue }) => {\n try {\n const user = await apiClient.getUserData();\n return user;\n } catch (err) {\n return rejectWithValue(err);\n }\n }\n);\n\nexport const updateUser = createAsyncThunk(\n \"settings/updateUser\",\n async ({ name, country, lang }, { rejectWithValue }) => {\n try {\n await apiClient.updateUser({\n name,\n country,\n lang,\n });\n } catch (err) {\n return rejectWithValue(err);\n }\n }\n);\n\nexport const changePassword = createAsyncThunk(\n \"settings/changePassword\",\n async ({ old_password, new_password }, { rejectWithValue }) => {\n try {\n const data = await apiClient.changePassword({\n old_password,\n new_password,\n });\n return data;\n } catch (err) {\n return rejectWithValue(err);\n }\n }\n);\n\nexport const changeLanguage = createAction(\n \"settings/changeLanguage\",\n function prepare(lang) {\n localStorage.setItem(\"user_language\", lang);\n return { payload: lang };\n }\n);\n\nfunction getUserSettingsInitialState() {\n return {\n userSettingsReqId: null,\n userSettings: {},\n userSettingsLoading: false,\n userSettingsFailed: false,\n\n settingsUpdateReqId: null,\n settingsUpdateLoading: false,\n settingsUpdated: false,\n settingUpdateFailed: false,\n\n changePasswordReqId: null,\n changePasswordPending: false,\n changePasswordUpdated: false,\n changePasswordFailed: false,\n changePassErrors: [],\n };\n}\n\nfunction isLangSupported(lang) {\n return languages.find((entry) => entry.value === lang);\n}\n\nfunction getLangFromQueryString() {\n const lang = getQueryParam(\"lang\");\n if (lang && isLangSupported(lang)) {\n return lang;\n }\n}\n\nfunction getNavigatorLang() {\n if (navigator.languages && navigator.languages.length) {\n const navigatorLanguages = navigator.languages.map(\n (lang) => lang.split(\"-\")[0]\n );\n const navigatorLang = navigatorLanguages.find(isLangSupported);\n return navigatorLang;\n }\n\n if (navigator.language) {\n const navigatorLang = navigator.language.split(\"-\")[0];\n if (isLangSupported(navigatorLang)) return navigatorLang;\n }\n}\n\nfunction getInitialState() {\n /* If a lang is specified in the query string, we pick it up.\n * This is good enough for development and testing, however we don't make\n * any effort to keep the query string in sync after the initial parsing.\n */\n return {\n locale:\n getLangFromQueryString() ||\n localStorage.getItem(\"user_language\") ||\n getNavigatorLang() ||\n \"en\",\n ...getUserSettingsInitialState(),\n };\n}\n\nconst initialState = getInitialState();\n\n// reducers\nexport const settingsSlice = createSlice({\n name: \"settings\",\n initialState,\n reducers: {\n initSettingsUpdate: (state) => {\n Object.assign(state, getUserSettingsInitialState());\n },\n },\n extraReducers: (builder) => {\n builder.addCase(changeLanguage, (state, action) => {\n state.locale = action.payload;\n });\n\n builder.addCase(getUserDetails.pending, (state, action) => {\n state.userSettingsReqId = action.meta.requestId;\n state.userSettingsLoading = true;\n });\n builder.addCase(getUserDetails.fulfilled, (state, action) => {\n if (state.userSettingsReqId !== action.meta.requestId) return;\n state.userSettings = action.payload;\n state.userSettingsLoading = false;\n });\n builder.addCase(getUserDetails.rejected, (state, action) => {\n if (state.userSettingsReqId !== action.meta.requestId) return;\n state.userSettingsFailed = true;\n state.userSettingsLoading = false;\n });\n\n builder.addCase(updateUser.pending, (state, action) => {\n state.settingsUpdateReqId = action.meta.requestId;\n state.settingsUpdateLoading = true;\n state.settingsUpdated = false;\n state.settingUpdateFailed = false;\n });\n builder.addCase(updateUser.fulfilled, (state, action) => {\n if (state.settingsUpdateReqId !== action.meta.requestId) return;\n state.settingsUpdated = true;\n state.settingsUpdateLoading = false;\n state.settingUpdateFailed = false;\n });\n builder.addCase(updateUser.rejected, (state, action) => {\n if (state.settingsUpdateReqId !== action.meta.requestId) return;\n state.settingsUpdateLoading = false;\n state.settingUpdateFailed = true;\n state.settingsUpdated = false;\n });\n\n builder.addCase(changePassword.pending, (state, action) => {\n state.changePasswordReqId = action.meta.requestId;\n state.changePasswordPending = true;\n state.changePasswordFailed = false;\n state.changePasswordUpdated = false;\n });\n builder.addCase(changePassword.fulfilled, (state, action) => {\n if (state.changePasswordReqId !== action.meta.requestId) return;\n state.changePasswordPending = false;\n state.changePasswordUpdated = true;\n state.changePassErrors = [];\n });\n builder.addCase(changePassword.rejected, (state, action) => {\n if (state.changePasswordReqId !== action.meta.requestId) return;\n state.changePasswordPending = false;\n state.changePasswordFailed = true;\n if (action.payload.type) {\n state.changePassErrors.push(action.payload.type);\n }\n });\n builder.addCase(\"auth/logout/fulfilled\", () => {\n return { ...getInitialState() };\n });\n },\n});\n\n// actions\nexport const { initSettingsUpdate, initLanguage } = settingsSlice.actions;\n\n// selectors\nexport const getLocale = (state) => state.settings.locale;\nexport const getUserData = (state) => ({\n user: state.settings.userSettings,\n userSettingsLoading: state.settings.userSettingsLoading,\n userSettingsFailed: state.settings.userSettingsFailed,\n});\nexport const isSettingsUpdateFailed = (state) =>\n state.settings.settingUpdateFailed;\nexport const isSettingsUpdated = (state) => state.settings.settingsUpdated;\nexport const isSettingsUpdateLoading = (state) =>\n state.settings.settingsUpdateLoading;\n\nexport const getChangePasswordState = ({ settings }) => ({\n changePasswordPending: settings.changePasswordPending,\n changePasswordFailed: settings.changePasswordFailed,\n changePasswordUpdated: settings.changePasswordUpdated,\n serverErrors: settings.changePassErrors,\n});\n\nexport const settingsReducer = settingsSlice.reducer;\n","import { createAsyncThunk, createSlice } from \"@reduxjs/toolkit\";\nimport * as apiClient from \"../api/idderocloud-api\";\nimport {\n clearStorages,\n getUserFromStorage,\n hasAccessToken,\n revokeToken,\n setTokens,\n setUser,\n} from \"../services/auth-service\";\nimport { changeLanguage } from \"./settings-slice\";\n\nexport const login = createAsyncThunk(\n \"auth/login\",\n async ({ user, rememberMe }, { rejectWithValue, dispatch }) => {\n try {\n const tokens = await apiClient.getTokens(user);\n if (!tokens.accessToken) {\n throw new Error(\"Failed to get token from the backend\");\n }\n setTokens(tokens, rememberMe);\n const data = await apiClient.getUserData(user.username);\n setUser(\n { user: data.name, language: data.lang, email: data.username },\n rememberMe\n );\n dispatch(changeLanguage(data.lang));\n return { name: data.name, email: data.username };\n } catch (err) {\n clearStorages();\n return rejectWithValue(err);\n }\n }\n);\n\n// this action is handled in other slices, keep it in mind when changing/renaming\nexport const logout = createAsyncThunk(\"auth/logout\", async () => {\n try {\n const isRevoked = await revokeToken(\"refresh_token\");\n if (!isRevoked) {\n console.error(\"Failed to revoke token\");\n }\n } catch (err) {\n console.error(\"Failed to revoke token\", err);\n } finally {\n clearStorages();\n }\n});\n\nexport const recoverPassword = createAsyncThunk(\n \"auth/recoverPassword\",\n async ({ email, recaptcha }, { rejectWithValue }) => {\n try {\n await apiClient.recoverPassword(email, recaptcha);\n } catch (err) {\n return rejectWithValue(err);\n }\n }\n);\n\nexport const signup = createAsyncThunk(\n \"auth/signup\",\n async (\n { username, password, name, country, lang, recaptcha_response },\n { rejectWithValue }\n ) => {\n try {\n await apiClient.signup({\n username,\n password,\n name,\n country,\n lang,\n recaptcha_response,\n });\n } catch (err) {\n return rejectWithValue(err);\n }\n }\n);\n\nexport const confirmSignUp = createAsyncThunk(\n \"auth/confirmSignUp\",\n async ({ confirmation_code }, { rejectWithValue }) => {\n try {\n const data = await apiClient.confirmSignUp({\n confirmation_code,\n });\n return data;\n } catch (err) {\n return rejectWithValue(err);\n }\n }\n);\n\nexport const confirmForgotPassword = createAsyncThunk(\n \"auth/confirmForgotPassword\",\n async ({ confirmation_code }, { rejectWithValue }) => {\n try {\n const data = await apiClient.confirmForgotPassword({\n confirmation_code,\n });\n return data;\n } catch (err) {\n return rejectWithValue(err);\n }\n }\n);\n\nexport const confirmDeleteUser = createAsyncThunk(\n \"auth/confirmDeleteUser\",\n async ({ confirmation_code }, { rejectWithValue }) => {\n try {\n const data = await apiClient.confirmDeleteUser({\n confirmation_code,\n });\n return data;\n } catch (err) {\n return rejectWithValue(err);\n }\n }\n);\n\nexport const deleteUser = createAsyncThunk(\n \"auth/deleteUser\",\n async (_, { rejectWithValue }) => {\n try {\n const user = await apiClient.deleteUser();\n return user;\n } catch (err) {\n return rejectWithValue(err);\n }\n }\n);\n\nexport const authorizeApp = createAsyncThunk(\n \"auth/authorizeApp\",\n async (authorizeData, { rejectWithValue }) => {\n try {\n const location = await apiClient.authorize(authorizeData);\n return location;\n } catch (err) {\n return rejectWithValue(err);\n }\n }\n);\n\nfunction getLoginInitialState() {\n return {\n loginInProgress: false,\n loginFailed: false,\n invalidCredentials: false,\n };\n}\n\nfunction getSignupInitialState() {\n return {\n signupInProgress: false,\n signupFailed: false,\n signupSuccess: false,\n signupErrors: [],\n };\n}\n\nfunction getRecoverPasswordInitialState() {\n return {\n recoverPasswordInProgress: false,\n recoverPasswordFailed: false,\n recoverPasswordError: null,\n };\n}\n\nfunction getInitialState() {\n return {\n isLoggedIn: hasAccessToken(),\n\n user: getUserFromStorage().user,\n email: getUserFromStorage().email,\n\n ...getLoginInitialState(),\n ...getSignupInitialState(),\n ...getRecoverPasswordInitialState(),\n\n logoutInProgress: false,\n };\n}\n\nconst initialState = getInitialState();\n\n// reducers\nexport const authSlice = createSlice({\n name: \"auth\",\n initialState,\n reducers: {\n initRecoverPassword: (state) => {\n Object.assign(state, getRecoverPasswordInitialState());\n },\n initLogin: (state) => {\n Object.assign(state, getLoginInitialState());\n },\n initSignup: (state) => {\n Object.assign(state, getSignupInitialState());\n },\n updateUserName: (state, action) => {\n state.user = action.payload;\n },\n initServerError: (state) => {\n state.signupErrors = [];\n },\n },\n extraReducers: (builder) => {\n builder.addCase(login.pending, (state) => {\n state.loginInProgress = true;\n state.loginFailed = false;\n state.invalidCredentials = false;\n });\n builder.addCase(login.fulfilled, (state, action) => {\n state.loginInProgress = false;\n state.isLoggedIn = true;\n state.user = action.payload.name;\n state.email = action.payload.email;\n });\n builder.addCase(login.rejected, (state, action) => {\n if (\n action.payload?.type === apiClient.SERVER_ERRORS.INVALID_CREDENTIALS\n ) {\n state.invalidCredentials = true;\n }\n state.loginInProgress = false;\n state.loginFailed = true;\n });\n\n builder.addCase(signup.pending, (state) => {\n state.signupErrors = [];\n state.signupInProgress = true;\n state.signupFailed = false;\n });\n builder.addCase(signup.fulfilled, (state) => {\n state.isRegistered = true;\n state.signupInProgress = false;\n state.signupFailed = false;\n });\n builder.addCase(signup.rejected, (state, action) => {\n if (action.payload.type) {\n state.signupErrors.push(action.payload.type);\n } else {\n state.signupFailed = true;\n }\n state.signupInProgress = false;\n });\n\n builder.addCase(logout.pending, (state) => {\n state.logoutInProgress = true;\n });\n builder.addCase(logout.fulfilled, (state) => {\n state.logoutInProgress = false;\n state.isLoggedIn = false;\n state.user = null;\n state.email = null;\n });\n\n builder.addCase(recoverPassword.pending, (state) => {\n state.recoverPasswordInProgress = true;\n state.recoverPasswordFailed = false;\n state.recoverPasswordError = null;\n });\n builder.addCase(recoverPassword.fulfilled, (state) => {\n state.recoverPasswordInProgress = false;\n state.recoverPasswordFailed = false;\n });\n builder.addCase(recoverPassword.rejected, (state, action) => {\n if (action.payload.type) {\n state.recoverPasswordError = action.payload.type;\n }\n state.recoverPasswordInProgress = false;\n state.recoverPasswordFailed = true;\n });\n builder.addCase(authorizeApp.pending, (state) => {\n state.loginInProgress = true;\n state.loginFailed = false;\n state.invalidCredentials = false;\n });\n builder.addCase(authorizeApp.rejected, (state, action) => {\n if (\n action.payload?.type === apiClient.SERVER_ERRORS.INVALID_CREDENTIALS\n ) {\n state.invalidCredentials = true;\n }\n state.loginInProgress = false;\n state.loginFailed = true;\n });\n },\n});\n\nexport const {\n initRecoverPassword,\n initLogin,\n initSignup,\n updateUserName,\n initServerError,\n} = authSlice.actions;\n\n// selectors\nexport const isUserLoggedIn = (state) => state.auth.isLoggedIn;\nexport const getUser = ({ auth }) => ({\n userName: auth.user,\n email: auth.email,\n});\n\nexport const getLoginState = ({ auth }) => ({\n isLoggedIn: auth.isLoggedIn,\n loginInProgress: auth.loginInProgress,\n loginFailed: auth.loginFailed,\n invalidCredentials: auth.invalidCredentials,\n});\n\nexport const getPasswordRecoveryState = ({ auth }) => ({\n recoverPasswordInProgress: auth.recoverPasswordInProgress,\n recoverPasswordFailed: auth.recoverPasswordFailed,\n recoverPasswordError: auth.recoverPasswordError,\n});\n\nexport const getSignupErrors = (state) => state.auth.signupErrors;\nexport const getSignupState = ({ auth }) => ({\n serverErrors: auth.signupErrors,\n signupInProgress: auth.signupInProgress,\n signupFailed: auth.signupFailed,\n});\n\nexport const authReducer = authSlice.reducer;\n","import { useSelector } from \"react-redux\";\nimport cn from \"classnames\";\nimport { LanguageDropdown, UserDropdown, Link } from \".\";\nimport { isUserLoggedIn } from \"../redux/auth-slice\";\nimport styles from \"./Header.module.scss\";\nimport sharedStyles from \"../shared.module.scss\";\n\nexport function Header({ hideMenu }) {\n const isLoggedIn = useSelector(isUserLoggedIn);\n\n return (\n
\n
\n \n \"logo\"\n \n {!hideMenu && (isLoggedIn ? : )}\n
\n
\n );\n}\n","import { Link as RouterLink } from \"react-router-dom\";\nimport cn from \"classnames\";\nimport sharedStyles from \"../shared.module.scss\";\n\nexport function Link({ to, className, children, onClick }) {\n if (!to) {\n return (\n
\n {children}\n
\n );\n }\n\n return (\n \n {children}\n \n );\n}\n","import styles from \"./Checkbox.module.scss\";\nimport cn from \"classnames\";\nimport sharedStyles from \"../shared.module.scss\";\n\nexport function Checkbox({\n label,\n id,\n name,\n onChange,\n labelClassName,\n className,\n value,\n}) {\n return (\n
\n \n {label && (\n \n )}\n
\n );\n}\n","import styles from \"./Select.module.scss\";\nimport cn from \"classnames\";\nimport Skeleton from \"react-loading-skeleton\";\nimport sharedStyles from \"../shared.module.scss\";\n\nexport function Select({\n name,\n onChange,\n options,\n label,\n defaultName,\n className,\n labelClassName,\n optionsState,\n loading,\n}) {\n return (\n
\n \n {label}\n \n {loading ? (\n \n ) : (\n
\n \n {defaultName && }\n {options}\n \n
\n )}\n
\n );\n}\n","var _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSelectArrow(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 16.131,\n height: 8.692,\n viewBox: \"0 0 16.131 8.692\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_9\",\n \"data-name\": \"Group 9\",\n transform: \"translate(-1206.29 -738.977)\"\n }, /*#__PURE__*/React.createElement(\"line\", {\n id: \"Line_7\",\n \"data-name\": \"Line 7\",\n x2: 7.584,\n y2: 7.586,\n transform: \"translate(1206.791 739.479)\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeMiterlimit: 10,\n strokeWidth: 1.417\n }), /*#__PURE__*/React.createElement(\"line\", {\n id: \"Line_8\",\n \"data-name\": \"Line 8\",\n x1: 7.647,\n y2: 7.648,\n transform: \"translate(1214.273 739.519)\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeMiterlimit: 10,\n strokeWidth: 1.417\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSelectArrow);\nexport default __webpack_public_path__ + \"static/media/select-arrow.ac7a42a7.svg\";\nexport { ForwardRef as ReactComponent };","import { useCallback } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport en from \"./en.json\";\n\nexport function useLocale() {\n const intl = useIntl();\n return intl.locale;\n}\n\nexport function useFormatMessage() {\n const intl = useIntl();\n\n const formatMessageFn = useCallback(\n (id, values, fallback) =>\n intl.formatMessage(\n { id, defaultMessage: fallback || en[id] || id },\n values\n ),\n [intl]\n );\n\n formatMessageFn.locale = intl.locale;\n formatMessageFn.intl = intl;\n\n return formatMessageFn;\n}\n","import en from \"./en.json\";\nimport de from \"./de.json\";\nimport es from \"./es.json\";\nimport fr from \"./fr.json\";\nimport deCountries from \"./countries/countries-de.json\";\nimport esCountries from \"./countries/countries-es.json\";\nimport enCountries from \"./countries/countries-en.json\";\nimport frCountries from \"./countries/countries-fr.json\";\n\nexport * from \"./hooks\";\n\nexport const locales = {\n en: { ...en, ...enCountries },\n de: { ...de, ...deCountries },\n es: { ...es, ...esCountries },\n fr: { ...fr, ...frCountries },\n};\n\nexport function getLocaleMessages(locale) {\n const messages = locales[locale];\n if (!messages) {\n console.warn(`Unknown locale ${locale}, falling back to en`, locale);\n return locales.en;\n }\n return messages;\n}\n","export default \"data:image/png;base64,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\"","import cn from \"classnames\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport styles from \"./LanguageDropdown.module.scss\";\nimport { ReactComponent as DropdownIcon } from \"../assets/icons/select-arrow.svg\";\nimport { changeLanguage, getLocale } from \"../redux/settings-slice\";\nimport { languages } from \"../constants/select\";\nimport { Dropdown } from \".\";\nimport { useFormatMessage } from \"../i18n\";\n\nimport es from \"../assets/icons/flags/es.48.png\";\nimport en from \"../assets/icons/flags/gb.48.png\";\nimport fr from \"../assets/icons/flags/fr.48.png\";\nimport de from \"../assets/icons/flags/de.48.png\";\n\nconst langIcons = { es, en, fr, de };\n\nexport function LanguageDropdown() {\n const dispatch = useDispatch();\n const tr = useFormatMessage();\n const locale = useSelector(getLocale);\n const remainingLanguages = languages.filter(\n (language) => language.value !== locale\n );\n\n function handleLanguageClick(language, handleClick) {\n dispatch(changeLanguage(language));\n handleClick();\n }\n\n return (\n (\n
\n \n \n
\n )}\n renderBody={(handleClick) => (\n
    \n {remainingLanguages.map(({ value, name }, idx) => (\n handleLanguageClick(value, handleClick)}\n >\n \n

    {tr(name)}

    \n \n ))}\n
\n )}\n className={styles.popoverWrapper}\n />\n );\n}\n\nfunction FlagIcon({ lang, className }) {\n return (\n {`${lang}-icon`}\n );\n}\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAFTUlEQVRo3u2ZvY4dRRCFv6qei9aSBSkpSMhvwCtAQkjMC/ASBAjJEQEhbwEPQAwpgQUxggDxJ9Ze7+2qQ9A9PXPn7tp4fywZtqTZ+6e9W2dO1alTvXAXd3EXd3EX/+cwzCbee7i/6hc8+vyDayXw10cfXvl33/32+90EnID44uP3Oa9JqONyZ1ec13YTZjAVx80wM8zAzQB48OCtawE4/+QzkNoLJYoAidzvIQIhMkVKCEgzbLfjx4efApxMwITEH6dPeVqTlIE5ZgZmmJ03qswAu/ESyJ9/OnpPgDooSe25Gog0h92ObJ9P04z81z+fcFZFzADcR9JmS8XddOj3345BrT/vAFKNiXAndzuif94BiLN95fG5CBwzYZYwABgrFDcL4OnZBY25sKBBSUIK3JFEdIammbQaIgUhYS4MA/W8JTDdjoxkXoKs890TNSUmoQRFoC0DqQYwUhjCesLjxt8OAc8AsOqB/lqZmDcwuWUgsrEQ8p5ru+t2ywgUcUn+GkA0iiCRQDmr5WAgW4OsGJgL0W7rzs9xCYA1E7ZqZjOGvB4ACCURELJW/9alU7pdAJeVEIwkZwqUiVxkJrlloIaoCTWFaZ4BvlHnl8eA1n9PQtlmgSRU60aFJGokNaDKMGUfZrHU/m3JaNSLBOiAeCmh175KQR5UadsDSSbUbIPLfJ6+/ZsO2HiZKtTqP+klBKjkdpC1EtqHGgDvLMxDDMDypZSQ1mUzg5ibOJsKZcTxIMtMlBAJjjoL1r9k08w3WU6ZzxEhLVcEiaGjJs7g7OwxT87hPMC9YO5o1D+bhl7mwunp6bXyP33y5EIGUlpMKlAzqClqKexT2x4IIkQNSFmzHJoz7/OAC9yowdT94FWjrJhd65xJTYvUzJ1nsxKWBnFBE0cmkRDyYV2H/+nN3OyFHZSS+/Wa2zO2fYsAn8sHtRvYAbR23PZAxkpGhazl7qbhSGcVOgRxA7Mh8lj3R+2395t9CBDNMZQ4thIRQQ1jn3QVgmha2gFopUqLx2jj/RpNvZkDMwylBiilSCWRAi+QSW6txL4GEVDTMQXW0dsyFKDvCqM3YCR/ZRBHk7g372ziZkmNXFzz0STO6IPMiEhs+CHve0E3d5YgW3aEm3Co3WEe3P2xA/Q9OBP6DMCajNZjL9R6IHJOupeNbVmw1aamg5q9CguqcSDM6uKdqWU3ntfKPomPS2jsA1AjsNJLxJZHm1/jB65infRVANhahfqPkTTzotWncibC2kA72gfUQaThtM2n3fU8fCSHWwW7VhPPSc0SqpUWjSbWYiNaKeci86zcaGQ/f0n1xA7UE7wlP2z2M5r4hQCt9ts1kP5kJKrMdpmjPNqJ+0aW7VwoO3qzXHUWCyLLcVIxM7Bm4kVY0WDg2P/PQDqW5oEiWg8clFBvmkiI6DT1jWyIjdgkfziBzexfs7BO1lYMjJJZlVDOZ0IzGxZtJz5q4t7lkYvQaDTxWnxs9ALPuPOXsaDtipo5BLT5np5sl89hpWdWzBdJXZfQ5Mb9k8Lr7kxlYpoKXgqRUJNmY3GyT/9QQ7Xf7/F+ire+tizkxjbPAOPePeROmiM3ZE4IspR2CaLuiVrJWtu88nI8ie/tjF0KN9jtwF1MRZSp4OaU4rg7pRTMC2BMU2G/32MrU+fjSPLy0lk/xtvvkFGHVEY0RcxaiUxqrYQ7UQrVC5GBvGzcaAaPvvuG5VRycxZkrOqIg2H25Rs/XHrXnyuhwOOvvh7lkCxHibONGGZu3W8sp+OG2X3gTeA+r1b8DfzS/sEBJ2tFekWiAmevWM53cRd38Z+LfwCSC3QgR5wrTwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAEe0lEQVRo3u2ZQZLcRBBFX2apx0OEgzWHYM+e4xA+Axuu4JOwZMeOI3AEFl544bDbo8z8LKqklnoaAhuPxwNdMRVSdZek/zP/zypNw7Vd27Vd27X9n5thNiHNTxO9HSbgFuDly5fc3d2RmeM743A4cHNzg5kxTRPujplhZrj75j778d+1qkLSxXFVERFU1Q7Ldk5rjZubG168eAFwOwETwOvXr3n//j1VtYK6dPxcbQF8fnR3nj17tkybpuXs1atXHI/HXQYeC/wlEtsM3N7ernNWAsfjkbdv35KZO/BfAoEtidbabs5KYNHeOYHHAv9XWTAzIuI+gap6MgQWn+4IZCYRsRJ4bPn8lYwWrBczkJlfPAEzu0xgAb8l8Njgz0ks0rlIICLW/iUS2JbSeZ73BH4Fvo3gMHozwweBhcLnpKLRdwUGCInZjLtMfgC+XwgkoCqoQhHIDEbXIxC4Jx+pk5LAHVWR2wwEoAhqnlFEB34mI30mErpUQjcyqoE1tgTU89SZZiJ3NNYCSSvwx8iGNtFXJmoNDUmtBGbgzfHI4d07prs7JneaGTYiYICfGdoeOAM1gAPIjKhilgiJu9b2GQhAmVgEXtW7ezfymOgbQz8UiZ1xN9EvwDM7hgg4l1AClokyYdRYVWED5NrPSDwUAQE+CCxSsUXKZljm3sQzkBFMEVQEJeFmlHuXzwCr5QabB9kDRH+n/T7oVXJUxbyUgco8VaJRhbS8ES0yGgS2wD91ddIFAjrLBucmDqDmmczEIygzalQgH4vaSTe2Suqh/LBGfTNe/WDWse4I/Aj6rlAr1BJNRjWjtQ4YBxlodbX1v09kiGW/djoKasi2QCkUBWkQDaKI34CfFgklVAVlQVlSZbgN0AbChqvO1wMD0/rwj9k6bTabGEZJ7LVzmlQpVA5KlleCqddcQIkUqIIqo2wr/AEWcAP3y3sk07+Xji0ZQEhQaT0LtXzW0D0CBVKhlYRTQ+uyHoC1A5LtnmgfuePbRn97/9XE2+epxgUJFLkl0AfZN3NW42bjBjU2dLYtEcs+aWBe5KPV5x9MxLakFtnohLv3QpW96ywDqBA5rhj7orIV+JIy837uvtmp2t4DH+KHrYG3ndp4oYZKCqQEsst+IdBZF2Y5ZDQAm5GmU3RHRMzt3sqzZuMf+EGbE9tF/TSWRN/hG1U6KUg9yMtL2YkASanwSnrgDXm/sGyRiZ2yW6Ossk+/be1hf6/7XaEf31X14JfowNU9sBCSCjiTUBaIieQ55l+DT9Am1BwskQXuBQi3wpW4JT4y5y5MpyyY8p4XinZGxDHzIfVGqSFzyp0sSDtQ00SmEZqJCtKDKJE17SWUBamvSB1InMYBl9M00VobO9PGjDNZo7lhDu5TL6mjtPYy24Fdls7w1u5FhVG6++dZRUmUgsgiM8i4ITLI8W8fMRFbCc0BP//y+8modv+4RtfAfT82u3/Nh5p3WY/OzayzOcsz3Nb1yZ4D3wDPeVrtDfBH/4Gj/0YwPTECARyfGOZru7Zr+8+1PwEyPM0XJcDSfQAAAABJRU5ErkJggg==\"","import { useFormatMessage } from \"../i18n\";\nimport { Link } from \"../components\";\nimport styles from \"./Footer.module.scss\";\nimport cn from \"classnames\";\nimport sharedStyles from \"../shared.module.scss\";\nimport { oemValues } from \"../constants/oem\";\n\nexport function Footer({ className }) {\n const tr = useFormatMessage();\n\n return (\n
\n
\n \n © {oemValues.footerLink}\n \n \n \n {tr(\"terms_and_conditions\")}\n \n
\n
\n );\n}\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSettingsIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 20,\n height: 20,\n viewBox: \"0 0 20 20\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"iconmonstr-gear-2\",\n d: \"M20,11.823V8.177c-1.79-.638-2.272-.668-2.523-1.274s.069-.974.882-2.686L15.782,1.64c-1.688.8-2.073,1.137-2.687.883S12.456,1.782,11.823,0H8.177C7.541,1.787,7.511,2.271,6.9,2.522c-.627.261-1-.083-2.686-.883L1.64,4.217C2.454,5.93,2.775,6.295,2.522,6.9S1.788,7.541,0,8.177v3.646c1.782.633,2.271.667,2.523,1.273s-.068.972-.883,2.686L4.217,18.36c1.666-.792,2.058-1.144,2.686-.882.607.252.637.733,1.274,2.523h3.645c.632-1.776.666-2.269,1.281-2.526s.988.083,2.679.885l2.577-2.578c-.812-1.708-1.135-2.077-.882-2.686S18.211,12.46,20,11.823Zm-4.062.637a3.3,3.3,0,0,0,.407,2.982l-.9.9a3.288,3.288,0,0,0-2.977-.408,3.309,3.309,0,0,0-1.823,2.4H9.362a3.3,3.3,0,0,0-1.819-2.4,3.307,3.307,0,0,0-2.983.407l-.9-.9a3.3,3.3,0,0,0,.406-2.983,3.307,3.307,0,0,0-2.4-1.818V9.362a3.3,3.3,0,0,0,2.4-1.82,3.3,3.3,0,0,0-.407-2.983l.9-.9a3.3,3.3,0,0,0,2.983.407,3.3,3.3,0,0,0,1.819-2.4H10.64a3.3,3.3,0,0,0,1.82,2.4,3.308,3.308,0,0,0,2.983-.407l.9.9a3.307,3.307,0,0,0-.407,2.983,3.3,3.3,0,0,0,2.4,1.819V10.64a3.3,3.3,0,0,0-2.4,1.819ZM10,7.5A2.5,2.5,0,1,1,7.5,10,2.5,2.5,0,0,1,10,7.5Zm0-1.667A4.167,4.167,0,1,0,14.167,10,4.166,4.166,0,0,0,10,5.833Z\",\n fill: \"currentColor\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSettingsIcon);\nexport default __webpack_public_path__ + \"static/media/settings-icon.a3850563.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Route, Redirect } from \"react-router-dom\";\nimport { isUserLoggedIn } from \"../redux/auth-slice\";\n\nexport const PrivateRoute = ({ component: Component, ...rest }) => {\n const isLoggedIn = useSelector(isUserLoggedIn);\n\n return (\n \n isLoggedIn ? (\n \n ) : (\n \n )\n }\n />\n );\n};\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgHelpIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 20,\n height: 20,\n viewBox: \"0 0 20 20\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"iconmonstr-lifebuoy-3\",\n d: \"M10,0A10,10,0,1,0,20,10,10,10,0,0,0,10,0Zm7.479,6.347L15.307,7.585A5.845,5.845,0,0,0,12.427,4.7l1.237-2.173a8.379,8.379,0,0,1,3.815,3.821ZM10,14.167A4.167,4.167,0,1,1,14.167,10,4.171,4.171,0,0,1,10,14.167ZM6.336,2.527,7.573,4.7A5.853,5.853,0,0,0,4.694,7.586L2.521,6.347A8.375,8.375,0,0,1,6.336,2.527ZM2.521,13.652l2.173-1.237A5.841,5.841,0,0,0,7.573,15.3L6.336,17.473A8.375,8.375,0,0,1,2.521,13.652Zm11.142,3.821L12.427,15.3a5.851,5.851,0,0,0,2.879-2.885l2.173,1.238A8.372,8.372,0,0,1,13.663,17.473Z\",\n fill: \"currentColor\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgHelpIcon);\nexport default __webpack_public_path__ + \"static/media/help-icon.18f721be.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgLogoutIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 21.6,\n height: 18,\n viewBox: \"0 0 21.6 18\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"iconmonstr-log-out-7\",\n d: \"M14.4,8.3V4.7L21.6,11l-7.2,6.3V13.7H7.2V8.3ZM0,2V20H12.6V18.2H1.8V3.8H12.6V2Z\",\n transform: \"translate(0 -2)\",\n fill: \"currentColor\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLogoutIcon);\nexport default __webpack_public_path__ + \"static/media/logout-icon.e3aaeb7b.svg\";\nexport { ForwardRef as ReactComponent };","var _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgHomeIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 20,\n height: 20,\n viewBox: \"0 0 20 20\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Grupo_144\",\n \"data-name\": \"Grupo 144\",\n transform: \"translate(1 253.687)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"Trazado_237\",\n \"data-name\": \"Trazado 237\",\n d: \"M9-267.687a.908.908,0,0,1,.285.046.909.909,0,0,1,.3.167l9.078,7.338a.909.909,0,0,1,.269,1.054l-.56,1.359a.909.909,0,0,1-.616.534.909.909,0,0,1-.8-.174l-.168-.136v8.9a.909.909,0,0,1-.909.909h-5.4a.909.909,0,0,1-.909-.909v-6.659H8.294v6.659a.909.909,0,0,1-.909.909h-5.4a.909.909,0,0,1-.909-.909v-8.8l-.039.031a.909.909,0,0,1-.8.174.909.909,0,0,1-.616-.534l-.56-1.359a.909.909,0,0,1,.269-1.053l9.082-7.342a.908.908,0,0,1,.253-.148A.909.909,0,0,1,9-267.687Zm6.605,7.418L9-265.609l-6.735,5.444a.9.9,0,0,1,.116.046.909.909,0,0,1,.517.82v9.793H6.476v-6.659a.909.909,0,0,1,.909-.909h3.1a.909.909,0,0,1,.909.909v6.659h3.578v-9.9a.909.909,0,0,1,.517-.82A.919.919,0,0,1,15.605-260.269Z\",\n transform: \"translate(0 14)\",\n fill: \"currentColor\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgHomeIcon);\nexport default __webpack_public_path__ + \"static/media/home-icon.26bdba08.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useMemo } from \"react\";\nimport cn from \"classnames\";\nimport { useHistory } from \"react-router-dom\";\nimport styles from \"./UserDropdown.module.scss\";\nimport sharedStyles from \"../shared.module.scss\";\nimport { ReactComponent as SettingsIcon } from \"../assets/icons/settings-icon.svg\";\nimport { ReactComponent as HelpIcon } from \"../assets/icons/help-icon.svg\";\nimport { ReactComponent as LogoutIcon } from \"../assets/icons/logout-icon.svg\";\nimport { ReactComponent as DropdownIcon } from \"../assets/icons/select-arrow.svg\";\nimport { ReactComponent as HomeIcon } from \"../assets/icons/home-icon.svg\";\nimport { Dropdown } from \".\";\nimport { useFormatMessage } from \"../i18n\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { getUser, logout } from \"../redux/auth-slice\";\nimport { generateGravatarUrl } from \"../utils\";\nimport { AVATAR_SIZE } from \"../constants/constants.js\";\n\nexport function UserDropdown() {\n const history = useHistory();\n const tr = useFormatMessage();\n const dispatch = useDispatch();\n const { userName, email } = useSelector(getUser);\n\n const gravatarUrl = useMemo(() => generateGravatarUrl(email), [email]);\n\n return (\n {\n return (\n
\n
\n
\n {userName}\n
\n \n
\n \n
\n );\n }}\n renderBody={(handleClick) => (\n
    \n {\n history.push(\"/\");\n handleClick();\n }}\n >\n \n \n {\n history.push(\"/settings\");\n handleClick();\n }}\n >\n \n \n {\n history.push(\"/help\");\n handleClick();\n }}\n >\n \n \n
    \n {\n dispatch(logout()).then(() => {\n history.push(\"/login\");\n });\n handleClick();\n }}\n >\n \n \n
\n )}\n />\n );\n}\n\nfunction MenuItem({ onClick, name, children, className }) {\n return (\n
  • \n

    {name}

    \n {children}\n
  • \n );\n}\n","export const REFRESH_INTERVAL = 5000;\nexport const AVATAR_SIZE = 35;\n","import { useFormatMessage } from \"../i18n\";\nimport { countries } from \"../constants/select\";\n\nexport function useCountriesOptions() {\n const tr = useFormatMessage();\n\n const countriesOptions = countries.map((country, idx) => (\n \n ));\n return countriesOptions;\n}\n","import { useFormatMessage } from \"../i18n\";\nimport { languages } from \"../constants/select\";\n\nexport function useLanguagesOptions() {\n const tr = useFormatMessage();\n\n const languagesOptions = languages.map((language, idx) => (\n \n ));\n\n return languagesOptions;\n}\n","import { useCallback, useEffect } from \"react\";\n\nexport const useOutsideClick = (isOpen, ref, onClose) => {\n const handleOutsideClick = useCallback(\n (e) => {\n if (!isOpen) return;\n const path = e.path || (e.composedPath && e.composedPath());\n if (!path.includes(ref.current)) {\n onClose();\n }\n },\n [isOpen, onClose, ref]\n );\n\n useEffect(() => {\n document.body.addEventListener(\"click\", handleOutsideClick);\n\n return () => {\n document.body.removeEventListener(\"click\", handleOutsideClick);\n };\n }, [handleOutsideClick, isOpen]);\n};\n","import { useEffect } from \"react\";\n\nexport function useScrollToTop(deps) {\n return useEffect(() => {\n window.scrollTo(0, 0);\n // eslint-disable-next-line\n }, deps || []);\n}\n","import React, { useRef, useState } from \"react\";\nimport styles from \"./Dropdown.module.scss\";\nimport sharedStyles from \"../shared.module.scss\";\nimport cn from \"classnames\";\nimport { useOutsideClick } from \"../hooks\";\n\nexport function Dropdown({ renderHeader, renderBody, className }) {\n const [isOpened, setIsOpened] = useState(false);\n const popoverRef = useRef();\n useOutsideClick(isOpened, popoverRef, () => setIsOpened(false));\n\n const handleClick = React.useCallback(() => {\n setIsOpened((isOpened) => !isOpened);\n }, []);\n\n return (\n
    \n {renderHeader(handleClick, isOpened)}\n {isOpened && (\n \n {renderBody(handleClick)}\n
    \n )}\n \n );\n}\n","import cn from \"classnames\";\nimport styles from \"./Alert.module.scss\";\nimport sharedStyles from \"../shared.module.scss\";\n\nexport function Alert({ className, children, severity }) {\n const severities = {\n error: styles.error,\n success: styles.success,\n };\n return (\n \n {children}\n \n );\n}\n","import { createAction, createAsyncThunk, createSlice } from \"@reduxjs/toolkit\";\nimport * as api from \"../api/idderocloud-api\";\n\nexport const getUserDevices = createAsyncThunk(\n \"devices/getDevices\",\n async (_, { rejectWithValue }) => {\n try {\n const devices = await api.getDevices();\n return devices;\n } catch (err) {\n return rejectWithValue(err);\n }\n },\n {\n condition: (_, { getState }) => {\n // do not emit more requests if previous is still in progress\n // https://redux-toolkit.js.org/api/createAsyncThunk#canceling-before-execution\n const state = getState();\n if (state.devices.loading) return false;\n },\n }\n);\n\nexport const getDevice = createAsyncThunk(\n \"devices/getDevice\",\n async (id, { rejectWithValue }) => {\n try {\n const device = await api.getDevice(id);\n return device;\n } catch (err) {\n console.error(\"Failed to load device\", err);\n return rejectWithValue(err)\n }\n }\n);\n\nexport const updateUserDevice = createAsyncThunk(\n \"devices/updateDevice\",\n async ({ id, name, comment, updatekey }, { rejectWithValue }) => {\n try {\n const updatedDevice = await api.updateDevice({\n id,\n name,\n comment,\n updatekey,\n });\n return updatedDevice;\n } catch (err) {\n console.error(\"Failed to update device\", err);\n return rejectWithValue(err)\n }\n }\n);\n\nexport const changeDevicesView = createAction(\n \"devices/changeDevicesView\",\n function prepare(view) {\n localStorage.setItem(\"devices_view\", view);\n return { payload: view };\n }\n);\n\nfunction getDeviceInitialState() {\n return {\n userDeviceReqId: null,\n userDevice: null,\n userDeviceLoading: false,\n userDeviceError: false,\n updateDeviceReqId: null,\n updateDeviceInProgress: false,\n updateDeviceError: null,\n updateDeviceFailed: false,\n updateDeviceSuccess: false,\n };\n}\n\nfunction getInitialState() {\n return {\n devices: null,\n devicesView: localStorage.getItem(\"devices_view\") || \"grid\",\n loading: false,\n error: false,\n devicesLoaded: false,\n ...getDeviceInitialState(),\n };\n}\n\nconst initialState = getInitialState();\n\n// reducers\nexport const devicesSlice = createSlice({\n name: \"devices\",\n initialState,\n reducers: {\n initDeviceDetails: (state) => {\n Object.assign(state, getDeviceInitialState());\n },\n },\n extraReducers: (builder) => {\n builder.addCase(changeDevicesView, (state, action) => {\n state.devicesView = action.payload;\n });\n builder.addCase(getUserDevices.pending, (state) => {\n state.loading = true;\n });\n builder.addCase(getUserDevices.fulfilled, (state, action) => {\n state.devices = action.payload;\n state.devicesLoaded = true;\n state.loading = false;\n state.error = false;\n });\n builder.addCase(getUserDevices.rejected, (state) => {\n state.error = true;\n state.loading = false;\n });\n builder.addCase(getDevice.pending, (state, action) => {\n state.userDeviceReqId = action.meta.requestId;\n state.userDevice = null;\n state.userDeviceLoading = true;\n state.userDeviceError = false;\n state.updateDeviceSuccess = false;\n });\n builder.addCase(getDevice.fulfilled, (state, action) => {\n if (state.userDeviceReqId !== action.meta.requestId) return;\n state.userDeviceLoading = false;\n state.userDevice = action.payload;\n });\n builder.addCase(getDevice.rejected, (state, action) => {\n if (state.userDeviceReqId !== action.meta.requestId) return;\n state.userDeviceError = true;\n state.userDeviceLoading = false;\n });\n builder.addCase(updateUserDevice.pending, (state, action) => {\n state.updateDeviceReqId = action.meta.requestId;\n state.updateDeviceInProgress = true;\n state.updateDeviceError = null;\n state.updateDeviceFailed = false;\n state.updateDeviceSuccess = false;\n });\n builder.addCase(updateUserDevice.fulfilled, (state, action) => {\n if (state.updateDeviceReqId !== action.meta.requestId) return;\n state.updateDeviceInProgress = false;\n state.updateDeviceSuccess = true;\n state.userDevice = action.payload;\n });\n builder.addCase(updateUserDevice.rejected, (state, action) => {\n if (state.updateDeviceReqId !== action.meta.requestId) return;\n if (action.payload.type) {\n state.updateDeviceError = { type: action.payload.type };\n }\n state.updateDeviceInProgress = false;\n state.updateDeviceFailed = true;\n state.updateDeviceSuccess = false;\n });\n builder.addCase(\"auth/logout/fulfilled\", () => {\n return { ...getInitialState() };\n });\n },\n});\n\n// actions\nexport const { initDeviceDetails } = devicesSlice.actions;\n\n// selectors\nexport const getDevices = (state) => state.devices.devices;\nexport const devicesLoaded = (state) => state.devices.devicesLoaded;\nexport const getDevicesFailed = (state) => state.devices.error;\nexport const getDevicesView = (state) => state.devices.devicesView;\nexport const getUserDeviceState = ({ devices }) => ({\n userDevice: devices.userDevice,\n userDeviceLoading: devices.userDeviceLoading,\n userDeviceError: devices.userDeviceError,\n updateDeviceError: devices.updateDeviceError,\n updateDeviceInProgress: devices.updateDeviceInProgress,\n updateDeviceFailed: devices.updateDeviceFailed,\n updateDeviceSuccess: devices.updateDeviceSuccess,\n});\n\nexport const devicesReducer = devicesSlice.reducer;\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgGridViewIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 20,\n height: 19.999,\n viewBox: \"0 0 20 19.999\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"view-5\",\n d: \"M1801.914,193.9h-5v-5h5Zm7.5-5h-5v5h5Zm7.5,0h-5v5h5Zm-15,7.5h-5v5h5Zm7.5,0h-5v5h5Zm7.5,0h-5v5h5Zm-15,7.5h-5v5h5Zm7.5,0h-5v5h5Zm7.5,0h-5v5h5Z\",\n transform: \"translate(-1796.914 -188.9)\",\n fill: \"currentColor\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgGridViewIcon);\nexport default __webpack_public_path__ + \"static/media/grid-view-icon.ce55fd19.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgListViewIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 20,\n height: 18.332,\n viewBox: \"0 0 20 18.332\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"view-1\",\n d: \"M3221.816,1005.4h-20v-1.666h20Zm0,2.5h-20v1.666h20Zm0,4.166h-20v1.668h20Zm0,4.168h-20v1.666h20Zm0,4.167h-20v1.665h20Z\",\n transform: \"translate(-3201.816 -1003.733)\",\n fill: \"currentColor\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgListViewIcon);\nexport default __webpack_public_path__ + \"static/media/list-view-icon.80e95a66.svg\";\nexport { ForwardRef as ReactComponent };","import { useFormatMessage } from \"../i18n\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport cn from \"classnames\";\nimport { changeDevicesView, getDevicesView } from \"../redux/devices-slice\";\nimport styles from \"./ViewSwitch.module.scss\";\nimport { ReactComponent as GridViewIcon } from \"../assets/icons/grid-view-icon.svg\";\nimport { ReactComponent as ListViewIcon } from \"../assets/icons/list-view-icon.svg\";\nimport sharedStyles from \"../shared.module.scss\";\n\nexport function ViewSwitch() {\n const tr = useFormatMessage();\n const dispatch = useDispatch();\n const devicesView = useSelector(getDevicesView);\n\n return (\n
    \n

    \n {tr(\"my_devices\")}\n

    \n
    \n dispatch(changeDevicesView(\"grid\"))}\n />\n dispatch(changeDevicesView(\"list\"))}\n />\n
    \n
    \n );\n}\n","import Skeleton from \"react-loading-skeleton\";\nimport styles from \"./TextField.module.scss\";\nimport sharedStyles from \"../shared.module.scss\";\nimport cn from \"classnames\";\n\nexport function TextField({ title, value, loading }) {\n return (\n
    \n
    \n {title}\n
    \n
    \n {loading ? (\n \n ) : (\n
    {value}
    \n )}\n
    \n
    \n );\n}\n","import styles from \"./Loader.module.scss\";\nimport cn from \"classnames\";\n\nexport function Loader({ className }) {\n return (\n
    \n \n \n \n
    \n );\n}\n","import { useEffect, useRef } from \"react\";\nimport disableScroll from \"disable-scroll\";\nimport { Button } from \".\";\nimport { useOutsideClick } from \"../hooks\";\nimport styles from \"./Dialog.module.scss\";\nimport cn from \"classnames\";\nimport sharedStyles from \"../shared.module.scss\";\n\nexport function Dialog({ isOpen, onClose, content, buttons }) {\n const dialogRef = useRef();\n useOutsideClick(isOpen, dialogRef, onClose);\n\n const renderContent = content.split(\"\\n\").map((text, idx) => (\n
    \n {text}\n
    \n ));\n\n useEffect(() => {\n if (isOpen) {\n disableScroll.on();\n } else {\n disableScroll.off();\n }\n return () => {\n disableScroll.off();\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n return (\n
    \n
    \n
    \n {renderContent}\n
    \n
    \n {buttons &&\n buttons.map((button, idx) => (\n \n ))}\n
    \n
    \n
    \n );\n}\n","var _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgOops(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 396.64 458.785\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group_178\",\n \"data-name\": \"Group 178\",\n transform: \"translate(-8389.983 -2554.25)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"iconmonstr-cloud-1\",\n d: \"M185.556,3A115.844,115.844,0,0,0,69.908,112.664a85.011,85.011,0,0,0,15.138,168.67H286.066A85.011,85.011,0,0,0,301.2,112.664,115.844,115.844,0,0,0,185.556,3Z\",\n transform: \"translate(8403.693 2551.25)\",\n fill: \"#929fbb\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_276\",\n \"data-name\": \"Path 276\",\n d: \"M58.387,0c32.246,0,58.387,13.209,58.387,29.5s-26.141-7.727-58.387-7.727S0,45.8,0,29.5,26.141,0,58.387,0Z\",\n transform: \"translate(8532.402 2735.593)\",\n fill: \"#fff\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_277\",\n \"data-name\": \"Path 277\",\n d: \"M18.286-25.878l7.343-12.689h9.624l-11.8,19L35.645,0H26.092l-7.7-13.188L10.729,0H1.1L13.3-19.569l-11.763-19h9.553Z\",\n transform: \"translate(8525.026 2692.646)\",\n fill: \"#fff\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_278\",\n \"data-name\": \"Path 278\",\n d: \"M18.286-25.878l7.343-12.689h9.624l-11.8,19L35.645,0H26.092l-7.7-13.188L10.729,0H1.1L13.3-19.569l-11.763-19h9.553Z\",\n transform: \"translate(8619.406 2692.646)\",\n fill: \"#fff\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_279\",\n \"data-name\": \"Path 279\",\n d: \"M102.955-53.509q0,16.329-6.056,28.9A44.759,44.759,0,0,1,79.688-5.251,47.922,47.922,0,0,1,54.275,1.533a48.6,48.6,0,0,1-25.3-6.554,44.684,44.684,0,0,1-17.21-18.743Q5.6-35.954,5.29-51.746v-6.286q0-16.405,6.018-28.939a44.649,44.649,0,0,1,17.249-19.357,48.256,48.256,0,0,1,25.566-6.823,47.786,47.786,0,0,1,25.3,6.746A45.454,45.454,0,0,1,96.707-87.2q6.171,12.457,6.248,28.556ZM75.587-58.185q0-16.635-5.558-25.26a17.827,17.827,0,0,0-15.907-8.624q-20.238,0-21.388,30.357l-.077,8.2q0,16.405,5.443,25.221t16.175,8.816a17.586,17.586,0,0,0,15.715-8.663q5.52-8.663,5.6-24.915Zm36.8,15.945a48.956,48.956,0,0,1,4.83-22.116,34.538,34.538,0,0,1,13.875-14.91q9.046-5.213,21.235-5.213,18.628,0,29.361,11.537T192.417-41.55v.92q0,19.4-10.771,30.779T152.477,1.533q-17.708,0-28.441-10.617T112.46-37.87Zm25.834,1.61q0,11.5,3.6,16.865T152.477-18.4q13.8,0,14.105-21.235V-42.24q0-22.308-14.259-22.308-12.956,0-14.029,19.242Zm142.588-.23q0,19.318-8.7,30.856t-23.5,11.537a23.913,23.913,0,0,1-18.782-8.356V31.891H203.993V-82.946h24.148l.767,7.666a23.914,23.914,0,0,1,19.548-9.2q15.332,0,23.841,11.307t8.509,31.086Zm-25.834-1.61q0-22.078-12.879-22.078-9.2,0-12.266,6.593V-25.3q3.373,6.9,12.419,6.9,12.342,0,12.726-21.312ZM335.618-23.3q0-3.3-3.45-5.29t-13.109-4.14a59.776,59.776,0,0,1-15.945-5.635,26.709,26.709,0,0,1-9.583-8.471,20.228,20.228,0,0,1-3.3-11.422q0-11.422,9.429-18.82t24.685-7.4q16.405,0,26.371,7.436T360.686-57.5H334.775q0-9.966-10.5-9.966A10.411,10.411,0,0,0,317.45-65.2a7,7,0,0,0-2.76,5.635,6.427,6.427,0,0,0,3.373,5.6q3.373,2.146,10.771,3.526a93.077,93.077,0,0,1,12.994,3.3q18.705,6.439,18.705,23.075,0,11.346-10.081,18.475t-26.1,7.129A45.113,45.113,0,0,1,305.337-2.3a31.791,31.791,0,0,1-13.032-10.426A23.608,23.608,0,0,1,287.629-26.6h24.148q.153,5.75,3.833,8.394a15.767,15.767,0,0,0,9.429,2.645q5.29,0,7.934-2.146A6.866,6.866,0,0,0,335.618-23.3ZM398.25-35.34H377.321l-3.3-76.277h27.521ZM373.258-11.576a11.9,11.9,0,0,1,4.1-9.314,14.849,14.849,0,0,1,10.234-3.641,14.849,14.849,0,0,1,10.234,3.641,11.9,11.9,0,0,1,4.1,9.314,11.9,11.9,0,0,1-4.1,9.314A14.849,14.849,0,0,1,387.594,1.38,14.849,14.849,0,0,1,377.36-2.261,11.9,11.9,0,0,1,373.258-11.576Z\",\n transform: \"translate(8384.693 2981.145)\",\n fill: \"#929fbb\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgOops);\nexport default __webpack_public_path__ + \"static/media/oops.3322a0be.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\nimport { Button, Footer, Header } from \".\";\nimport styles from \"./ErrorBoundary.module.scss\";\nimport { ReactComponent as OopsIcon } from \"../assets/icons/oops.svg\";\n\nexport class ErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n handleReloadClick() {\n // location.reload() will not work here,\n // we need to take user away from the buggy page.\n // If user is logged in - he'll be redirected to the home page.\n window.location = \"/login\";\n }\n\n render() {\n if (this.state.hasError) {\n return (\n
    \n
    \n
    \n
    \n \n
    \n
    Something went wrong
    \n \n
    \n
    \n
    \n );\n }\n\n return this.props.children;\n }\n}\n","import { useLocation } from \"react-router-dom\";\nimport { useScrollToTop } from \"../hooks\";\n\nexport function ScrollToTop() {\n const { pathname } = useLocation();\n\n useScrollToTop([pathname]);\n\n return null;\n}\n","export function validateForm({ form, serverErrors }, validations) {\n const result = validations\n .map((validation) => {\n const isValid = checkIsValid({ form, serverErrors }, validation);\n if (!isValid) {\n const result = JSON.parse(\n JSON.stringify({\n error: validation.errorMessage,\n field: validation.fieldName,\n fields: validation.fieldNames,\n canResubmit: validation.canResubmit,\n })\n );\n\n return result;\n }\n return null;\n })\n .filter(Boolean);\n return result;\n}\n\nfunction checkIsValid({ form, serverErrors }, validation) {\n if (validation.serverFn) {\n return validation.serverFn(serverErrors);\n }\n\n return validation.fieldName\n ? validation.fn(form[validation.fieldName])\n : validation.fn(form, validation.fieldNames);\n}\n\nexport function getErrorMsg(errors, type) {\n return errors\n .map((er) => {\n if (er.fields) {\n return er.fields[0] === type ? er.error : null;\n }\n if (er.field === type) {\n return er.error;\n }\n return null;\n })\n .filter(Boolean);\n}\n\nexport function isValid(obj) {\n return Object.values(obj).every((err) => err.canResubmit);\n}\n","import styles from \"./ValidationErrors.module.scss\";\nimport { useFormatMessage } from \"../../i18n\";\nimport sharedStyles from \"../../shared.module.scss\";\nimport cn from \"classnames\";\n\nexport function ValidationErrors({ errors }) {\n const tr = useFormatMessage();\n return errors.map((er, index) => {\n return index === 0 ? (\n

    \n {`${tr(\"error\")}: ${tr(er)}`}\n

    \n ) : null;\n });\n}\n","import styles from \"./ValidatedCheckbox.module.scss\";\nimport sharedStyles from \"./shared.module.scss\";\nimport { ValidationErrors } from \"./ValidationErrors\";\nimport cn from \"classnames\";\nimport { Checkbox } from \"../../components\";\n\nexport function ValidatedCheckbox({\n label,\n id,\n name,\n onChange,\n onBlur,\n type,\n value,\n errors,\n pristine,\n}) {\n const showErrors = !pristine && errors.length !== 0;\n return (\n
    \n \n {!pristine && (\n
    \n \n
    \n )}\n
    \n );\n}\n","import sharedStyles from \"./shared.module.scss\";\nimport { ValidationErrors } from \"./ValidationErrors\";\nimport cn from \"classnames\";\nimport { Input } from \"../../components\";\n\nexport function ValidatedInput({\n label,\n id,\n name,\n onChange,\n onBlur,\n type,\n value,\n errors,\n pristine,\n loading,\n}) {\n const showErrors = !pristine && errors.length !== 0;\n return (\n <>\n \n {!pristine && (\n
    \n \n
    \n )}\n \n );\n}\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgDeviceSettingIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 21.035,\n height: 21.036,\n viewBox: \"0 0 21.035 21.036\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"gear-1\",\n d: \"M326.335,502.724v-2.833c-1.447-.514-2.361-.66-2.822-1.769h0c-.461-1.113.088-1.871.742-3.25l-2-2c-1.369.652-2.132,1.2-3.25.743h0c-1.111-.462-1.257-1.382-1.769-2.822H314.4c-.51,1.434-.656,2.359-1.77,2.822h0c-1.115.461-1.869-.086-3.25-.743l-2,2c.653,1.375,1.205,2.133.743,3.25h0c-.463,1.112-1.389,1.259-2.821,1.769v2.833c1.43.508,2.358.657,2.821,1.77h0c.464,1.124-.1,1.9-.743,3.249l2,2c1.371-.65,2.135-1.205,3.25-.741h0c1.112.461,1.26,1.383,1.77,2.82h2.834c.51-1.432.656-2.358,1.777-2.823h0c1.106-.461,1.858.087,3.242.744l2-2c-.65-1.371-1.205-2.132-.742-3.249S324.9,503.233,326.335,502.724Zm-10.519,2.091a3.506,3.506,0,1,1,3.508-3.507A3.507,3.507,0,0,1,315.816,504.815Z\",\n transform: \"translate(-305.3 -490.789)\",\n fill: \"currentColor\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgDeviceSettingIcon);\nexport default __webpack_public_path__ + \"static/media/device-setting-icon.28767d31.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgDeviceMediaControl(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 15.779,\n height: 17.529,\n viewBox: \"0 0 15.779 17.529\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"media-control-48\",\n d: \"M349.556,510.072V492.543l15.779,8.765Z\",\n transform: \"translate(-349.556 -492.543)\",\n fill: \"currentColor\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgDeviceMediaControl);\nexport default __webpack_public_path__ + \"static/media/device-media-control.494310b7.svg\";\nexport { ForwardRef as ReactComponent };","import styles from \"./DeviceCardGridView.module.scss\";\nimport sharedStyles from \"../../shared.module.scss\";\nimport { ReactComponent as SettingsIcon } from \"../../assets/icons/device-setting-icon.svg\";\nimport { ReactComponent as PlayIcon } from \"../../assets/icons/device-media-control.svg\";\nimport { Link } from \"../../components\";\nimport { deviceImages } from \"../../constants/images\";\nimport { oemValues } from \"../../constants/oem\";\nimport { isDeviceClickable, getModelName } from \"../../utils\";\nimport cn from \"classnames\";\n\nexport function DeviceCardGridView({ device }) {\n function handleDeviceCardClick() {\n if (isDeviceClickable(device.model)) return;\n window.open(`https://${device.cloudId}.${oemValues.cloudDomain}`, \"_blank\");\n }\n\n return (\n \n
    \n
    \n {getModelName(device.model)}\n
    \n
    \n {getModelName(device.model, device.friendly_name)}\n
    \n
    \n {\n e.stopPropagation();\n }}\n className={styles.deviceIconLink}\n >\n \n \n {!isDeviceClickable(device.model) && (\n \n )}\n
    \n
    \n \n );\n}\n","import styles from \"./DeviceCardListView.module.scss\";\nimport { ReactComponent as SettingsIcon } from \"../../assets/icons/device-setting-icon.svg\";\nimport { ReactComponent as PlayIcon } from \"../../assets/icons/device-media-control.svg\";\nimport { Link } from \"../../components\";\nimport { deviceImages } from \"../../constants/images\";\nimport { oemValues } from \"../../constants/oem\";\nimport { isDeviceClickable, getModelName } from \"../../utils\";\n\nexport function DeviceCardListView({ device }) {\n function handleDeviceCardClick() {\n window.open(`https://${device.cloudId}.${oemValues.cloudDomain}`, \"_blank\");\n }\n\n return (\n
    \n
    \n
    \n \"device-list-view\"\n
    \n
    \n
    {getModelName(device.model)}
    \n
    \n {getModelName(device.model, device.friendly_name)}\n
    \n
    \n
    \n \n \n \n {!isDeviceClickable(device.model) && (\n \n )}\n
    \n
    \n
    \n );\n}\n","import { useEffect, useState } from \"react\";\nimport cn from \"classnames\";\nimport ReCAPTCHA from \"react-google-recaptcha\";\nimport { getLocale } from \"../../redux/settings-slice\";\nimport styles from \"./Recaptcha.module.scss\";\nimport { useFormatMessage } from \"../../i18n\";\nimport { useSelector } from \"react-redux\";\nimport errorStyles from \"./ValidationErrors.module.scss\";\n\nexport function Recaptcha({ rref, onChange, pristine, recaptcha }) {\n const locale = useSelector(getLocale);\n const tr = useFormatMessage();\n const isInvalid = recaptcha === \"\" || recaptcha === null;\n let error = \"\";\n const [shouldRender, setShouldRender] = useState(true);\n\n if (recaptcha === \"\") {\n error = tr(\"you_have_to_answer_the_captcha_before\");\n } else if (recaptcha === null) {\n error = tr(\"captcha_verification_failed\");\n }\n\n function handleChange(value) {\n onChange(value);\n }\n\n useEffect(() => {\n // trigger re-render to change the language\n setShouldRender(false);\n handleChange(null);\n // eslint-disable-next-line\n }, [locale]);\n\n useEffect(() => {\n if (!shouldRender) {\n setShouldRender(true);\n }\n }, [shouldRender]);\n\n return (\n <>\n
    \n {shouldRender && (\n \n )}\n
    \n {!pristine && isInvalid && (\n
    \n

    {error}

    \n
    \n )}\n \n );\n}\n","import { Select } from \"../../components\";\nimport sharedStyles from \"./shared.module.scss\";\nimport { ValidationErrors } from \"./ValidationErrors\";\nimport cn from \"classnames\";\n\nexport function ValidatedSelect({\n defaultName,\n name,\n onChange,\n onBlur,\n errors,\n pristine,\n options,\n label,\n optionsState,\n loading,\n}) {\n const showErrors = !pristine && errors.length !== 0;\n return (\n <>\n \n {!pristine && (\n
    \n \n
    \n )}\n \n );\n}\n","export function validateRequired(value) {\n return Boolean(value);\n}\n\nexport function validateEmail(value) {\n // https://emailregex.com/\n // eslint-disable-next-line no-control-regex\n return /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/i.test(\n value\n );\n}\n\nexport function validatePassLowLetter(value) {\n return /^(?=.*[a-z])/.test(value);\n}\n\nexport function validatePassUpperLeter(value) {\n return /^(?=.*[A-Z])/.test(value);\n}\n\nexport function validatePassDigit(value) {\n return /^(?=.*[0-9])/.test(value);\n}\n\nexport function validateMinLen(value) {\n const minLength = 8;\n return value.length >= minLength;\n}\n\nexport function validateDifferrent(form, fieldNames) {\n return form[fieldNames[0]] !== form[fieldNames[1]];\n}\n\nexport function validateEqual(form, fieldNames) {\n return form[fieldNames[0]] === form[fieldNames[1]];\n}\n","import {\n validateRequired,\n validateMinLen,\n validateEmail,\n validatePassLowLetter,\n validatePassUpperLeter,\n validatePassDigit,\n validateDifferrent,\n validateEqual,\n} from \"../services/validation-functions\";\nimport { SERVER_ERRORS } from \"../api/idderocloud-api\";\n\nconst passwordIsRequired = [\n {\n fn: validateRequired,\n errorMessage: \"you_have_to_populate_the_password\",\n fieldName: \"password\",\n },\n];\n\nconst currentPasswordIsRequired = [\n {\n fn: validateRequired,\n errorMessage: \"you_have_to_populate_the_password\",\n fieldName: \"currentPassword\",\n },\n];\n\nconst passwordValidations = [\n ...passwordIsRequired,\n {\n fn: validateMinLen,\n errorMessage: \"password_must_contain_at_least_eight_characters\",\n fieldName: \"password\",\n },\n {\n fn: validatePassLowLetter,\n errorMessage: \"password_must_contain_at_least_one_lowercase_letter_a-z\",\n fieldName: \"password\",\n },\n {\n fn: validatePassUpperLeter,\n errorMessage: \"password_must_contain_at_least_one_uppercase_letter_a-z\",\n fieldName: \"password\",\n },\n {\n fn: validatePassDigit,\n errorMessage: \"password_must_contain_at_least_one_number_-\",\n fieldName: \"password\",\n },\n {\n fn: validateEqual,\n errorMessage: \"please_check_that_youve_entered_and_confirmed_your_password\",\n fieldNames: [\"confirmPassword\", \"password\"],\n },\n {\n fn: validateDifferrent,\n errorMessage: \"password_must_be_different_from_username\",\n fieldNames: [\"password\", \"name\"],\n },\n];\n\nconst nameValidation = [\n {\n fn: validateRequired,\n errorMessage: \"name_is_mandatory\",\n fieldName: \"name\",\n },\n {\n fn: validateDifferrent,\n errorMessage: \"password_must_be_different_from_username\",\n fieldNames: [\"password\", \"name\"],\n },\n];\n\nconst emailIsRequired = [\n {\n fn: validateRequired,\n errorMessage: \"you_have_to_populate_your_email_before\",\n fieldName: \"email\",\n },\n];\nconst emailValidation = [\n ...emailIsRequired,\n {\n fn: validateEmail,\n errorMessage: \"please_enter_a_valid_email_ie_maildomaincom\",\n fieldName: \"email\",\n },\n];\n\nconst countryValidation = [\n {\n fn: validateRequired,\n errorMessage: \"country_is_required\",\n fieldName: \"country\",\n },\n];\n\nconst termsValidation = [\n {\n fn: validateRequired,\n errorMessage: \"you_must_accept_terms_and_conditions\",\n fieldName: \"acceptTerms\",\n },\n];\n\nconst serverValidation = [\n {\n serverFn: (errors) => !errors.includes(SERVER_ERRORS.USER_ALREADY_EXISTS),\n errorMessage:\n \"this_email_already_exists_please_select_another_one_email_must_be_unique\",\n fieldName: \"email\",\n canResubmit: true,\n },\n];\n\nconst changePassServerValidation = [\n {\n serverFn: (errors) => !errors.includes(SERVER_ERRORS.INCORRECT_PASSWORD),\n errorMessage: \"incorrect_password\",\n fieldName: \"currentPassword\",\n canResubmit: true,\n },\n];\n\nexport const signupValidation = [\n ...serverValidation,\n ...termsValidation,\n ...countryValidation,\n ...emailValidation,\n ...nameValidation,\n ...passwordValidations,\n];\n\nexport const changePasswordValidation = [\n ...passwordValidations,\n ...currentPasswordIsRequired,\n ...changePassServerValidation,\n];\n\nexport const passwordRecoveryValidation = [...emailValidation];\nexport const loginValidation = [...emailIsRequired, ...passwordIsRequired];\n\nexport const userSettingsValidation = [...countryValidation, ...nameValidation];\n","import { Formik } from \"formik\";\nimport React, { useRef, useState } from \"react\";\nimport { ValidatedSelect, ValidatedInput } from \"./index\";\nimport cn from \"classnames\";\nimport styles from \"../UserSettingsPage.module.scss\";\nimport { useFormatMessage } from \"../../i18n\";\nimport { Alert, Button, Select } from \"../../components\";\nimport sharedStyles from \"../../shared.module.scss\";\nimport { validateForm, getErrorMsg } from \"../../services/validation-service\";\nimport { userSettingsValidation } from \"../../shared/validation\";\nimport { useCountriesOptions, useLanguagesOptions } from \"../../hooks\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n isSettingsUpdateFailed,\n isSettingsUpdated,\n changeLanguage,\n getUserData,\n isSettingsUpdateLoading,\n} from \"../../redux/settings-slice\";\nimport { updateUser } from \"../../redux/settings-slice\";\nimport { updateUserName } from \"../../redux/auth-slice\";\nimport { isRememberMe, setUser } from \"../../services/auth-service\";\nimport { scrollToFirstValidationError } from \"../../utils\";\n\nexport function UserSettingsForm({ user }) {\n const tr = useFormatMessage();\n const { userSettingsLoading } = useSelector(getUserData);\n const settingUpdateFailed = useSelector(isSettingsUpdateFailed);\n const settingsUpdated = useSelector(isSettingsUpdated);\n const settingsUpdateLoading = useSelector(isSettingsUpdateLoading);\n const countriesOptions = useCountriesOptions();\n const languagesOptions = useLanguagesOptions();\n const formRef = useRef();\n\n const dispatch = useDispatch();\n\n const [pristine, setPristine] = useState(true);\n\n async function handleSubmit({ name, language, country }) {\n setPristine(false);\n if (!name || !country) {\n scrollToFirstValidationError(formRef.current);\n return;\n }\n\n const data = await dispatch(\n updateUser({\n name,\n lang: language,\n country,\n })\n );\n if (data.meta.requestStatus === \"fulfilled\") {\n dispatch(updateUserName(data.meta.arg.name));\n dispatch(changeLanguage(data.meta.arg.lang));\n setUser({ user: data.meta.arg.name }, isRememberMe());\n }\n }\n\n return (\n \n {(props) => {\n const validationErrors = validateForm(\n { form: props.values },\n userSettingsValidation\n );\n const nameErrorMsg = getErrorMsg(validationErrors, \"name\");\n const countryErrorMsg = getErrorMsg(validationErrors, \"country\");\n return (\n \n \n\n \n \n {settingUpdateFailed && (\n {tr(\"something_went_wrong\")}\n )}\n {settingsUpdated && (\n {tr(\"user_updated\")}\n )}\n
    \n \n
    \n \n );\n }}\n \n );\n}\n","import { useFormik } from \"formik\";\nimport React, { useState } from \"react\";\nimport cn from \"classnames\";\nimport styles from \"../UserSettingsPage.module.scss\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { ValidatedInput } from \"./ValidatedInput\";\nimport { useFormatMessage } from \"../../i18n\";\nimport { Alert, Button, TextField } from \"../../components\";\nimport sharedStyles from \"../../shared.module.scss\";\nimport { validateForm, getErrorMsg } from \"../../services/validation-service\";\nimport { changePasswordValidation } from \"../../shared/validation\";\nimport {\n getUserData,\n changePassword,\n getChangePasswordState,\n} from \"../../redux/settings-slice\";\nimport { scrollToFirstValidationError } from \"../../utils\";\n\nexport function ChangePasswordForm({ user }) {\n const tr = useFormatMessage();\n const dispatch = useDispatch();\n const {\n changePasswordFailed,\n changePasswordUpdated,\n changePasswordPending,\n serverErrors,\n } = useSelector(getChangePasswordState);\n const isValid = (obj) => Object.values(obj).every((err) => err.canResubmit);\n const { userSettingsLoading } = useSelector(getUserData);\n const [pristine, setPristine] = useState(true);\n\n const formik = useFormik({\n initialValues: {\n currentPassword: \"\",\n password: \"\",\n confirmPassword: \"\",\n },\n onSubmit: async (values) => {\n setPristine(false);\n const { password, currentPassword } = values;\n if (isValid(validationErrors)) {\n const result = await dispatch(\n changePassword({\n old_password: currentPassword,\n new_password: password,\n })\n );\n if (result.meta.requestStatus === \"fulfilled\") {\n setPristine(true);\n formik.resetForm();\n }\n } else {\n scrollToFirstValidationError();\n }\n },\n });\n\n const validationErrors = validateForm(\n { form: formik.values, serverErrors },\n changePasswordValidation\n );\n\n const passErrorMsg = getErrorMsg(validationErrors, \"password\");\n const confirmPassErrorMsg = getErrorMsg(validationErrors, \"confirmPassword\");\n const currentPassMsg = getErrorMsg(validationErrors, \"currentPassword\");\n\n return (\n \n \n \n \n \n {changePasswordFailed && (\n \n {tr(\"sorry_but_we_cannot_change_your_password\")}\n \n )}\n {changePasswordUpdated && (\n {tr(\"password_updated\")}\n )}\n
    \n \n
    \n \n );\n}\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgAddDeviceIcon(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 77.333,\n height: 77.332,\n viewBox: \"0 0 77.333 77.332\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"plus-1\",\n d: \"M258.164,378.7h-29v-29H209.831v29h-29v19.332h29v29h19.333v-29h29Z\",\n transform: \"translate(-180.831 -349.696)\",\n fill: \"currentColor\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgAddDeviceIcon);\nexport default __webpack_public_path__ + \"static/media/add-device-icon.4202bb70.svg\";\nexport { ForwardRef as ReactComponent };","import { useFormatMessage } from \"../../i18n\";\nimport { useHistory } from \"react-router\";\nimport styles from \"./AddNewDeviceGridView.module.scss\";\nimport sharedStyles from \"../../shared.module.scss\";\nimport cn from \"classnames\";\nimport { ReactComponent as AddNewDeviceIcon } from \"../../assets/icons/add-device-icon.svg\";\n\nexport function AddNewDeviceGridView() {\n const tr = useFormatMessage();\n const history = useHistory();\n\n function handleAddDevice() {\n history.push(\"/help\");\n }\n\n return (\n
    \n
    \n {tr(\"new_device\")}\n
    \n
    \n \n
    \n
    \n {tr(\"click_here_for_creating_a_new_device\")}\n
    \n
    \n );\n}\n","import { useFormatMessage } from \"../../i18n\";\nimport { useHistory } from \"react-router-dom\";\nimport styles from \"./AddNewDeviceListView.module.scss\";\nimport sharedStyles from \"../../shared.module.scss\";\nimport cn from \"classnames\";\nimport { ReactComponent as AddNewDeviceIcon } from \"../../assets/icons/add-device-icon.svg\";\n\nexport function AddNewDeviceListView() {\n const tr = useFormatMessage();\n const history = useHistory();\n\n function handleAddNewDevice() {\n history.push(\"/help\");\n }\n\n return (\n
    \n
    \n \n
    \n \n
    \n
    \n {tr(\"click_here_for_creating_a_new_device\")}\n
    \n
    \n
    \n \n );\n}\n","import { useEffect } from \"react\";\nimport { useFormik } from \"formik\";\nimport { useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Button, Link, Checkbox } from \"../components\";\nimport styles from \"./LoginPage.module.scss\";\nimport sharedStyles from \"../shared.module.scss\";\nimport { useFormatMessage } from \"../i18n\";\nimport { initLogin, login, getLoginState } from \"../redux/auth-slice\";\nimport { useHistory } from \"react-router\";\nimport {\n validateForm,\n getErrorMsg,\n isValid,\n} from \"../services/validation-service\";\nimport { ValidatedInput } from \"./components\";\nimport { loginValidation } from \"../shared/validation\";\nimport cn from \"classnames\";\nimport { scrollToFirstValidationError } from \"../utils\";\n\nexport function LoginPage() {\n const tr = useFormatMessage();\n const dispatch = useDispatch();\n const history = useHistory();\n const {\n loginInProgress,\n loginFailed,\n isLoggedIn,\n invalidCredentials,\n } = useSelector(getLoginState);\n const [pristine, setPristine] = useState(true);\n\n useEffect(() => {\n if (!isLoggedIn) return;\n history.replace(\"/\");\n }, [isLoggedIn, history]);\n\n useEffect(() => {\n dispatch(initLogin());\n }, [dispatch]);\n\n const formik = useFormik({\n initialValues: {\n email: \"\",\n password: \"\",\n rememberMe: false,\n },\n onSubmit: (values) => {\n setPristine(false);\n const { email, password, rememberMe } = values;\n if (isValid(validationErrors)) {\n dispatch(login({ user: { username: email, password }, rememberMe }));\n } else {\n scrollToFirstValidationError();\n }\n },\n });\n\n const validationErrors = validateForm(\n { form: formik.values },\n loginValidation\n );\n\n const emailErrorMsg = getErrorMsg(validationErrors, \"email\");\n const passErrorMsg = getErrorMsg(validationErrors, \"password\");\n\n return (\n
    \n
    \n

    \n {tr(\"iddero_cloud_please_sign_in\")}\n

    \n \n\n \n
    \n
    \n \n
    \n
    \n {tr(\"i_have_lost_my_password\")}\n {tr(\"i_am_a_new_user\")}\n
    \n
    \n \n \n {loginFailed && (\n

    \n {invalidCredentials\n ? tr(\"invalid_credentials\")\n : tr(\"something_went_wrong\")}\n

    \n )}\n
    \n );\n}\n","import { useSelector } from \"react-redux\";\nimport { getLocale } from \"../redux/settings-slice\";\nimport { useFormatMessage } from \"../i18n\";\nimport { oemFlavor } from \"../constants/oem\";\nimport { InfoPage } from \".\";\n\n/* eslint-disable */\nimport termsEn from \"!!raw-loader!../i18n/iddero/terms/terms-en.html\";\nimport termsEs from \"!!raw-loader!../i18n/iddero/terms/terms-es.html\";\nimport termsEnEe from \"!!raw-loader!../i18n/eelectron/terms/terms-en.html\";\n/* eslint-enable */\n\nfunction targetPage(lang) {\n switch (oemFlavor) {\n default:\n case \"iddero\":\n return lang === \"es\" ? termsEs : termsEn;\n case \"eelectron\":\n return termsEnEe;\n }\n}\n\nexport function TermsPage({ className }) {\n const lang = useSelector(getLocale);\n const tr = useFormatMessage();\n\n return (\n \n );\n}\n","export default \"

    1. Condiciones generales

    \\n\\n

    1.1. Las Condiciones Generales que se detallan a continuación (en adelante, las "Condiciones Generales"), regulan la relación contractual entre INGELABS, S.L. (en adelante, "INGELABS"), sociedad con CIF B-92727205, domiciliada en Av. Juan López Peñalver 21, 29590 Málaga (España), inscrita en el Registro Mercantil de Málaga, Tomo 4034, Libro 2945, Folio 99, Hoja MA83755, Inscripción 1, y el usuario (en adelante, el/los "Usuario(s)"), en virtud de la cual se presta un servicio (en adelante, el "Servicio") que permite a los Usuarios controlar telemáticamente los dispositivos fabricados por INGELABS y compatibles con el servicio idderocloud, tal y como se detalla en la cláusula 2 de las presentes Condiciones Generales.

    \\n

    1.2. La contratación y utilización del Servicio por parte del Usuario conlleva la aceptación sin reservas de la totalidad del texto de estas Condiciones Generales, cuyos términos regirán la relación contractual entre INGELABS y el Usuario. En este sentido, el Usuario declara haber leído, comprendido y aceptado las presentes Condiciones Generales.

    \\n

    1.3. Las presentes Condiciones Generales tienen por objeto, asimismo, regular el alta y utilización como Usuario de una cuenta (en adelante, la "Cuenta de Servicio") a través del Sitio Web www.idderocloud.com (en adelante, el "Sitio Web").

    \\n\\n

    2. Descripción del Servicio

    \\n\\n

    2.1. Mediante el Servicio idderocloud prestado por INGELABS, los Usuarios pueden controlar telemáticamente cualquiera de los productos fabricados por INGELABS compatibles con el Servicio (en adelante, el/los "Dispositivo(s)"). Más concretamente, INGELABS pone a disposición de los Usuarios una plataforma para que los Usuarios puedan acceder a los Dispositivos a través del Sitio Web.

    \\n

    2.2. Los Usuarios que deseen acceder al Servicio deberán haber adquirido lícitamente un Dispositivo INGELABS compatible con el Servicio. Este Dispositivo deberá haber sido instalado y configurado correctamente por un profesional debidamente cualificado, según la normativa y legislación vigentes en el país donde se haya instalado el Dispositivo.

    \\n

    2.3. INGELABS pondrá a disposición de los Usuarios el Sitio Web, y en su caso software adicional, incluyendo el Sitio Web (en adelante, y colectivamente, el "Software") en los términos establecidos en las presentes Condiciones Generales. En caso de que un Usuario no acepte las presentes Condiciones Generales o, en su caso, sus posteriores actualizaciones y/o modificaciones, deberá cesar en el uso del Software.

    \\n

    2.4. El Servicio regulado por las presentes Condiciones Generales es prestado por INGELABS al Usuario de forma gratuita, sin perjuicio del precio que éste haya abonado en concepto de compra, instalación o configuración del Dispositivo.

    \\n

    2.5. No obstante, INGELABS podrá modificar la gratuidad del Servicio en el futuro, debido a las circunstancias del mercado, al lanzamiento de nuevas prestaciones en el mismo, o a cualquier otra razón, realizando a tal efecto los cambios oportunos en las características y funciones del Servicio y en las presentes Condiciones Generales. Dichos cambios serán notificados convenientemente a los Usuarios con una antelación de al menos un (1) mes través de los medios establecidos en el presente documento.

    \\n\\n

    3. Cambios en las Condiciones Generales

    \\n\\n

    3.1. INGELABS se reserva el derecho de efectuar, en cualquier momento, las modificaciones, actualizaciones o cambios que considere oportunos en las presentes Condiciones Generales.

    \\n

    3.2. Si INGELABS realiza modificaciones, actualizaciones o cambios en las presentes Condiciones Generales, notificará al Usuario mediante la publicación de una nueva versión de las mismas en el Sitio Web, y/o mediante el envío de un correo electrónico a la dirección de correo electrónico asociada a la Cuenta de Servicio del Usuario. El Usuario deberá aceptar la nueva versión de las Condiciones Generales para poder continuar utilizando el Servicio. En caso de que el Usuario no deseara seguir utilizando el Servicio conforme a las nuevas Condiciones Generales, podrá cancelar la Cuenta de Servicio y rescindir la relación contractual.

    \\n\\n

    4. Procedimiento de activación del registro de usuario

    \\n\\n

    4.1. Para registrarse en el Sitio Web, el Usuario deberá completar correctamente y en su totalidad el formulario de registro preestablecido en el Sitio Web con la información solicitada, incluyendo: Nombre, dirección de correo electrónico, idioma y país. Asimismo deberá necesariamente confirmar la aceptación de las presentes Condiciones Generales, marcando la casilla dispuesta a tal efecto.

    \\n

    4.2. La información facilitada en el formulario de registro del Sitio Web deberá ser exacta y actualizada. INGELABS se reserva el derecho a eliminar las Cuentas de Servicio de aquellos Usuarios que faciliten datos personales incorrectos o falsos.

    \\n

    4.3. Una vez cumplimentado y enviado el formulario de registro, el Usuario recibirá en la dirección de correo electrónico facilitada un correo de confirmación en el que se le informará de que ha efectuado una petición de registro, y donde se le indicará una nueva URL a la que deberá acceder para finalizar con éxito el registro.

    \\n

    4.4. Después de haberse realizado con éxito el registro de Usuario, se abrirá automáticamente la Cuenta de Servicio a través de la cual se gestionará el uso del Servicio por el Usuario.

    \\n\\n

    5. Medios de identificación y notificaciones

    \\n\\n

    5.1. En el momento de registro el Usuario deberá elegir una contraseña para acceder al Servicio a través del Sitio Web. En caso de pérdida u olvido de la contraseña, el Usuario podrá solicitar el restablecimiento de la contraseña a través del Sitio Web. En tal caso, recibirá un correo con instrucciones en la dirección de correo electrónico asociada a la Cuenta de Servicio.

    \\n

    5.2. Las contraseñas asignadas serán personales e intransferibles, no estando permitida la cesión, ni siquiera temporal, a terceros.

    \\n

    5.3. INGELABS no se hace responsable, en ningún caso, del acceso de terceros a la Cuenta de Servicio y bajo ninguna circunstancia asumirá cualquier responsabilidad como consecuencia del uso no autorizado de la contraseña por cualquier persona, o como resultado del acceso no autorizado a la Cuenta de Servicio.

    \\n

    5.4. En el supuesto que el Usuario conozca o sospeche de la pérdida, robo o uso de su contraseña por terceros, deberá utilizar los medios disponibles para cambiar su contraseña a través del Sitio Web a la mayor brevedad posible.

    \\n

    5.5. INGELABS podrá realizar comunicaciones al Usuario mediante la cuenta de correo electrónico asociada a su Cuenta de Servicio para enviarle alertas o notificaciones sobre su instalación, así como sobre errores de funcionamiento de los Dispositivos o en el Servicio o mejoras o cambios sustanciales en los mismos.

    \\n\\n

    6. Derechos y obligaciones del usuario

    \\n\\n

    6.1. El Usuario declara, garantiza y acuerda que:

    \\n
      \\n
    • Conoce, comprende y acepta las presentes Condiciones Generales, así como el funcionamiento y utilidad del Servicio y de los demás elementos de estas Condiciones Generales.
    • \\n
    • Todos los datos suministrados a INGELABS son verdaderos, correctos y completos.
    • \\n
    • Es mayor de edad y está en pleno dominio de sus facultades.
    • \\n
    • Es el exclusivo responsable de la utilización diligente y adecuada del Servicio, así como de los Dispositivos.
    • \\n
    • Utilizará de forma adecuada el Servicio, el Software y el Sitio Web sin perjudicar a INGELABS, de total conformidad con las presentes Condiciones Generales y la legislación aplicable. En particular, se obliga a no alterar o dañar de ningún modo el Servicio, en todo o en parte, así como el Software o el Sitio Web. INGELABS tendrá derecho a cerrar la Cuenta de Servicio de un Usuario en caso de incumplimiento de esta obligación. Los daños que el Usuario cause a INGELABS como consecuencia de la alteración que produzca en el Servicio, el Software o el Sitio Web serán responsabilidad exclusivamente del Usuario que los haya provocado.
    • \\n
    \\n

    6.2. Es responsabilidad y obligación de los Usuarios el cumplimiento de la legislación que le sea de aplicación, así como conocer y aceptar la versión de las presentes Condiciones Generales existente en el país donde se presta el Servicio.

    \\n\\n

    7. Derechos y obligaciones de INGELABS

    \\n\\n

    7.1. INGELABS se compromete a cumplir con todas y cada una de las obligaciones derivadas de las presentes Condiciones Generales.

    \\n

    7.2. INGELABS tendrá derecho a:

    \\n
      \\n
    • Modificar unilateralmente y sin previo aviso, la estructura y diseño del Servicio, así como actualizar, modificar o suprimir todo o parte del Servicio y sus condiciones de acceso, de conformidad con lo dispuesto en las presentes Condiciones Generales.
    • \\n
    • Proteger los derechos de INGELABS emprendiendo las acciones legales o judiciales pertinentes, exigiendo las indemnizaciones que pudieran derivarse por el uso indebido o ilícito de todo o parte del Servicio.
    • \\n
    \\n

    7.3. INGELABS hará un esfuerzo razonable por mantener el Servicio en funcionamiento. No obstante, ciertas dificultades técnicas o de mantenimiento ocasionales pueden provocar la interrupción temporal del Servicio. En la medida que la ley lo permita, INGELABS se reserva el derecho de modificar o suspender, periódicamente y en cualquier momento, ya sea de forma permanente o temporal, funciones y características del Servicio, con o sin previo aviso, sin obligación ante el Usuario, excepto cuando lo prohíba la ley, por cualquier interrupción, modificación o interrupción del Servicio, o por cualquier función o característica del mismo. El Usuario comprende y acepta que INGELABS no tiene la obligación de mantener, proporcionar soporte, actualizar ni mejorar el Servicio. Esta cláusula se implementará en la medida que lo permita la ley.

    \\n\\n

    8. Garantía, exención de responsabilidad y limitaciones

    \\n\\n

    8.1. INGELABS no será responsable por errores, mal funcionamiento, o en general por cualquier problema no imputable a INGELABS. En particular, pero sin limitación, INGELABS no responderá de cualquier problema que tenga origen en cualquier causa técnica relacionada con el acceso y funcionamiento de Internet. Asimismo, INGELABS no responderá de las anomalías que tengan como origen una actuación dolosa o culposa del Usuario y/o que se deriven de causas de fuerza mayor.

    \\n

    8.2. INGELABS no será responsable de cualquier problema técnico o de cualquier otra índole que afecte a los aparatos, electrodomésticos u otros elementos con los que interaccionen los Dispositivos, ni tendrá en ningún caso la obligación de atender o solucionar reclamaciones o quejas en relación con aquéllos.

    \\n

    8.3. INGELABS SE ESFUERZA PARA PROPORCIONAR AL USUARIO EL MEJOR SERVICIO POSIBLE; AÚN ASÍ, EL USUARIO COMPRENDE Y ACEPTA QUE EL SERVICIO IDDEROCLOUD SE PROPORCIONA “EN EL ESTADO EN EL QUE ESTÁ” Y “SEGÚN DISPONIBILIDAD”, SIN GARANTÍA EXPRESA NI IMPLÍCITA Y SIN NINGÚN TIPO DE CONDICIÓN. EL USUARIO UTILIZA EL SERVICIO IDDEROCLOUD POR SU CUENTA Y RIESGO. EN LA MEDIDA QUE LO PERMITA LA LEY VIGENTE, INGELABS NO HACE NINGUNA DECLARACIÓN Y NIEGA TODA GARANTÍA O CONDICIÓN DE CALIDAD ÓPTIMA, COMERCIALIZACIÓN E IDONEIDAD PARA DETERMINADO FIN O DE NO INFRACCIÓN. INGELABS NO GARANTIZA QUE EL SERVICIO IDDEROCLOUD ESTÉ LIBRE DE VIRUS, MALWARE U OTROS COMPONENTES MALICIOSOS. ADEMÁS, INGELABS NO DECLARA, AVALA, GARANTIZA NI ASUME RESPONSABILIDAD ALGUNA POR CONTENIDOS PROPORCIONADOS POR EL USUARIO.

    \\n

    8.4. EL USUARIO ACEPTA QUE, EN LA MEDIDA QUE LO PERMITA LA LEY VIGENTE, SU ÚNICA Y EXCLUSIVA SOLUCIÓN EN CASO DE PROBLEMAS O INSATISFACCIÓN CON EL SERVICIO IDDEROCLOUD ES CANCELAR SU CUENTA DE SERVICIO Y DEJAR DE USAR EL SERVICIO. EN LA MEDIDA QUE LO PERMITA LA LEY VIGENTE, EN NINGÚN CASO INGELABS, SUS AUTORIDADES, ACCIONISTAS, EMPLEADOS, AGENTES, DIRECTORES, SUBSIDIARIAS, FILIALES O LICENCIANTES SE RESPONSABILIZARÁN POR (1) CUALQUIER DAÑO INDIRECTO, ESPECIAL, INCIDENTAL, PUNITIVO, EJEMPLAR O CONSIGUIENTE, (2) POR LA PÉRDIDA DE USO, DATOS, NEGOCIOS O GANANCIAS (DIRECTAS O INDIRECTAS) QUE, EN TODOS LOS CASOS, SEAN RESULTADO DE USAR O NO PODER USAR EL SERVICIO IDDEROCLOUD, INDEPENDIENTEMENTE DEL MARCO LEGAL, SIN IMPORTAR QUE INGELABS HAYA SIDO ADVERTIDO DE LA POSIBILIDAD DE DICHOS DAÑOS, Y AUN CUANDO UNA POSIBLE SOLUCIÓN NO CUMPLA CON SU FIN ESENCIAL, O (3) EL CONJUNTO DE RESPONSABILIDADES POR TODAS LOS RECLAMACIONES RELATIVAS AL SERVICIO IDDEROCLOUD, MÁS ALLÁ DE LA SUMA DE LAS CANTIDADES QUE EL USUARIO HAYA PAGADO A INGELABS DURANTE LOS DOCE MESES ANTERIORES, EN LA MEDIDA QUE LO PERMITA LA LEY.

    \\n

    8.5. Es posible que algunos aspectos de esta sección no se apliquen en algunas jurisdicciones si lo prohibe la ley vigente. Nada de lo estipulado en estas Condiciones Generales limita los derechos legales del Usuario como consumidor. Asimismo, nada de lo estipulado en estas Condiciones Generales elimina o limita la responsabilidad de INGELABS en caso de fraude, declaración falsa, muerte o lesiones personales causadas por su negligencia y, si lo exige la ley vigente, negligencia grave.

    \\n\\n

    9. Uso del Software y derechos de propiedad intelectual e industrial

    \\n\\n

    9.1. INGELABS otorga a los Usuarios una licencia intransferible y no exclusiva, únicamente para el uso del Software y los contenidos derivados de dicho Software durante la vigencia de la relación contractual regida por las presente Condiciones Generales.

    \\n

    9.2. El uso del Software por parte del Usuario estará siempre asociado al Servicio y se realizará de conformidad con lo establecido en las presentes Condiciones Generales.

    \\n

    9.3. Todos los elementos que conforman el Servicio, incluyendo el Software, son titularidad exclusiva de INGELABS y/o sus licenciantes.

    \\n

    9.4. El código fuente, la estructura, la organización y demás elementos del Software están protegidos por derechos de propiedad intelectual cuya titularidad ostentan en exclusiva INGELABS y/o sus licenciantes, por lo que los Usuarios tienen terminantemente prohibido:

    \\n
      \\n
    • Copiar, redistribuir, publicar, realizar ingeniería inversa, descompilar, desensamblar, modificar, traducir o hacer cualquier intento para acceder al código fuente con la intención de crear versiones derivadas del código fuente, del código objeto, o similar.
    • \\n
    • Vender, ceder, sub-licenciar, transferir, distribuir o arrendar el Software.
    • \\n
    • Poner el Software a disposición del público mediante una red informática o similar.
    • \\n
    • Exportar el Software a cualquier país (ya sea utilizando medios físicos o electrónicos).
    • \\n
    • Utilizar el Software en una manera prohibida por las regulaciones y leyes aplicables.
    • \\n
    \\n\\n

    Estas actividades se denominarán en su conjunto "Conductas Prohibidas".

    \\n\\n

    9.5. El Usuario no adquirirá ningún derecho de Propiedad Intelectual ni ningún otro derecho sobre el Software distinto a la licencia de uso que se concede en las presentes Condiciones Generales a los solos efectos de poder utilizar correctamente el Servicio.

    \\n

    9.6. El Usuario deberá notificar a INGELABS de forma inmediata si tuviera conocimiento de que alguna de las Conductas Prohibidas ha sido llevada a cabo por cualquier persona, y deberá proporcionar a INGELABS asistencia razonable respecto de cualquier investigación que se lleve a cabo en función de la información facilitada.

    \\n

    9.7. El Usuario es el único responsable frente a cualquier reclamación o acción legal, judicial o extrajudicial, iniciada por terceras personas contra INGELABS basada en su utilización por el Usuario del Software. En su caso, el Usuario asumirá cuantos gastos, costes e indemnizaciones sean irrogados a INGELABS con motivo de tales reclamaciones o acciones legales.

    \\n

    9.8. El Usuario no podrá utilizar de ninguna forma las marcas, logotipos, nombres comerciales, dominios de Internet, ni cualquier otro signo distintivo titularidad de INGELABS que pueda aparecer en el Servicio.

    \\n\\n

    10. Política de privacidad

    \\n\\n

    Consule nuestra Política de privacidad.

    \\n\\n

    11. Vigencia

    \\n\\n

    11.1. La relación contractual regida por las presentes Condiciones Generales con el Usuario entrará en vigor una vez que el Usuario haya completado con éxito el registro en el Servicio, según la cláusula 4.1 anterior, y continuará vigente hasta su finalización conforme a los términos en el mismo establecidos.

    \\n\\n

    12. Resolución de la relación contractual y cancelación de la cuenta de servicio

    \\n\\n

    12.1. INGELABS podrá resolver de forma unilateral la relación contractual regida por las Condiciones Generales y cerrar la Cuenta de Servicio, sin previo aviso y de forma inmediata en los siguientes casos:

    \\n
      \\n
    • Cuando por cualquier causa INGELABS decidiera interrumpir el suministro del Servicio por motivos técnicos, circunstancias económicas o por una acogida desfavorable del Servicio en el mercado, para lo cual comunicará dicha decisión al Usuario mediante correo electrónico con una antelación mínima de un (1) mes a la interrupción del Servicio.
    • \\n
    • En los caso en los que INGELABS considerara que el Usuario ha incumplido alguna cláusulas de las presentes Condiciones Generales, incluidos los casos de infracciones de leyes o derechos de terceros cometidas por el Usuario;
    • \\n
    • Por cualquier otra causa general establecida en la Ley.
    • \\n
    \\n

    12.2. La resolución de la relación contractual por parte de INGELABS por cualquiera de las causas antes citadas no dará derecho al Usuario a reclamar ningún tipo de indemnización.

    \\n

    12.3. El Usuario por su parte podrá cancelar la Cuenta de Servicio en cualquier momento, a través del formulario previsto a tal efecto en el Sitio Web. Al solicitar la cancelación de la Cuenta de Servicio a través de dicho formulario, el Usuario recibirá un correo en la dirección de correo electrónico asociada a su Cuenta de Servicio, con instrucciones para completar el proceso.

    \\n

    12.4. Tras la finalización de la relación contractual, el Usuario se compromete a cesar en el uso del Software y el Servicio.

    \\n

    12.5. Tras la finalización de la relación contractual por cualquier causa, excepto si se establece lo contrario en las presentes Condiciones Generales, ninguna de las partes tendrá ninguna obligación adicional con respecto a la otra. Sin perjuicio de lo anterior, el derecho a resolver la relación contractual no irá en detrimento de ningún otro derecho de ninguna de las partes en virtud de posibles incumplimientos de la otra parte.

    \\n\\n

    13. Cesión

    \\n\\n

    13.1. INGELABS podrá ceder, transferir, sub-licenciar, o entregar en garantía el contrato regido por las presentes Condiciones Generales, en su totalidad o parcialmente, a cualquier tercero sin necesidad de obtener el consentimiento del Usuario.

    \\n

    13.2. El Usuario no podrá ceder, transferir, sub-licenciar, o dar en garantía el contrato regido por las Condiciones Generales ni los derechos u obligaciones que le correspondan en su virtud.

    \\n\\n

    14. Idioma

    \\n\\n

    14.1. La versión original de las presentes Condiciones Generales está redactada en castellano y en caso de conflicto con cualquiera de las versiones traducidas de las mismas, prevalecerán las presentes.

    \\n\\n

    15. Divisibilidad y renuncia

    \\n\\n

    15.1. Salvo que se estipule en estas Condiciones Generales, si por algún motivo o en alguna medida, alguna cláusula de estas Condiciones Generales se considera inválida o sin fuerza ejecutoria, dicha invalidez o falta de fuerza ejecutoria no afectará ni generará la invalidez o la falta de fuerza ejecutoria del resto de las cláusulas de estas Condiciones Generales, y se hará cumplir la aplicación de dicha cláusula en la medida que lo permita la ley.

    \\n

    15.2. El hecho de que INGELABS no haga cumplir cualquiera de las cláusulas de estas Condiciones Generales no constituirá una renuncia de INGELABS a su derecho a hacer cumplir dichas cláusulas.

    \\n\\n

    16. Ley aplicable y jurisdicción

    \\n\\n

    16.1. La relación contractual regida por las Condiciones Generales, así como las relaciones entre el Usuario y INGELABS se regirán e interpretarán de conformidad con la legislación española.

    \\n

    16.2. Cualquier discrepancia o divergencia que pudiera surgir en relación a la ejecución de la relación contractual con el Usuario se someterá a la jurisdicción de los Tribunales de Málaga, salvo norma imperativa que lo prohíba.

    \\n\\n

    Actualizado: Agosto 2022

    \\n\";","export default \"

    1. General terms

    \\n\\n

    1.1. The General Terms and Conditions described below (hereinafter, the "General Terms") govern the contractual relationship between INGELABS, S.L. (hereinafter, "INGELABS"), a Spanish company having its head office at Av. Juan López Peñalver 21, 29590 Málaga (Spain), registered in the Mercantile Register of Málaga, Volume 4034, Book 2945, Sheet 99, Page MA-83755, Inscription 1, with VAT number ES-B92727205; and the user (hereinafter, the "User(s)"), by virtue of which a service is rendered (hereinafter, the "Service"), allowing the Users to electronically control devices manufactured by INGELABS and compatible with the idderocloud service, as described in Clause 2 of these General Terms.

    \\n

    1.2. The contracting and use of the Service by the User implies acceptance without reservations of the entirety of the text comprising these General Terms, which will govern the contractual relationship between INGELABS and the User. To this extent, the User declares to have read, understood and to accepted these General Terms.

    \\n

    1.3. These General Terms are furthermore intended to govern User registration and usage of an account (hereinafter, the "Service Account"), on the www.idderocloud.com Website (hereinafter, the "Website").

    \\n\\n

    2. Description of the Service

    \\n\\n

    2.1. Using the Service provided by INGELABS, the Users may electronically control any devices manufactured by INGELABS and compatible with the Service (hereinafter, the "Device(s)"). More specifically, INGELABS provides the Users with a platform so that the Users may control the Devices through the Website.

    \\n

    2.2. Users wishing to access the Service must have legitimately acquired a compatible Device manufactured by INGELABS. The device must have been correctly installed and configured by a qualified technician, according to the laws and regulations of the country where the device is installed.

    \\n

    2.3. INGELABS will make the Website available to the Users, as well as, if applicable, additional software including the Website (hereinafter, and jointly, the "Software"), under the terms and conditions established in these General Terms. If the User does not accept these General Terms or, where applicable, their subsequent updates and/or modifications, he/she must stop using the Software.

    \\n

    2.4. The Service governed by these General Terms is provided by INGELABS to the User free of charge, without prejudice to the price that the User paid upon acquisition of the Device or for its installation and configuration.

    \\n

    2.5. INGELABS reserves the right to modify the gratuitous nature of the Service and switch to a paid Service model in the future, due to market constaints, to the launch of new functions in the Service, or to any other reason. In this event, INGELABS will make the pertinent changes in the characteristics and functions of the Service and in these General Terms. Said changes will be duly communicated to the Users with at least one (1) month of advance notice through the means established in these General Terms.

    \\n\\n

    3. Updates to the General Terms

    \\n\\n

    3.1. INGELABS reserves the right to make, at any time, the modifications, updates, or changes that it deems appropriate to these General Terms.

    \\n

    3.2. If INGELABS chooses to make modifications, updates, or changes to these General Terms, INGELABS will notify the User via the publication of a new version of the General Terms on the Website, and/or by sending an email to the email address associated to the Service Account. The User will need to accept the new version of the General Terms in order to continue using the Service. If the User does not wish to use the Service according to the new version of the General Terms, then he/she can cancel the Service Account and terminate the contractual relationship.

    \\n\\n

    4. User registration procedure

    \\n\\n

    4.1. In order to sign up for the service through the Website, the User must correctly and fully complete the registration form on the Website with the requested information, including: First name, email address, language, and country. The User will also need to confirm acceptance of these General Terms, by selecting the corresponding option in the registration form.

    \\n

    4.2. The information provided on the Website registration form must be correct and up-to-date. INGELABS reserves the right to delete Service Accounts for Users that provide false or incorrect personal information.

    \\n

    4.3. Once the registration form has been completed and submitted, the User will receive a confirmation email at the email address provided during registration, containing a URL that must be followed in order to successfully complete the registration process.

    \\n

    4.4. Once the registration process has completed successfully, a Service Account will automatically be opened through which the User will be able to manage his/her use of the Service.

    \\n\\n

    5. Means of identification and notifications

    \\n\\n

    5.1. Upon registration the User must choose a password to access the Service through the Website. If this password is lost or forgotten, the User may request a password reset through a form in the Website. If a password reset is requested, an email with further instructions will be sent to the email address associated with the Service Account.

    \\n

    5.2. Passwords are strictly personal and non-transferable, and may not be shared, even on a temporary basis, with third parties.

    \\n

    5.3. INGELABS will not be responsible under any circumstances for access by third parties to the Service Account, and will under no circumstances assume any liability arising as a consequence of unauthorised use of a password by any person or as a result of unauthorised access to the Service Account.

    \\n

    5.4. If the User is aware of or suspects the loss, theft or use of his/her password by a third party, he/she must proceed as soon as possible to change or reset his/herpassword through the Website.

    \\n

    5.5. INGELABS may send email notifications to the User via the email address associated with the Service Account, containing relevant information related to the installation, alerts or operating errors of the Devices or in the Service, or significant changes or improvements in the Devices or in the Service.

    \\n\\n

    6. Rights and obligations of the User

    \\n\\n

    6.1. The User declares, guarantees and agrees that he/she:

    \\n
      \\n
    • Is aware of, understands and accepts these General Terms, along with the operation and utility of the Service and of the other elements of these General Terms.
    • \\n
    • Has provided only true, correct, and complete information to INGELABS.
    • \\n
    • Is of legal age and in full control of his/her faculties.
    • \\n
    • Is the sole party responsible for the diligent and appropriate use of the Service, as well as the Devices.
    • \\n
    • Undertakes to use the Service, the Software, and the Website appropriately without causing harm to INGELABS, in full accordance with these General Terms and the applicable legislation. In particular, he/she undertakes not to alter or harm in any way, whether fully or in part, the Service, the Software, or the Website. INGELABS will be entitled to close a User Service Account in the event of non-compliance with this obligation. Any losses or damages that the User may cause to INGELABS as a consequence of the alteration caused in the Service, the Software, or the Website will be the exclusive responsibility of the User who caused them.
    • \\n
    \\n

    6.2. It is the obligation and responsibility of the Users to comply with the legislation applicable to them, as well as to be aware of and accept the version of these General Terms applicable in the country in which the Service is provided.

    \\n\\n

    7. Rights and obligations of INGELABS

    \\n\\n

    7.1. INGELABS undertakes to fulfil each and every one of the obligations arising from these General Terms.

    \\n

    7.2. INGELABS will be entitled to:

    \\n
      \\n
    • Modify, at its discretion and without prior notice, the structure and design of the Service, and to update, modify, or disable all or part of the Service and the conditions for access thereto, in accordance with the provisions of these General Terms.
    • \\n
    • Protect the rights of INGELABS undertaking any appropriate legal or judicial actions, demanding any compensation which could arise from undue or illicit use of all or part of the Service.
    • \\n
    \\n

    7.3. INGELABS will make reasonable efforts to keep the Service operational. However, certain technical difficulties or maintenance may, from time to time, result in temporary interruptions. To the extent permissible under applicable law, INGELABS reserves the right, periodically and at any time, to modify or discontinue, temporarily or permanently, functions and features of the Service, with or without notice, all without liability to you, except where prohibited by law, for any interruption, modification, or discontinuation of the Service or any function or feature thereof. The User understands, agrees, and accepts that INGELABS has no obligation to maintain, support, upgrade, or update the Service. This clause will be enforced to the extent permissible by applicable law.

    \\n\\n

    8. Warranty, disclaimer, and limitation

    \\n\\n

    8.1. INGELABS will not be liable for errors, faulty operation, or, in general, for any problem not attributable to INGELABS. Specifically, but without limitation, INGELABS will not be liable for any problem arising from any technical cause related o access and operation of Internet. Furthermore, INGELABS will not be liable for anomalies arising from any fraudulent or culpable action on the part of the User and/or from force majeure.

    \\n

    8.2. INGELABS will not be liable for technical problems or problems of any other nature affecting the equipment, appliances or systems interacting with the Devices, nor will it in any case be obliged to respond to or resolve claims or complaints related thereto.

    \\n

    8.3. INGELABS ENDEAVOURS TO PROVIDE THE BEST POSSIBLE SERVICE; HOWEVER, THE USER UNDERSTANDS AND AGREES THAT THE IDDEROCLOUD SERVICE IS PROVIDED “AS IS” AND “AS AVAILABLE”, WITHOUT EXPRESS OR IMPLIED WARRANTY OR CONDITION OF ANY KIND. THE USER USES THE IDDEROCLOUD SERVICE AT HIS/HER OWN RISK. TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, INGELABS MAKES NO REPRESENTATIONS AND DISCLAIMS ANY WARRANTIES OR CONDITIONS OF SATISFACTORY QUALITY, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. INGELABS DOES NOT WARRANT THAT THE IDDEROCLOUD SERVICE IS FREE OF VIRUSES, MALWARE OR OTHER HARMFUL COMPONENTS. IN ADDITION, INGELABS MAKES NO REPRESENTATION NOR DOES IT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY USER PROVIDED CONTENT.

    \\n

    8.4. THE USER AGREES THAT, TO THE EXTENT PERMITTED BY APPLICABLE LAW, HIS/HER SOLE AND EXCLUSIVE REMEDY FOR ANY PROBLEMS OR DISSATISFACTION WITH THE IDDEROCLOUD SERVICE IS TO CANCEL THE SERVICE ACCOUNT AND TO STOP USING THE IDDEROCLOUD SERVICE. TO THE FULLEST EXTENT PERMITTED BY LAW, IN NO EVENT WILL INGELABS, ITS OFFICERS, SHAREHOLDERS, EMPLOYEES, AGENTS, DIRECTORS, SUBSIDIARIES, AFFILIATES, SUCCESSORS, ASSIGNS, SUPPLIERS, OR LICENSORS BE LIABLE FOR (1) ANY INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE, EXEMPLARY, OR CONSEQUENTIAL DAMAGES; (2) ANY LOSS OF USE, DATA, BUSINESS, OR PROFITS (WHETHER DIRECT OR INDIRECT), IN ALL CASES ARISING OUT OF THE USE OR INABILITY TO USE THE IDDEROCLOUD SERVICE, REGARDLESS OF LEGAL THEORY, WITHOUT REGARD TO WHETHER INGELABS HAS BEEN WARNED OF THE POSSIBILITY OF THOSE DAMAGES, AND EVEN IF A REMEDY FAILS OF ITS ESSENTIAL PURPOSE; OR (3) AGGREGATE LIABILITY FOR ALL CLAIMS RELATING TO THE IDDEROCLOUD SERVICE MORE THAN THE AMOUNTS PAID BY THE USER TO INGELABS DURING THE PRIOR TWELVE MONTHS IN QUESTION, TO THE EXTENT PERMISSIBLE BY APPLICABLE LAW.

    \\n

    8.5. Some aspects of this section may not apply in some jurisdictions, if prohibited by applicable law. Nothing in these General Terms limits the User's statutory rights as a consumer. Nothing in these General Terms removes or limits INGELABS’ liability for fraud, fraudulent misrepresentation, death or personal injury caused by its negligence, and, if required by applicable law, gross negligence.

    \\n\\n

    9. Use of the Software and intellectual and industrial property rights

    \\n\\n

    9.1. INGELABS grants the Users a non-transferable and non-exclusive licence, solely for the use of the Software and the contents arising from said Software during the valid term of the contractual relationship governed by these General Terms.

    \\n

    9.2. The use of the Software by the User will always be associated with the Service and will be made in accordance with the terms and conditions set forth in these General Terms.

    \\n

    9.3. All of the elements that comprise the Service, including the Software, are the exclusive property of INGELABS and/or its licensors.

    \\n

    9.4. The source code, structure, organisation and other aspects of the Software are protected by intellectual property laws whose ownership is held exclusively by INGELABS and/or its licensors. Consequently, the Users are strictly prohibited from:

    \\n
      \\n
    • Copying, redistributing, publishing, performing reverse engineering, decompiling, disassembling, modifying, translating, or making any attempt to access the source code for the purpose of creating derivative versions of the source code, the object code or similar.
    • \\n
    • Selling, assigning, sub-licensing, transferring, distributing, or renting the Software.
    • \\n
    • Making the Software available to the public by way of an information technology network or similar.
    • \\n
    • Exporting the Software to any country (whether using physical or electronic means).
    • \\n
    • Using the Software in any manner prohibited by the applicable regulations and laws.
    • \\n
    \\n\\n

    These activities will jointly be referred to as "Prohibited Practices."

    \\n\\n

    9.5. The User will not acquire any intellectual property right or any other right over the Software other than the usage licence granted under these General Terms for the sole purpose of being able to correctly use the Service.

    \\n

    9.6. The User must notify INGELABS immediately if he/she becomes aware that any of the Prohibited Practices has been carried out by any person or entity, and must provide INGELABS with reasonable assistance in any investigation carried out as a result of the information provided.

    \\n

    9.7. The User is the only party liable vis-à-vis any legal, judicial or extrajudicial claim or actions, initiated by third parties against INGELABS based on the use of the Software by the User. If applicable, the User will bear any expenses, costs, and compensation payments caused to INGELABS as a result of such legal claims or actions.

    \\n

    9.8. The User may not use in any way the brands, logotypes, commercial names, Internet domains, or any other distinctive markings belonging to INGELABS that may appear in the Service.

    \\n\\n

    10. Privacy policy

    \\n\\n

    Please check our Privacy policy.

    \\n\\n

    11. Valid term

    \\n\\n

    11.1. The contractual relationship governed by these General Terms with the User will enter into force when the User completes the registration successfully as described previoulsy in Clause 4.1, and will continue in force until its finalisation in accordance with the terms and conditions established therein.

    \\n\\n

    12. Termination of contract and cancellation of the Service Account

    \\n\\n

    12.1. INGELABS may unilaterally terminate the contractual relationship governed by these General Terms and close the Service Account, immediately and without prior notice, in the following cases:

    \\n
      \\n
    • When, for any reason, INGELABS decides to interrupt the provision of the Service for technical reasons, economic circumstances, or due to an unfavourable reaction to the Service by the market, in which case said decision will be notified to the User through email with minimum advance notice of one (1) month before the Service interruption.
    • \\n
    • In cases in which INGELABS considers that the User has breached one or more clauses of these General Terms, including cases of legal infractions or third party rights committed by the User;
    • \\n
    • For any other general reason established under law.
    • \\n
    \\n

    12.2. Termination of the contractual relationship on the part of INGELABS for any of the aforementioned reasons will not entitle the User to claim any type of compensation.

    \\n

    12.3. The User may cancel the Service Account at any time through the form that is provided to this effect in the Website. When cancellation of the Service Account is requested, the User will receive an email at the email address associated with the Service Account, containing instructions to complete the cancellation process.

    \\n

    12.4. Following the end of the contractual relationship, the User undertakes to stop using the Software and the Service.

    \\n

    12.5. After the contractual relationship has ended for any reason, except if otherwise expressly established in these General Terms, neither of the parties will have any additional obligation with respect to one another. Without prejudice to the above, the right to terminate the contractual relationship will not negatively affect any other right of either of the parties arising by virtue of potential breaches by the other party.

    \\n\\n

    13. Assignment

    \\n\\n

    13.1. INGELABS may assign, transfer, sub-licence, or give as a guarantee the agreement governed by these General Terms, in whole or in part, to any third party without any need to obtain the User's consent.

    \\n

    13.2. The User may not assign, transfer, sub-licence, or give as a guarantee the agreement governed by the General Terms or the rights or obligations corresponding to him/her by virtue thereof.

    \\n\\n

    14. Language

    \\n\\n

    14.1. The original version of these General Terms is written in Spanish. In case of conflict with any of the translated versions of said Terms, the original Spanish version shall prevail.

    \\n\\n

    15. Severability and waiver

    \\n\\n

    15.1. Unless as otherwise stated in these General Terms, should any provision of the General Terms be held invalid or unenforceable for any reason or to any extent, such invalidity or enforceability shall not in any manner affect or render invalid or unenforceable the remaining provisions of the General Terms, and the application of that provision shall be enforced to the extent permitted by law.

    \\n

    15.2. Any failure by INGELABS to enforce any provision in these General Terms shall not waive INGELABS' right to do so.

    \\n\\n

    16. Applicable law and jurisdiction

    \\n\\n

    16.1. The contractual relationship governed by these General Terms, as well as the relationships between the User and INGELABS, will be governed and interpreted in accordance with the provisions of Spanish legislation.

    \\n

    16.2. Any discrepancy or divergence that could arise in relation to the execution of the contractual relationship with the User is subject to the jurisdiction of the Courts of Málaga, unless applicable regulations prohibit it.

    \\n\\n

    Updated: August 2022

    \\n\";","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgCheck(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 60,\n height: 60,\n viewBox: \"0 0 1024 1024\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#52c41a\",\n d: \"M512 0C229.232 0 0 229.232 0 512c0 282.784 229.232 512 512 512 282.784 0 512-229.216 512-512C1024 229.232 794.784 0 512 0zm0 961.008c-247.024 0-448-201.984-448-449.01 0-247.024 200.976-448 448-448s448 200.977 448 448-200.976 449.01-448 449.01zm204.336-636.352L415.935 626.944l-135.28-135.28c-12.496-12.496-32.752-12.496-45.264 0-12.496 12.496-12.496 32.752 0 45.248l158.384 158.4c12.496 12.48 32.752 12.48 45.264 0 1.44-1.44 2.673-3.009 3.793-4.64l318.784-320.753c12.48-12.496 12.48-32.752 0-45.263-12.512-12.496-32.768-12.496-45.28 0z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgCheck);\nexport default __webpack_public_path__ + \"static/media/check.4435620a.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgExclamation(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 60,\n height: 60,\n fill: \"red\",\n viewBox: \"0 0 1024 1024\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M480 674V192c0-18 14-32 32-32s32 14 32 32v482h-64zm0 63h64v60h-64v-60zM0 512C0 229 229 0 512 0s512 229 512 512-229 512-512 512S0 795 0 512zm961 0c0-247-202-448-449-448S64 265 64 512s201 448 448 448 449-201 449-448z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgExclamation);\nexport default __webpack_public_path__ + \"static/media/exclamation.9a10b65a.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgInfo(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 60,\n height: 60,\n fill: \"blue\",\n viewBox: \"0 0 1024 1024\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M576 736l-32-.001v-286c0-.336-.096-.656-.096-1.008s.096-.655.096-.991c0-17.664-14.336-32-32-32h-64c-17.664 0-32 14.336-32 32s14.336 32 32 32h32v256h-32c-17.664 0-32 14.336-32 32s14.336 32 32 32h128c17.664 0 32-14.336 32-32s-14.336-32-32-32zm-64-384.001c35.344 0 64-28.656 64-64s-28.656-64-64-64-64 28.656-64 64 28.656 64 64 64zm0-352c-282.768 0-512 229.232-512 512 0 282.784 229.232 512 512 512 282.784 0 512-229.216 512-512 0-282.768-229.216-512-512-512zm0 961.008c-247.024 0-448-201.984-448-449.01 0-247.024 200.976-448 448-448s448 200.977 448 448-200.976 449.01-448 449.01z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgInfo);\nexport default __webpack_public_path__ + \"static/media/info.7e38bd53.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\nimport { Button } from \"../components\";\nimport styles from \"./StatusPage.module.scss\";\nimport cn from \"classnames\";\nimport { useFormatMessage } from \"../i18n\";\nimport { useHistory } from \"react-router-dom\";\nimport { ReactComponent as Success } from \"../assets/icons/check.svg\";\nimport { ReactComponent as Error } from \"../assets/icons/exclamation.svg\";\nimport { ReactComponent as Info } from \"../assets/icons/info.svg\";\nimport sharedStyles from \"../shared.module.scss\";\nimport { useScrollToTop } from \"../hooks\";\n\nexport function StatusPage({\n className,\n variant,\n text,\n buttonTitle,\n nextPage = \"/\",\n}) {\n const tr = useFormatMessage();\n const history = useHistory();\n useScrollToTop([]);\n\n function handleCancelClick() {\n history.push(nextPage);\n }\n\n const variants = {\n success: ,\n error: ,\n info: ,\n };\n\n if (!variant) return null;\n return (\n
    \n {variants[variant]}\n

    {text}

    \n \n
    \n );\n}\n","import { useFormik } from \"formik\";\nimport React, { useState, useRef, useEffect } from \"react\";\nimport cn from \"classnames\";\nimport { useLocation } from \"react-router\";\nimport { useFormatMessage } from \"../i18n\";\nimport { Button, Select, Link, Alert } from \"../components\";\nimport styles from \"./SignUpPage.module.scss\";\nimport sharedStyles from \"../shared.module.scss\";\nimport {\n validateForm,\n getErrorMsg,\n isValid,\n} from \"../services/validation-service\";\nimport { signupValidation } from \"../shared/validation\";\nimport {\n ValidatedCheckbox,\n ValidatedInput,\n ValidatedSelect,\n} from \"./components\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n getSignupState,\n initServerError,\n initSignup,\n signup,\n} from \"../redux/auth-slice\";\nimport { Recaptcha } from \"./components/Recaptcha\";\nimport { TermsPage } from \"./TermsPage\";\nimport { StatusPage } from \"./StatusPage\";\nimport { useCountriesOptions } from \"../hooks/useCountries\";\nimport { useLanguagesOptions } from \"../hooks/useLanguages\";\nimport { scrollToFirstValidationError } from \"../utils\";\n\nexport function SignUpPage() {\n const tr = useFormatMessage();\n const dispatch = useDispatch();\n const { serverErrors, signupInProgress, signupFailed } =\n useSelector(getSignupState);\n const [stage, setStage] = useState(\"signup\");\n const location = useLocation();\n const countriesOptions = useCountriesOptions();\n const languagesOptions = useLanguagesOptions();\n const recaptchaRef = useRef();\n\n useEffect(() => {\n dispatch(initSignup());\n }, [dispatch]);\n\n useEffect(() => {\n if (location.pathname === \"/terms-and-conditions\") {\n setStage(\"terms\");\n }\n if (location.pathname === \"/signup\") {\n setStage(\"signup\");\n }\n }, [location.pathname]);\n\n const formik = useFormik({\n initialValues: {\n email: \"\",\n password: \"\",\n confirmPassword: \"\",\n name: \"\",\n country: \"\",\n language: \"en\",\n acceptTerms: false,\n },\n\n onSubmit: async (values) => {\n setPristine(false);\n const { email, password, name, country, language } = values;\n if (isValid(validationErrors) && recaptcha) {\n const data = await dispatch(\n signup({\n username: email,\n lang: language,\n password,\n name,\n country,\n language,\n recaptcha_response: recaptcha,\n }),\n );\n if (data.meta.requestStatus === \"fulfilled\") {\n setStage(\"success\");\n } else {\n setRecaptcha(\"\");\n recaptchaRef.current?.reset();\n scrollToFirstValidationError();\n }\n } else {\n scrollToFirstValidationError();\n }\n },\n });\n\n useEffect(() => {\n if (serverErrors.length) {\n dispatch(initServerError());\n }\n // eslint-disable-next-line\n }, [formik.values.email, dispatch]);\n\n const [recaptcha, setRecaptcha] = useState(\"\");\n const [pristine, setPristine] = useState(true);\n\n const onChange = (value) => {\n setRecaptcha(value);\n };\n\n const validationErrors = validateForm(\n { form: formik.values, serverErrors },\n signupValidation,\n );\n\n const emailErrorMsg = getErrorMsg(validationErrors, \"email\");\n const passErrorMsg = getErrorMsg(validationErrors, \"password\");\n const confirmPassErrorMsg = getErrorMsg(validationErrors, \"confirmPassword\");\n const nameErrorMsg = getErrorMsg(validationErrors, \"name\");\n const acceptErrorMsg = getErrorMsg(validationErrors, \"acceptTerms\");\n const countryErrorMsg = getErrorMsg(validationErrors, \"country\");\n\n return (\n <>\n {stage === \"terms\" && }\n {stage === \"success\" && (\n \n )}\n \n

    \n {tr(\"registration_form\")}\n

    \n \n {/* https://stackoverflow.com/questions/15738259/disabling-chrome-autofill */}\n
    \n {\" \"}\n {\" \"}\n {\" \"}\n
    \n \n \n \n \n \n \n
    \n \n \n {tr(\"see_conditions\")}\n \n
    \n\n \n {signupFailed && (\n \n {tr(\"something_went_wrong\")}\n \n )}\n \n \n {`${tr(\"already_have_an_account\")} `}\n {tr(\"already_have_an_account_login\")}\n \n \n \n \n );\n}\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { useFormik } from \"formik\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Button, Link, Alert } from \"../components\";\nimport { ValidatedInput, Recaptcha } from \"./components\";\nimport { useFormatMessage } from \"../i18n\";\nimport {\n getPasswordRecoveryState,\n recoverPassword,\n initRecoverPassword,\n} from \"../redux/auth-slice\";\nimport cn from \"classnames\";\nimport { validateForm, getErrorMsg } from \"../services/validation-service\";\nimport styles from \"./PasswordRecoveryPage.module.scss\";\nimport sharedStyles from \"../shared.module.scss\";\nimport { StatusPage } from \"./StatusPage\";\nimport { passwordRecoveryValidation } from \"../shared/validation\";\nimport { scrollToFirstValidationError } from \"../utils\";\nimport { useLocation } from \"react-router-dom\";\n\nconst errorMessages = {\n NOT_FOUND: \"this_email_does_not_exist\",\n SERVER_ERROR: \"something_went_wrong\",\n};\n\nexport function PasswordRecoveryPage() {\n const tr = useFormatMessage();\n const location = useLocation();\n const dispatch = useDispatch();\n useEffect(() => {\n dispatch(initRecoverPassword());\n }, [dispatch]);\n\n const recaptchaRef = useRef();\n const [pristine, setPristine] = useState(true);\n const [recaptcha, setRecaptcha] = useState(\"\");\n const [stage, setStage] = useState(\"password\");\n\n const {\n recoverPasswordFailed,\n recoverPasswordError,\n recoverPasswordInProgress,\n } = useSelector(getPasswordRecoveryState);\n\n const errorMessage = tr(\n errorMessages[recoverPasswordError || \"SERVER_ERROR\"]\n );\n\n const formik = useFormik({\n initialValues: {\n email: \"\",\n },\n onSubmit: handleSubmit,\n });\n\n const validationErrors = validateForm(\n { form: formik.values },\n passwordRecoveryValidation\n );\n\n function handleRecaptchaChange(value) {\n setRecaptcha(value);\n }\n\n function getPreviousPage() {\n return location.state?.fromAuthorize ? \"/authorize\" : \"/login\";\n }\n\n async function handleSubmit(values) {\n setPristine(false);\n if (validationErrors.length || !recaptcha) {\n scrollToFirstValidationError();\n return;\n }\n const { email } = values;\n const data = await dispatch(recoverPassword({ email, recaptcha }));\n if (data.meta.requestStatus === \"fulfilled\") {\n setStage(\"success\");\n }\n recaptchaRef.current?.reset();\n setRecaptcha(\"\");\n setPristine(true);\n }\n\n return (\n <>\n {stage === \"success\" && (\n \n )}\n {stage === \"password\" && (\n
    \n
    \n

    \n {tr(\"i_have_lost_my_password\")}\n

    \n
    \n {tr(\"give_us_your_email_in_order_to_get_a_new_password\")}\n
    \n \n \n {recoverPasswordFailed && (\n \n {errorMessage}\n \n )}\n \n \n {`${tr(\"already_have_an_account\")} `}\n \n {tr(\"already_have_an_account_login\")}\n \n \n \n
    \n )}\n \n );\n}\n","import { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { DevicesGridView, DevicesListView } from \".\";\nimport { Alert, ViewSwitch } from \"../components\";\nimport { REFRESH_INTERVAL } from \"../constants/constants\";\nimport { useFormatMessage } from \"../i18n\";\nimport {\n getDevices,\n getDevicesFailed,\n getDevicesView,\n getUserDevices,\n devicesLoaded,\n} from \"../redux/devices-slice\";\nimport styles from \"./MyDevicesPage.module.scss\";\n\nexport function MyDevicesPage() {\n const dispatch = useDispatch();\n const tr = useFormatMessage();\n const devices = useSelector(getDevices);\n const devicesView = useSelector(getDevicesView);\n const devicesLoadingFailed = useSelector(getDevicesFailed);\n const initialLoadSuccessfull = useSelector(devicesLoaded);\n\n useEffect(() => {\n dispatch(getUserDevices());\n }, [dispatch]);\n\n useEffect(() => {\n const interval = setInterval(() => {\n dispatch(getUserDevices());\n }, REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }, [dispatch]);\n\n return (\n
    \n \n {devicesLoadingFailed && !initialLoadSuccessfull ? (\n \n {tr(\"fail_getting_devices\")}\n \n ) : (\n <>\n {devicesView === \"grid\" && }\n {devicesView === \"list\" && }\n \n )}\n
    \n );\n}\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgDeleteBin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 14.289,\n height: 17.147,\n viewBox: \"0 0 14.289 17.147\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"trash-can-15\",\n d: \"M3935.6,1843.818l2.142,12.861h8.574l2.143-12.861Zm13.574-2.857v1.429h-14.289v-1.429h4.08c.644,0,1.166-.784,1.166-1.429h3.8c0,.645.521,1.429,1.164,1.429Z\",\n transform: \"translate(-3934.889 -1839.532)\",\n fill: \"#fff\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgDeleteBin);\nexport default __webpack_public_path__ + \"static/media/delete-bin.13cdd1b7.svg\";\nexport { ForwardRef as ReactComponent };","import cn from \"classnames\";\nimport { useSelector } from \"react-redux\";\nimport Skeleton from \"react-loading-skeleton\";\nimport { devicesLoaded } from \"../redux/devices-slice\";\nimport { AddNewDeviceGridView, DeviceCardGridView } from \"./components\";\nimport styles from \"./DevicesGridView.module.scss\";\nimport sharedStyles from \"../shared.module.scss\";\n\nconst SKELETONS_DEVICE_COUNT = 4;\n\nexport function DevicesGridView({ devices }) {\n const success = useSelector(devicesLoaded);\n\n const skeletons = Array(SKELETONS_DEVICE_COUNT)\n .fill()\n .map((_, idx) => );\n\n return (\n
    \n {success ? (\n <>\n {devices?.map((device) => (\n \n ))}\n \n \n ) : (\n skeletons\n )}\n
    \n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport cn from \"classnames\";\nimport { useFormatMessage } from \"../i18n\";\nimport { Alert, Button, Dialog } from \"../components\";\nimport styles from \"./UserSettingsPage.module.scss\";\nimport sharedStyles from \"../shared.module.scss\";\nimport { ChangePasswordForm, UserSettingsForm } from \"./components\";\nimport { ReactComponent as DeleteBin } from \"../assets/icons/delete-bin.svg\";\nimport {\n getUserData,\n getUserDetails,\n initSettingsUpdate,\n} from \"../redux/settings-slice\";\n\nimport { StatusPage } from \".\";\nimport { deleteUser } from \"../redux/auth-slice\";\n\nexport function UserSettingsPage() {\n const tr = useFormatMessage();\n const { userSettingsLoading, user, userSettingsFailed } = useSelector(\n getUserData\n );\n const [stage, setStage] = useState(\"settings\");\n const dispatch = useDispatch();\n const [showModal, setShowModal] = useState(false);\n\n useEffect(() => {\n dispatch(initSettingsUpdate());\n dispatch(getUserDetails());\n }, [dispatch]);\n\n async function handleSubmit() {\n setStage(\"success\");\n await dispatch(deleteUser());\n }\n\n return (\n <>\n {stage === \"success\" && (\n \n )}\n {stage === \"settings\" && (\n
    \n \n

    {tr(\"settings\")}

    \n
    \n {userSettingsFailed && (\n \n {tr(\"fail_getting_user\")}\n \n )}\n
    \n \n \n\n
    \n }\n disabled={userSettingsLoading}\n onClick={() => setShowModal(true)}\n />\n
    \n
    \n setShowModal(false)}\n buttons={[\n {\n title: tr(\"no_go_back\"),\n handler: () => setShowModal(false),\n variant: \"light\",\n },\n {\n title: tr(\"yes_i_want_to_proceed\"),\n handler: () => handleSubmit(),\n variant: \"danger\",\n },\n ]}\n />\n \n \n )}\n \n );\n}\n","import cn from \"classnames\";\nimport Skeleton from \"react-loading-skeleton\";\nimport { AddNewDeviceListView, DeviceCardListView } from \"./components\";\nimport sharedStyles from \"../shared.module.scss\";\nimport styles from \"./DevicesListView.module.scss\";\nimport { useSelector } from \"react-redux\";\nimport { devicesLoaded } from \"../redux/devices-slice\";\nimport { useFormatMessage } from \"../i18n\";\n\nconst SKELETONS_DEVICE_COUNT = 6;\n\nexport function DevicesListView({ devices }) {\n const tr = useFormatMessage();\n const success = useSelector(devicesLoaded);\n\n const skeletons = Array(SKELETONS_DEVICE_COUNT)\n .fill()\n .map((_, idx) => (\n \n ));\n\n return (\n \n
    \n
    \n
    {tr(\"model\")}
    \n
    {tr(\"name\")}
    \n
    \n {success ? (\n <>\n {devices?.map((device, idx) => (\n \n ))}\n \n \n ) : (\n skeletons\n )}\n
    \n \n );\n}\n","import { useEffect } from \"react\";\nimport cn from \"classnames\";\nimport { useParams } from \"react-router-dom\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Formik } from \"formik\";\nimport { useFormatMessage } from \"../i18n\";\nimport sharedStyles from \"../shared.module.scss\";\nimport styles from \"./DeviceSettings.module.scss\";\nimport { Alert, Button, Input, TextField } from \"../components\";\nimport {\n getDevice,\n getUserDeviceState,\n initDeviceDetails,\n updateUserDevice,\n} from \"../redux/devices-slice\";\nimport { getModelName } from \"../utils\";\n\nconst errorMessages = {\n PRECONDITION_FAILED: \"fail_updating_device\",\n SERVER_ERROR: \"something_went_wrong\",\n};\n\nexport function DeviceSettings() {\n const tr = useFormatMessage();\n const dispatch = useDispatch();\n const {\n userDevice,\n updateDeviceError,\n updateDeviceFailed,\n updateDeviceInProgress,\n userDeviceLoading,\n userDeviceError,\n updateDeviceSuccess,\n } = useSelector(getUserDeviceState);\n const { id } = useParams();\n\n const errorMessage = tr(\n errorMessages[updateDeviceError?.type || \"SERVER_ERROR\"]\n );\n\n useEffect(() => {\n dispatch(initDeviceDetails());\n dispatch(getDevice(id));\n }, [dispatch, id]);\n\n return (\n
    \n
    \n

    {tr(\"device_management\")}

    \n
    \n {userDeviceError && (\n \n {tr(\"fail_getting_device\")}\n \n )}\n {\n dispatch(\n updateUserDevice({\n id,\n updatekey: userDevice.updatekey,\n name,\n comment,\n })\n );\n }}\n >\n {(props) => (\n <>\n \n \n \n \n {updateDeviceSuccess && (\n {tr(\"device_updated\")}\n )}\n {updateDeviceFailed && (\n {errorMessage}\n )}\n
    \n \n
    \n
    \n \n \n )}\n \n \n );\n}\n","import cn from \"classnames\";\nimport styles from \"./InfoPage.module.scss\";\nimport sharedStyles from \"../shared.module.scss\";\n\nexport function InfoPage({\n title,\n page,\n pageClassName,\n contentClassName,\n}) {\n return (\n
    \n
    \n {title &&

    {title}

    }\n
    \n
    \n \n
    \n
    \n );\n}\n","import { useSelector } from \"react-redux\";\nimport { getLocale } from \"../redux/settings-slice\";\nimport { oemFlavor } from \"../constants/oem\";\nimport { InfoPage } from \"./InfoPage\";\n\n/* eslint-disable */\nimport helpEn from \"!!raw-loader!../i18n/iddero/help/help-en.html\";\nimport helpEs from \"!!raw-loader!../i18n/iddero/help/help-es.html\";\nimport helpFr from \"!!raw-loader!../i18n/iddero/help/help-fr.html\";\nimport helpDe from \"!!raw-loader!../i18n/iddero/help/help-de.html\";\nimport helpEnEe from \"!!raw-loader!../i18n/eelectron/help/help-en.html\";\nimport helpEsEe from \"!!raw-loader!../i18n/eelectron/help/help-es.html\";\nimport helpFrEe from \"!!raw-loader!../i18n/eelectron/help/help-fr.html\";\nimport helpDeEe from \"!!raw-loader!../i18n/eelectron/help/help-de.html\";\n/* eslint-disable */\n\nfunction targetPage(lang) {\n switch (oemFlavor) {\n default:\n case \"iddero\":\n switch (lang) {\n default:\n case \"en\": return helpEn;\n case \"es\": return helpEs;\n case \"fr\": return helpFr;\n case \"de\": return helpDe;\n }\n case \"eelectron\":\n switch (lang) {\n default:\n case \"en\": return helpEnEe;\n case \"es\": return helpEsEe;\n case \"fr\": return helpFrEe;\n case \"de\": return helpDeEe;\n }\n }\n}\n\nexport function HelpPage() {\n const lang = useSelector(getLocale);\n const page = targetPage(lang);\n\n return (\n \n );\n}\n","export default \"

    Adding new devices

    \\n\\n

    Adding a new Iddero touch panel or Iddero Home Server to your idderocloud account is very easy:

    \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    VERSO+IP / VERSO+IP 2 / VERSO INDOOR\\n From the Iddero Mobile app\\n
    HC3-KNX / HC3L-KNXSeveral options:\\n \\n
    HC2-KNX / HC2L-KNX / HC1i-KNX\\n From the device's web interface\\n
    Iddero Home Server\\n From the device's web interface\\n
    \\n\\n\\n

    From the Iddero Mobile app

    \\n\\n
      \\n
    1. Checklist:\\n
        \\n
      • Make sure you are using the latest version of the Iddero Mobile app (download from App Store or Google Play)
      • \\n
      • (HC3-KNX, HC3L-KNX) Firmware version of the Iddero touch panel must be 4.5 or later. You can check the firmware version in the Settings > Information menu.
      • \\n
      • The touch panel's network settings must be correct, including gateway address and DNS servers. Verify the network settings in the Settings > System > Network menu.
      • \\n
      • Both the touch panel and the smartphone or tablet running the Iddero Mobile app must be connected to the Internet. In addition, for all touch panels except VERSO+IP 2 and VERSO INDOOR, the touch panel and the Iddero Mobile app must be connected to the same local area network (LAN).
      • \\n
      • (HC3-KNX, HC3L-KNX) The touch panel's embedded web server must be enabled (Settings > System > Web server).
      • \\n
      \\n
    2. \\n
    3. Log into the Iddero Mobile app using your idderocloud username and password.

    4. \\n
    5. Put the touch panel in Link mode: go to Settings > System > Remote access, then tap Link.

    6. \\n
    7. In the Iddero Mobile app, go to the My Devices screen, tap the Add (+) button and scan the QR code shown in the Iddero touch panel.

    8. \\n
    9. Depending on several factors, a confirmation dialog may be shown in the touch panel. Confirm that you want to proceed with the operation.

    10. \\n
    11. The linking process will then be performed. Once the process is complete, the app will return to the My Devices screen, and the device list will be updated automatically.

    12. \\n
    \\n\\n
    \\n\\n\\n

    From the touch panel

    \\n\\n
      \\n
    1. Checklist:\\n
        \\n
      • Firmware version of the Iddero touch panel must be 4.5 or later. You can check the firmware version in the Settings > Information menu.
      • \\n
      • The touch panel's network settings must be correct, including gateway address and DNS servers. Verify the network settings in the Settings > System > Network menu.
      • \\n
      • The touch panel must be connected to the Internet.
      • \\n
      • The touch panel's embedded web server must be enabled (Settings > System > Web server).
      • \\n
      \\n
    2. \\n
    3. Go to Settings > System > Remote access, then tap Link.

    4. \\n
    5. Tap the keyboard icon.

    6. \\n
    7. Fill in the “E-mail” and “Password” fields with the e-mail address and password of your idderocloud account, then tap Link.

    8. \\n
    9. The linking process will then be performed. Once the process is complete, the device will show up in the “My devices” section of your idderocloud account.

    10. \\n
    \\n\\n
    \\n\\n\\n

    From the device's web interface

    \\n\\n
      \\n
    1. Checklist:\\n
        \\n
      • Firmware version of the device must be 3.0 or later. You can check the firmware version in the Settings > Information menu.
      • \\n
      • The device's network settings must be correct, including gateway address and DNS servers. Verify the network settings in the Settings > System settings > Network configuration menu.
      • \\n
      • The device must be connected to the Internet.
      • \\n
      \\n
    2. \\n
    3. Log into the device's web interface and go to the Settings > System settings > Remote access menu.

    4. \\n
    5. Fill in the “E-mail” and “Password” fields with the e-mail address and password of your idderocloud account, then click on “Link device”.

    6. \\n
    7. The linking process will then be performed. Once the process is complete, the device will show up in the “My devices” section of your idderocloud account.

    8. \\n
    \\n\";","export default \"

    Añadir nuevos dispositivos

    \\n\\n

    Añadir una nueva pantalla táctil Iddero o un Iddero Home Server a tu cuenta de idderocloud es muy fácil. Sólo tienes que seguir los pasos que te indicamos a continuación:

    \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    VERSO+IP / VERSO+IP 2 / VERSO INDOOR\\n Desde la app Iddero Mobile\\n
    HC3-KNX / HC3L-KNXVarias opciones:\\n \\n
    HC2-KNX / HC2L-KNX / HC1i-KNX\\n Desde el interfaz web del dispositivo\\n
    Iddero Home Server\\n Desde el interfaz web del dispositivo\\n
    \\n\\n\\n

    Desde la app Iddero Mobile

    \\n\\n
      \\n
    1. Comprobaciones previas:\\n
        \\n
      • Asegúrate de tener instalada la última versión de la app Iddero Mobile (disponible en la App Store o en Google Play)
      • \\n
      • (HC3-KNX / HC3L-KNX) La versión de firmware de la pantalla táctil debe ser 4.5 o posterior. Puedes comprobar la versión actual de firmware en el menú Ajustes > Información.
      • \\n
      • La configuración de red de la pantalla táctil Iddero debe ser correcta, incluyendo la configuración de la puerta de enlace y servidores DNS. Puedes verificar la configuración de red accediendo al menú Ajustes > Sistema > Configuración de red.
      • \\n
      • Tanto la pantalla táctil como el smartphone o tablet en el que está instalada la app Iddero Mobile deben estar conectados a Internet. Además, para todas las pantallas excepto VERSO+IP 2 y VERSO INDOOR, la pantalla táctil y la app Iddero Mobile deben estar conectados a la misma red local (LAN).
      • \\n
      • (HC3-KNX / HC3L-KNX) El servidor web de la pantalla debe estar habilitado (Ajustes > Sistema > Servidor web).
      • \\n
      \\n
    2. \\n
    3. Inicia sesión en la app Iddero Mobile con los datos de tu cuenta idderocloud.

    4. \\n
    5. Pon la pantalla táctil en modo vinculación. Para ello, entra en la página Ajustes > Sistema > Acceso remoto y pulsa Vincular.

    6. \\n
    7. En la app Iddero Mobile, en la pantalla Mis dispositivos, pulsa el botón Añadir (+) y escanea el código QR que se muestra en la pantalla táctil Iddero.

    8. \\n
    9. Dependiendo de distintos factores, puede que se muestre un mensaje de confirmación en la pantalla táctil Iddero. Confirma que deseas seguir adelante con la operación.

    10. \\n
    11. A continuación se realizará el proceso de vinculación. Una vez completado el proceso, en la app volverá a mostrarse la pantalla Mis dispositivos, y el listado de dispositivos se actualizará automáticamente.

    12. \\n
    \\n\\n
    \\n\\n\\n

    Desde la pantalla táctil

    \\n\\n
      \\n
    1. Comprobaciones previas:\\n
        \\n
      • La versión de firmware de la pantalla táctil debe ser 4.5 o posterior. Puedes comprobar la versión actual de firmware en el menú Ajustes > Información.
      • \\n
      • La configuración de red de la pantalla táctil Iddero debe ser correcta, incluyendo la configuración de la puerta de enlace y servidores DNS. Puedes verificar la configuración de red accediendo al menú Ajustes > Sistema > Configuración de red.
      • \\n
      • La pantalla debe estar conectada a Internet.
      • \\n
      • El servidor web de la pantalla debe estar habilitado (Ajustes > Sistema > Servidor web).
      • \\n
      \\n
    2. \\n
    3. Entra en la página Ajustes > Sistema > Acceso remoto y pulsa Vincular.

    4. \\n
    5. Pulsa sobre el icono del teclado.

    6. \\n
    7. Introduce el email y la contraseña de tu cuenta idderocloud en los campos “E-mail” y “Contraseña”, y pulsa Vincular.

    8. \\n
    9. A continuación se realizará el proceso de vinculación. Una vez completado el proceso, el dispositivo aparecerá en la página “Mis dispositivos” en tu cuenta idderocloud.

    10. \\n
    \\n\\n
    \\n\\n\\n

    Desde el interfaz web del dispositivo

    \\n\\n
      \\n
    1. Comprobaciones previas:\\n
        \\n
      • La versión de firmware del dispositivo debe ser 3.0 o posterior. Puedes comprobar la versión actual de firmware en el menú Ajustes > Información.
      • \\n
      • La configuración de red del dispositivo Iddero debe ser correcta, incluyendo la configuración de la puerta de enlace y servidores DNS. Puedes verificar la configuración de red accediendo al menú Ajustes > Ajustes de sistema > Configuración de red.
      • \\n
      • El dispositivo debe estar conectado a Internet.
      • \\n
      \\n
    2. \\n
    3. Accede al interfaz web del dispositivo y entra al menú Ajustes > Ajustes de sistema > Acceso remoto.

    4. \\n
    5. Introduce el email y la contraseña de tu cuenta idderocloud en los campos “E-mail” y “Contraseña”, y pulsa Vincular.

    6. \\n
    7. A continuación se realizará el proceso de vinculación. Una vez completado el proceso, el dispositivo aparecerá en la página “Mis dispositivos” en tu cuenta idderocloud.

    8. \\n
    \\n\";","export default \"

    Ajouter un nouveau dispositif

    \\n

    Ajouter un nouvel écran tactile Iddero ou un Iddero Home Server à votre compte idderocloud est très simple. Il suffit de suivre les étapes suivantes :

    \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    VERSO+IP / VERSO+IP 2 / VERSO INDOOR\\n Depuis l’application Iddero Mobile\\n
    HC3-KNX / HC3L-KNXPlusieurs options :\\n \\n
    HC2-KNX / HC2L-KNX / HC1i-KNX\\n Depuis l’interface web du dispositif\\n
    Iddero Home Server\\n Depuis l’interface web du dispositif\\n
    \\n\\n\\n

    Depuis l’application Iddero Mobile

    \\n\\n
      \\n
    1. Liste de contrôle:\\n
        \\n
      • Assurez-vous d’utiliser la dernière version de l’application Iddero Mobile (téléchargeable depuis l’App Store ou Google Play)
      • \\n
      • (HC3-KNX / HC3L-KNX) La version du firmware de l’écran tactile Iddero doit être 4.5 ou ultérieure. Vous pouvez vérifier la version du firmware dans le menu Paramètres > Information.
      • \\n
      • La configuration du réseau de l’écran tactile doit être correcte, y compris l’adresse de la passerelle et les serveurs DNS. Vérifiez la configuration du réseau dans le menu Paramètres > Système > Réseau.
      • \\n
      • L’écran tactile et le smartphone ou la tablette exécutant l’application Iddero Mobile doivent être connectés à Internet. De plus, pour tous les écrans tactiles sauf VERSO+IP 2 et VERSO INDOOR, l’écran tactile et l’application Iddero Mobile doivent être connectés au même réseau local (LAN).
      • \\n
      • (HC3-KNX / HC3L-KNX) Le serveur web intégré à l’écran tactile doit être activé (Paramètres > Système > Serveur web).
      • \\n
      \\n
    2. \\n
    3. Connectez-vous à l’application Iddero Mobile en utilisant votre nom d’utilisateur et votre mot de passe idderocloud.

    4. \\n
    5. Mettez l’écran tactile en mode de liaison : accédez à Paramètres > Système > Accès à distance, puis appuyez sur Connecter.

    6. \\n
    7. Dans l’application Iddero Mobile, rendez-vous sur l’écran Mes dispositifs, appuyez sur le bouton Ajouter (+) et scannez le code QR affiché sur l’écran tactile Iddero.

    8. \\n
    9. En fonction de plusieurs facteurs, une boîte de dialogue de confirmation peut s’afficher sur l’écran tactile. Confirmez que vous souhaitez procéder à l’opération.

    10. \\n
    11. Le processus de liaison sera alors effectué. Une fois l’opération terminée, l’application reviendra à l’écran Mes dispositifs et la liste des dispositifs sera automatiquement mise à jour.

    12. \\n
    \\n\\n
    \\n\\n\\n

    Depuis l’écran tactile

    \\n\\n
      \\n
    1. Liste de contrôle:\\n
        \\n
      • La version du firmware de l’écran tactile Iddero doit être 4.5 ou ultérieure. Vous pouvez vérifier la version du firmware dans le menu Paramètres > Information.
      • \\n
      • La configuration du réseau de l’écran tactile doit être correcte, y compris l’adresse de la passerelle et les serveurs DNS. Vérifiez la configuration du réseau dans le menu Paramètres > Système > Réseau.
      • \\n
      • L’écran tactile doit être connecté à Internet.
      • \\n
      • Le serveur web intégré à l’écran tactile doit être activé (Paramètres > Système > Serveur web).
      • \\n
      \\n
    2. \\n
    3. Accédez à Paramètres > Système > Accès à distance, puis appuyez sur Connecter.

    4. \\n
    5. Appuyez sur l’icône du clavier.

    6. \\n
    7. Entrez l’e-mail et le mot de passe de votre compte idderocloud dans les champs « E-mail » et « Mot de passe », puis appuyez sur Connecter.

    8. \\n
    9. Le processus de liaison sera alors effectué. Une fois l’opération terminée, le dispositif apparaîtra dans la section « Mes dispositifs » de votre compte idderocloud.

    10. \\n
    \\n\\n
    \\n\\n\\n

    Depuis l’interface web du dispositif

    \\n\\n
      \\n
    1. Liste de contrôle:\\n
        \\n
      • La version du firmware du dispositif doit être 3.0 ou ultérieure. Vous pouvez vérifier la version du firmware dans le menu Paramètres > Information.
      • \\n
      • La configuration du réseau du dispositif doit être correcte, y compris l’adresse de la passerelle et les serveurs DNS. Vérifiez la configuration du réseau dans le menu Paramètres > Paramètres du système > Configuration du réseau.
      • \\n
      • Le dispositif doit être connecté à Internet.
      • \\n
      \\n
    2. \\n
    3. Connectez-vous à l’interface web du dispositif et accédez au menu Paramètres > Paramètres du système > Accès à distance.

    4. \\n
    5. Entrez l’e-mail et le mot de passe de votre compte idderocloud dans les champs « E-mail » et « Mot de passe », puis appuyez sur Connecter.

    6. \\n
    7. Le processus de liaison sera alors effectué. Une fois l’opération terminée, le dispositif apparaîtra dans la section « Mes dispositifs » de votre compte idderocloud.

    8. \\n
    \\n\\n\";","export default \"

    Hinzufügen neuer Geräte

    \\n\\n

    Das Hinzufügen eines Iddero Touch Panels oder eines Iddero Home Servers zu Ihrem Idderocloud Konto ist sehr einfach:

    \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    VERSO+IP / VERSO+IP 2 / VERSO INDOOR\\n Von der Iddero Mobile App\\n
    HC3-KNX / HC3L-KNXMehrere Optionen:\\n \\n
    HC2-KNX / HC2L-KNX / HC1i-KNX\\n Vom Web Interface des Gerätes\\n
    Iddero Home Server\\n Vom Web Interface des Gerätes\\n
    \\n\\n\\n

    Von der Iddero Mobile App

    \\n\\n
      \\n
    1. Checkliste:\\n
        \\n
      • Stellen Sie sicher, dass Sie im Besitz der neuesten Version der Iddero Mobile App (download vom App Store oder Google Play)
      • \\n
      • (HC3-KNX, HC3L-KNX) Die Firmware Stände der Iddero Touch Panels müssten Stand 4.5 oder neuer sein. Die Firmware Version können Sie unter Einstellungen > Information überprüfen.
      • \\n
      • Die Netzwerkseinstellugnen des Touch Panels müssen korrekt sein, ebenso die Gateway Adresse und DNS Servers. Prüfen Sie die Netzwerkseinstellugnen unter Einstellungen > System > Netzwerk.
      • \\n
      • Beides, Touch Panel und Smartpohone / Tablet auf dem die Iddero Mobile App läuft küssen mit dem Internet verbunden sein. Weiterhin muss bei allen Touch Panels (außer dem VERSO+IP 2 und dem VERSO INDOOR) die App und das Touch Panel im gleichen Local Area Network (LAN) sein.
      • \\n
      • (HC3-KNX, HC3L-KNX) Der im Touch Panel integrierte Web Server muss aktiviert bzw. enabled sein: (Einstellungen > System > Web-Server).
      • \\n
      \\n
    2. \\n
    3. Melden Sie sich in der Iddero Mobile App mit Ihrem Idderocloud Benutzername und Passwort an.

    4. \\n
    5. Setzen Sie das Touch Panel in Verbbindungsmodus: gehen Sie zu Einstellungen > System > Fernzugriff und betätigen Sie “Aktivieren“.

    6. \\n
    7. Gehen Sie in der Iddero Mobile App auf die Meine Geräte Seite, betätigen Sie (+) und scannen Sie den QR Code, der auf dem Touch Panel gezeigt wird.

    8. \\n
    9. Ein Bestätigungsdialog erscheint, abhängig von einigen Faktoren. Bestätigen Sie, dass Sie weiter machen wollen.

    10. \\n
    11. Der Verbindungsprozess wird ausgeführt. Wenn dieser vollständig ist, geht die App zur Meine Geräte Seite und die Geräteliste wird automatisch upgedated.

    12. \\n
    \\n\\n
    \\n\\n\\n

    Vom Touch Panel

    \\n\\n
      \\n
    1. Checkliste:\\n
        \\n
      • Die Firmware Stände der Iddero Touch Panels müssten Stand 4.5 oder neuer sein. Die Firmware Version können Sie unter Einstellungen > Information überprüfen.
      • \\n
      • Die Netzwerkseinstellugnen des Touch Panels müssen korrekt sein, ebenso die Gateway Adresse und DNS Servers. Prüfen Sie die Netzwerkseinstellugnen unter Einstellungen > System > Netzwerk.
      • \\n
      • Das Touch Panel muss mit dem Internet verbunden sein.
      • \\n
      • Der im Touch Panel integrierte Web Server muss aktiviert bzw. enabled sein: (Einstellungen > System > Web-Server).
      • \\n
      \\n
    2. \\n
    3. Gehen Sie zu Einstellungen > System > Fernzugriff und betätigen Sie “Aktivieren“.

    4. \\n
    5. Betätigen Sie das Tastatursymbol.

    6. \\n
    7. Füllen Sie die Felder E-Mail und Passwort mit Ihrer E-Mailadresse und Ihrem Passwort der Idderoclaud aus, und betätigen Sie “Aktivieren“.

    8. \\n
    9. Der Verbindungsprozess wird ausgeführt. Nach dessen Beendigung finden Sie das neue Gerät unter “Meine Geräte” in Ihrem Idderocloud Konto.

    10. \\n
    \\n\\n
    \\n\\n\\n

    Vom Web Interface des Gerätes

    \\n\\n
      \\n
    1. Checkliste:\\n
        \\n
      • Die Firmware Stände der Iddero Geräte müssten Stand 3.0 oder neuer sein. Die Firmware Version können Sie unter Einstellungen > Information überprüfen.
      • \\n
      • Die Netzwerkseinstellugnen des Geräte müssen korrekt sein, ebenso die Gateway Adresse und DNS Servers. Prüfen Sie die Netzwerkseinstellugnen unter Einstellungen > Systemeinstellungen > Netzkonfiguration.
      • \\n
      • Das Gerät muss mit dem Internet verbunden sein.
      • \\n
      \\n
    2. \\n
    3. Melden Sie sich am Web Interface des Gerätes an und gehen Sie zu Einstellungen > Systemeinstellungen > Fernzugriff.

    4. \\n
    5. Füllen Sie die Felder E-Mail und Passwort mit Ihrer E-Mailadresse und Ihrem Passwort der Idderoclaud aus, und betätigen Sie “Aktivieren“.

    6. \\n
    7. Der Verbindungsprozess wird ausgeführt. Nach dessen Beendigung finden Sie das neue Gerät unter “Meine Geräte” in Ihrem Idderocloud Konto.

    8. \\n
    \\n\";","export default \"

    Adding new devices

    \\n\\n

    Adding a new eTouch touch panel to your eTouchCloud account is very easy:

    \\n\\n\\n\\n\\n

    From the eTouch App

    \\n\\n
      \\n
    1. Checklist:\\n
        \\n
      • Make sure you are using the latest version of eTouch App (download from App Store or Google Play)
      • \\n
      • The touch panel's network settings must be correct, including gateway address and DNS servers. Verify the network settings in the Settings > System > Network menu.
      • \\n
      • Both the touch panel and the smartphone or tablet running eTouch App must be connected to the Internet.
      • \\n
      • (TP70xx / TP10xx) The touch panel's embedded web server must be enabled (Settings > System > Web server).
      • \\n
      \\n
    2. \\n
    3. Log into eTouch App using your eTouchCloud username and password.

    4. \\n
    5. Put the touch panel in Link mode: go to Settings > System > Remote access, then tap Link.

    6. \\n
    7. In eTouch App, go to the My Devices screen, tap the Add (+) button and scan the QR code shown in the eTouch touch panel.

    8. \\n
    9. The linking process will then be performed. Once the process is complete, the app will return to the My Devices screen, and the device list will be updated automatically.

    10. \\n
    \\n\\n
    \\n\\n\\n

    From the touch panel (TP70xx / TP10xx only)

    \\n\\n
      \\n
    1. Checklist:\\n
        \\n
      • The touch panel's network settings must be correct, including gateway address and DNS servers. Verify the network settings in the Settings > System > Network menu.
      • \\n
      • The touch panel must be connected to the Internet.
      • \\n
      • The touch panel's embedded web server must be enabled (Settings > System > Web server).
      • \\n
      \\n
    2. \\n
    3. Go to Settings > System > Remote access, then tap Link.

    4. \\n
    5. Tap the keyboard icon.

    6. \\n
    7. Fill in the “E-mail” and “Password” fields with the e-mail address and password of your eTouchCloud account, then tap Link.

    8. \\n
    9. The linking process will then be performed. Once the process is complete, the device will show up in the “My devices” section of your eTouchCloud account.

    10. \\n
    \\n\";","export default \"

    Añadir nuevos dispositivos

    \\n\\n

    Añadir una nueva pantalla táctil eTouch a tu cuenta eTouchCloud es muy fácil. Sólo tienes que seguir los pasos que te indicamos a continuación:

    \\n\\n\\n\\n\\n

    Desde la app eTouch App

    \\n\\n
      \\n
    1. Comprobaciones previas:\\n
        \\n
      • Asegúrate de tener instalada la app eTouch App (disponible en la App Store o en Google Play)
      • \\n
      • La configuración de red de la pantalla táctil eTouch debe ser correcta, incluyendo la configuración de la puerta de enlace y servidores DNS. Puedes verificar la configuración de red accediendo al menú Ajustes > Sistema > Configuración de red.
      • \\n
      • Tanto la pantalla táctil como el smartphone o tablet en el que está instalada la app eTouch App deben estar conectados a Internet.
      • \\n
      • (TP70xx / TP10xx) El servidor web de la pantalla debe estar habilitado (Ajustes > Sistema > Servidor web).
      • \\n
      \\n
    2. \\n
    3. Inicia sesión en la app eTouch App con los datos de tu cuenta eTouchCloud.

    4. \\n
    5. Pon la pantalla táctil en modo vinculación. Para ello, entra en la página Ajustes > Sistema > Acceso remoto y pulsa Vincular.

    6. \\n
    7. En la app eTouch App, en la pantalla Mis dispositivos, pulsa el botón Añadir (+) y escanea el código QR que se muestra en la pantalla táctil eTouch.

    8. \\n
    9. A continuación se realizará la vinculación. Una vez completado el proceso, en la app volverá a mostrarse la pantalla Mis dispositivos, y el listado de dispositivos se actualizará automáticamente.

    10. \\n
    \\n\\n
    \\n\\n\\n

    Desde la pantalla táctil (sólo TP70xx / TP10xx)

    \\n\\n
      \\n
    1. Comprobaciones previas:\\n
        \\n
      • La configuración de red de la pantalla táctil eTouch debe ser correcta, incluyendo la configuración de la puerta de enlace y servidores DNS. Puedes verificar la configuración de red accediendo al menú Ajustes > Sistema > Configuración de red.
      • \\n
      • La pantalla debe estar conectada a Internet.
      • \\n
      • El servidor web de la pantalla debe estar habilitado (Ajustes > Sistema > Servidor web).
      • \\n
      \\n
    2. \\n
    3. Entra en la página Ajustes > Sistema > Acceso remoto y pulsa Vincular.

    4. \\n
    5. Pulsa sobre el icono del teclado.

    6. \\n
    7. Introduce el email y la contraseña de tu cuenta eTouchCloud en los campos “E-mail” y “Contraseña”, y pulsa Vincular.

    8. \\n
    9. A continuación se realizará la vinculación. Una vez completado el proceso, el dispositivo aparecerá en la página “Mis dispositivos” en tu cuenta eTouchCloud.

    10. \\n
    \\n\";","export default \"

    Ajouter un nouveau dispositif

    \\n

    Ajouter un nouvel écran tactile eTouch à votre compte eTouchCloud est très simple. Il suffit de suivre les étapes suivantes :

    \\n\\n\\n\\n\\n

    Depuis l’application eTouch App

    \\n\\n
      \\n
    1. Liste de contrôle:\\n
        \\n
      • Assurez-vous d’utiliser la dernière version de l’application eTouch App (téléchargeable depuis l’ App Store ou Google Play)
      • \\n
      • La configuration du réseau de l’écran tactile doit être correcte, y compris l’adresse de la passerelle et les serveurs DNS. Vérifiez la configuration du réseau dans le menu Paramètres > Système > Réseau.
      • \\n
      • L’écran tactile et le smartphone ou la tablette exécutant l’application eTouch App doivent être connectés à Internet.
      • \\n
      • (TP70xx / TP10xx) Le serveur web intégré à l’écran tactile doit être activé (Paramètres > Système > Serveur web).
      • \\n
      \\n
    2. \\n
    3. Connectez-vous à l’application eTouch App en utilisant votre nom d’utilisateur et votre mot de passe eTouchCloud.

    4. \\n
    5. Mettez l’écran tactile en mode de liaison : accédez à Paramètres > Système > Accès à distance, puis appuyez sur Connecter.

    6. \\n
    7. Dans l’application eTouch App, rendez-vous sur l’écran Mes dispositifs, appuyez sur le bouton Ajouter (+) et scannez le code QR affiché sur l’écran tactile eTouch.

    8. \\n
    9. Le processus de liaison sera alors effectué. Une fois l’opération terminée, l’application reviendra à l’écran Mes dispositifs et la liste des dispositifs sera automatiquement mise à jour.

    10. \\n
    \\n\\n
    \\n\\n\\n

    Depuis l’écran tactile (TP70xx / TP10xx)

    \\n\\n
      \\n
    1. Liste de contrôle:\\n
        \\n
      • La configuration du réseau de l’écran tactile doit être correcte, y compris l’adresse de la passerelle et les serveurs DNS. Vérifiez la configuration du réseau dans le menu Paramètres > Système > Réseau.
      • \\n
      • L’écran tactile doit être connecté à Internet.
      • \\n
      • Le serveur web intégré à l’écran tactile doit être activé (Paramètres > Système > Serveur web).
      • \\n
      \\n
    2. \\n
    3. Accédez à Paramètres > Système > Accès à distance, puis appuyez sur Connecter.

    4. \\n
    5. Appuyez sur l’icône du clavier.

    6. \\n
    7. Entrez l’e-mail et le mot de passe de votre compte eTouchCloud dans les champs « E-mail » et « Mot de passe », puis appuyez sur Connecter.

    8. \\n
    9. Le processus de liaison sera alors effectué. Une fois l’opération terminée, le dispositif apparaîtra dans la section « Mes dispositifs » de votre compte eTouchCloud.

    10. \\n
    \\n\";","export default \"

    Hinzufügen neuer Geräte

    \\n\\n

    Das Hinzufügen eines eTouch Touch Panels zu Ihrem eTouchCloud Konto ist sehr einfach:

    \\n\\n\\n\\n\\n

    Von der eTouch App

    \\n\\n
      \\n
    1. Checkliste:\\n
        \\n
      • Stellen Sie sicher, dass Sie im Besitz der neuesten Version der eTouch App (download vom App Store oder Google Play)
      • \\n
      • Die Netzwerkseinstellugnen des Touch Panels müssen korrekt sein, ebenso die Gateway Adresse und DNS Servers. Prüfen Sie die Netzwerkseinstellugnen unter Einstellungen > System > Netzwerk.
      • \\n
      • Beides, Touch Panel und Smartpohone / Tablet auf dem die eTouch App läuft küssen mit dem Internet verbunden sein.
      • \\n
      • (TP70xx / TP10xx) Der im Touch Panel integrierte Web Server muss aktiviert bzw. enabled sein: (Einstellungen > System > Web-Server).
      • \\n
      \\n
    2. \\n
    3. Melden Sie sich in der eTouch App mit Ihrem eTouchCloud Benutzername und Passwort an.

    4. \\n
    5. Setzen Sie das Touch Panel in Verbbindungsmodus: gehen Sie zu Einstellungen > System > Fernzugriff und betätigen Sie “Aktivieren“.

    6. \\n
    7. Gehen Sie in der eTouch App auf die Meine Geräte Seite, betätigen Sie (+) und scannen Sie den QR Code, der auf dem Touch Panel gezeigt wird.

    8. \\n
    9. Der Verbindungsprozess wird ausgeführt. Wenn dieser vollständig ist, geht die App zur Meine Geräte Seite und die Geräteliste wird automatisch upgedated.

    10. \\n
    \\n\\n
    \\n\\n\\n

    Vom Touch Panel (nur TP70xx / TP10xx)

    \\n\\n
      \\n
    1. Checkliste:\\n
        \\n
      • Die Netzwerkseinstellugnen des Touch Panels müssen korrekt sein, ebenso die Gateway Adresse und DNS Servers. Prüfen Sie die Netzwerkseinstellugnen unter Einstellungen > System > Netzwerk.
      • \\n
      • Das Touch Panel muss mit dem Internet verbunden sein.
      • \\n
      • Der im Touch Panel integrierte Web Server muss aktiviert bzw. enabled sein: (Einstellungen > System > Web-Server).
      • \\n
      \\n
    2. \\n
    3. Gehen Sie zu Einstellungen > System > Fernzugriff und betätigen Sie “Aktivieren“.

    4. \\n
    5. Betätigen Sie das Tastatursymbol.

    6. \\n
    7. Füllen Sie die Felder E-Mail und Passwort mit Ihrer E-Mailadresse und Ihrem Passwort der Idderoclaud aus, und betätigen Sie “Aktivieren“.

    8. \\n
    9. Der Verbindungsprozess wird ausgeführt. Nach dessen Beendigung finden Sie das neue Gerät unter “Meine Geräte” in Ihrem eTouchCloud Konto.

    10. \\n
    \\n\";","import { getQueryParam } from \"../utils\";\nimport styles from \"./OfflinePage.module.scss\";\nimport { useEffect, useState } from \"react\";\n\n// testing url: http://localhost:3000/offline?domain=1c5d620326bddfe2.idderocloud.com&where=be\n// If pk_where is present in the query string, then we are being\n// shown inside a pagekite.net frame. Redirect to a non-framed page.\n// Note: This should not happen anymore after the changes introduced\n// by PK on Nov 2017 (see #1726)\nexport function OfflinePage() {\n const [status, setStatus] = useState(\"\");\n const [cloudId, setCloudId] = useState(\"\");\n\n useEffect(() => {\n const pkWhere = getQueryParam(\"pk_where\");\n if (pkWhere) {\n const pkDomain = getQueryParam(\"pk_domain\", \"\");\n window.parent.location = `${process.env.REACT_APP_BASE_URL}/offline?domain=${pkDomain}&where=${pkWhere}`;\n return;\n }\n\n const domain = getQueryParam(\"domain\", \"\");\n const where = getQueryParam(\"where\", \"\");\n const cloudId = domain.split(\".\")[0] || \"unspecified\";\n const status =\n where.toLowerCase() === \"be\"\n ? \"Device is available, but not responding\"\n : \"Device is offline\";\n\n setCloudId(cloudId);\n setStatus(status);\n }, []);\n\n return (\n
    \n \n \"logo\"\n \n

    \n

    Cloud ID: {cloudId}
    \n
    {status}
    \n

    \n
    \n );\n}\n","import React, { useState, useEffect, useCallback } from \"react\";\nimport { StatusPage } from \".\";\nimport { useFormatMessage } from \"../i18n\";\nimport { useDispatch } from \"react-redux\";\nimport { confirmSignUp } from \"../redux/auth-slice\";\nimport { redirectToLogin } from \"../services/auth-service\";\nimport { getQueryParam } from \"../utils\";\n\nexport function ConfirmSignUpPage() {\n const tr = useFormatMessage();\n const dispatch = useDispatch();\n const confirmation_code = getQueryParam(\"cpcode\");\n const [message, setMessage] = useState(\"\");\n const [variant, setVariant] = useState(\"\");\n\n const handleSubmit = useCallback(\n async (confirmation_code) => {\n const data = await dispatch(confirmSignUp({ confirmation_code }));\n\n if (data.meta.requestStatus === \"fulfilled\") {\n setMessage(\n tr(\n \"everything_is_ok_just_click_on_the_confirmation_button_to_login_with_your_user_account\"\n )\n );\n setVariant(\"success\");\n } else {\n setVariant(\"error\");\n setMessage(tr(\"sorry_but_your_user_cannot_be_enabled\"));\n }\n },\n [dispatch, tr]\n );\n\n useEffect(() => {\n if (confirmation_code) {\n handleSubmit(confirmation_code);\n } else {\n redirectToLogin();\n }\n }, [confirmation_code, handleSubmit]);\n\n return (\n <>\n \n \n );\n}\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { StatusPage } from \".\";\nimport { useFormatMessage } from \"../i18n\";\nimport { useDispatch } from \"react-redux\";\nimport { confirmForgotPassword } from \"../redux/auth-slice\";\nimport { redirectToLogin } from \"../services/auth-service\";\nimport { getQueryParam } from \"../utils\";\n\nexport function ConfirmForgotPasswordPage() {\n const tr = useFormatMessage();\n const dispatch = useDispatch();\n const [message, setMessage] = useState(\"\");\n const [variant, setVariant] = useState(\"\");\n const confirmation_code = getQueryParam(\"cpcode\");\n\n const handleSubmit = useCallback(\n async (confirmation_code) => {\n const data = await dispatch(confirmForgotPassword({ confirmation_code }));\n\n if (data.meta.requestStatus === \"fulfilled\") {\n setMessage(tr(\"this_is_your_new_password\") + data.payload.new_password);\n setVariant(\"success\");\n } else {\n setVariant(\"error\");\n setMessage(tr(\"sorry_but_we_cannot_change_your_password\"));\n }\n },\n [dispatch, tr]\n );\n\n useEffect(() => {\n if (confirmation_code) {\n handleSubmit(confirmation_code);\n } else {\n redirectToLogin();\n }\n }, [confirmation_code, handleSubmit]);\n\n return (\n <>\n \n \n );\n}\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { StatusPage } from \".\";\nimport { useFormatMessage } from \"../i18n\";\nimport { useDispatch } from \"react-redux\";\nimport { confirmDeleteUser, logout } from \"../redux/auth-slice\";\nimport { redirectToLogin } from \"../services/auth-service\";\nimport { getQueryParam } from \"../utils\";\n\nexport function ConfirmDeletePage() {\n const tr = useFormatMessage();\n const dispatch = useDispatch();\n const [message, setMessage] = useState(\"\");\n const [variant, setVariant] = useState(\"\");\n const confirmation_code = getQueryParam(\"cpcode\");\n\n const handleSubmit = useCallback(\n async (confirmation_code) => {\n const data = await dispatch(confirmDeleteUser({ confirmation_code }));\n\n if (data.meta.requestStatus === \"fulfilled\") {\n dispatch(logout());\n setMessage(tr(\"we_confirm_your_account_has_been_deleted\"));\n setVariant(\"success\");\n } else {\n setVariant(\"error\");\n setMessage(tr(\"sorry_but_we_cannot_confirm_your_account_deletion\"));\n }\n },\n [dispatch, tr]\n );\n\n useEffect(() => {\n if (confirmation_code) {\n handleSubmit(confirmation_code);\n } else {\n redirectToLogin();\n }\n }, [confirmation_code, handleSubmit]);\n\n return (\n <>\n \n \n );\n}\n","var _path, _path2, _path3, _g, _defs;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgAmazonAlexaBlueLogo(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 63,\n height: 63,\n viewBox: \"0 0 63 63\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#clip0_19_210)\"\n }, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M31.4986 0C14.1025 0 -0.000244141 14.1033 -0.000244141 31.5C-0.000244141 47.473 11.8885 60.6676 27.2991 62.7208V56.3735C27.2991 54.5836 26.1703 52.9747 24.4737 52.4059C15.5822 49.4192 9.22154 40.9197 9.45562 30.9688C9.74085 18.8538 19.609 9.32885 31.726 9.45097C43.7987 9.57309 53.548 19.398 53.548 31.5C53.548 31.7758 53.5412 32.0503 53.531 32.3235C53.5286 32.3846 53.5267 32.446 53.5243 32.5075C53.5126 32.7611 53.4971 33.0144 53.4772 33.2662C53.4709 33.3463 53.4632 33.4262 53.4559 33.5057C53.4404 33.6817 53.4224 33.8559 53.4026 34.03C53.3803 34.2284 53.3546 34.4248 53.3269 34.6207C53.3148 34.71 53.3027 34.7996 53.2891 34.8885C50.5895 52.6718 27.4286 62.667 27.3017 62.7213C28.675 62.904 30.0757 63 31.4986 63C48.895 63 62.9975 48.8971 62.9975 31.5C62.9975 14.1033 48.895 0 31.4986 0Z\",\n fill: \"#5FCAF4\"\n })), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask0_19_210\",\n style: {\n maskType: \"luminance\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 0,\n y: 0,\n width: 63,\n height: 63\n }, _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0.000244141 63H62.9809V0H0.000244141V63Z\",\n fill: \"white\"\n }))), /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask0_19_210)\"\n }, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask1_19_210\",\n style: {\n maskType: \"luminance\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: -1,\n y: 0,\n width: 64,\n height: 63\n }, _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.4986 0C14.1025 0 -0.000244141 14.1033 -0.000244141 31.5C-0.000244141 47.473 11.8885 60.6676 27.2991 62.7208V56.3735C27.2991 54.5836 26.1703 52.9747 24.4737 52.4059C15.5822 49.4192 9.22154 40.9197 9.45562 30.9688C9.74085 18.8538 19.609 9.32885 31.726 9.45097C43.7987 9.57309 53.548 19.398 53.548 31.5C53.548 31.7758 53.5412 32.0503 53.531 32.3235C53.5286 32.3846 53.5267 32.446 53.5243 32.5075C53.5126 32.7611 53.4971 33.0144 53.4772 33.2662C53.4709 33.3463 53.4632 33.4262 53.4559 33.5057C53.4404 33.6817 53.4224 33.8559 53.4026 34.03C53.3803 34.2284 53.3546 34.4248 53.3269 34.6207C53.3148 34.71 53.3027 34.7996 53.2891 34.8885C50.5895 52.6718 27.4286 62.667 27.3017 62.7213C28.675 62.904 30.0757 63 31.4986 63C48.895 63 62.9975 48.8971 62.9975 31.5C62.9975 14.1033 48.895 0 31.4986 0Z\",\n fill: \"white\"\n }))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#mask1_19_210)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M-4.78247 67.7803H67.78V-4.78025H-4.78247V67.7803Z\",\n fill: \"#5FCAF4\"\n }))))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"clip0_19_210\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n width: 63,\n height: 63,\n fill: \"white\"\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgAmazonAlexaBlueLogo);\nexport default __webpack_public_path__ + \"static/media/Amazon_Alexa_blue_logo.0ab5342d.svg\";\nexport { ForwardRef as ReactComponent };","import styles from \"./AuthorizePage.module.scss\";\nimport loginStyles from \"./LoginPage.module.scss\";\nimport sharedStyles from \"../shared.module.scss\";\nimport { useFormik } from \"formik\";\nimport { useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Button, Link } from \"../components\";\nimport { useFormatMessage } from \"../i18n\";\nimport { initLogin, getLoginState, authorizeApp } from \"../redux/auth-slice\";\nimport {\n validateForm,\n getErrorMsg,\n isValid,\n} from \"../services/validation-service\";\nimport { ValidatedInput } from \"./components\";\nimport { loginValidation } from \"../shared/validation\";\nimport cn from \"classnames\";\nimport { scrollToFirstValidationError } from \"../utils\";\nimport { useDispatch } from \"react-redux\";\nimport { ReactComponent as AmazonAlexaLogo } from \"../assets/icons/Amazon_Alexa_blue_logo.svg\";\nimport { useEffect } from \"react\";\n\nexport function AuthorizePage() {\n const [pristine, setPristine] = useState(true);\n const dispatch = useDispatch();\n\n const tr = useFormatMessage();\n\n useEffect(() => {\n dispatch(initLogin());\n }, [dispatch]);\n\n const { loginInProgress, loginFailed, invalidCredentials } =\n useSelector(getLoginState);\n\n const searchParams = new URLSearchParams(window.location.search);\n\n const authorizationParams = [...searchParams.entries()].reduce(\n (parameters, [parameter, value]) => {\n return {\n ...parameters,\n [parameter]: value,\n };\n },\n {}\n );\n\n const formik = useFormik({\n initialValues: {\n ...authorizationParams,\n email: \"\",\n password: \"\",\n },\n onSubmit: async (values) => {\n setPristine(false);\n if (isValid(validationErrors)) {\n const data = await dispatch(\n authorizeApp({\n ...authorizationParams,\n username: values.email,\n password: values.password,\n })\n );\n if (data.meta.requestStatus === \"fulfilled\") {\n window.location.href = data.payload.location;\n }\n } else {\n scrollToFirstValidationError();\n }\n },\n });\n\n const validationErrors = validateForm(\n { form: formik.values },\n loginValidation\n );\n\n const emailErrorMsg = getErrorMsg(validationErrors, \"email\");\n const passErrorMsg = getErrorMsg(validationErrors, \"password\");\n\n return (\n
    \n
    \n

    \n {tr(\"connect_with_alexa_title\")}\n

    \n
    \n \n
    \n
    \n {tr(\"connect_with_alexa_brief\")}\n
    \n \n \n \n
    \n \n {tr(\"i_have_lost_my_password\")}\n \n
    \n
    \n
    \n \n
    \n \n {loginFailed && (\n

    \n {invalidCredentials\n ? tr(\"invalid_credentials\")\n : tr(\"something_went_wrong\")}\n

    \n )}\n \n );\n}\n","import { useSelector } from \"react-redux\";\nimport { IntlProvider } from \"react-intl\";\nimport { Switch, Route, useLocation, Redirect } from \"react-router-dom\";\nimport cn from \"classnames\";\nimport {\n PasswordRecoveryPage,\n LoginPage,\n SignUpPage,\n MyDevicesPage,\n DeviceSettings,\n UserSettingsPage,\n HelpPage,\n OfflinePage,\n ConfirmSignUpPage,\n ConfirmForgotPasswordPage,\n ConfirmDeletePage,\n AuthorizePage,\n} from \"./pages\";\nimport { Header, Footer, PrivateRoute } from \"./components\";\nimport { getLocaleMessages } from \"./i18n\";\nimport { getLocale } from \"./redux/settings-slice\";\nimport styles from \"./App.module.scss\";\nimport { useEffect } from \"react\";\nimport { oemValues } from \"./constants/oem\";\n\nconst DEFUAULT_LOCALE = \"en\";\n\nfunction isPublicRoute(route) {\n return [\n \"/login\",\n \"/signup\",\n \"/terms-and-conditions\",\n \"/confirm_signup\",\n \"/password-recovery\",\n \"/help\",\n \"/authorize\",\n ].includes(route);\n}\n\nfunction App() {\n const currentLocale = useSelector(getLocale);\n const messages = getLocaleMessages(currentLocale);\n const location = useLocation();\n const isPublic = isPublicRoute(location.pathname);\n\n useEffect(() => {\n if (isPublic) {\n document.body.classList.remove(styles.privateBackground);\n } else {\n document.body.classList.add(styles.privateBackground);\n }\n }, [isPublic]);\n\n return (\n \n \n \n \n \n \n \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {oemValues.voiceControl ? (\n \n ) : (\n \n )}\n \n \n \n \n \n \n \n \n
    \n
    \n
    \n \n
    \n
    \n \n );\n}\n\nexport default App;\n","import { createSlice, createAsyncThunk } from \"@reduxjs/toolkit\";\nimport * as api from \"../api/idderocloud-api\";\nimport { oemValues } from \"../constants/oem\";\nimport { logout } from \"./auth-slice\";\nimport { getUserDevices } from \"./devices-slice\";\n\nexport const refreshDeviceStatus = createAsyncThunk(\n \"voice/refreshDeviceStatus\",\n async (cloudId, { rejectWithValue }) => {\n try {\n const status = await api.refreshDevice(cloudId);\n return status;\n } catch (err) {\n return rejectWithValue(err);\n }\n },\n {\n condition: (cloudId, { getState }) => {\n // do not emit more requests if previous is still in progress\n // https://redux-toolkit.js.org/api/createAsyncThunk#canceling-before-execution\n const state = getState();\n if (state.voiceControl.devices[cloudId].status === \"checking\")\n return false;\n },\n }\n);\n\nexport const getControls = createAsyncThunk(\n \"voiceControl/getControls\",\n async (cloudId, { rejectWithValue }) => {\n try {\n const controls = await api.getControls(cloudId);\n return { cloudId, controls: controls.controls, zones: controls.zones };\n } catch (err) {\n return rejectWithValue(err);\n }\n },\n {\n condition: (cloudId, { getState }) => {\n const state = getState();\n if (state.voiceControl.devices[cloudId].loading) return false;\n },\n }\n);\n\nexport const addControl = createAsyncThunk(\n \"voiceControl/addControl\",\n async (deviceControl, { rejectWithValue }) => {\n try {\n const { cloudId, control } = deviceControl;\n const newControl = {\n ...JSON.parse(deviceControl.control.component),\n friendly_name: control.name,\n type: control.type,\n };\n await api.saveControl({ cloudId: cloudId, control: newControl });\n return { cloudId, newControl };\n } catch (err) {\n return rejectWithValue(err);\n }\n },\n {\n condition: (_, { getState }) => {\n const state = getState();\n if (state.voiceControl.addInProgress) return false;\n },\n }\n);\n\nexport const deleteControl = createAsyncThunk(\n \"voiceControl/deleteControl\",\n async (deviceControl, { rejectWithValue }) => {\n try {\n await api.deleteControl(deviceControl);\n } catch (err) {\n return rejectWithValue(err);\n }\n },\n {\n condition: (_, { getState }) => {\n const state = getState();\n if (state.voiceControl.deleteInProgress) return false;\n },\n }\n);\n\nexport const deleteControls = createAsyncThunk(\n \"voiceControl/deleteControls\",\n async (cloudId, { rejectWithValue }) => {\n try {\n await api.deleteControls(cloudId);\n } catch (err) {\n return rejectWithValue(err);\n }\n },\n {\n condition: (_, { getState }) => {\n const state = getState();\n if (state.voiceControl.deleteInProgress) return false;\n },\n }\n);\n\nfunction unselectedDevice() {\n return { status: \"unselected\", configured: [], not_configured: [] };\n}\n\nfunction getInitialState() {\n return {\n selected: unselectedDevice(),\n addInProgress: false,\n deleteInProgress: false,\n error: false,\n devices: {},\n };\n}\n\nfunction getVoiceCompatibleDevices(devices) {\n return devices\n ?.filter((device) => oemValues.voiceCompatible.includes(device.model))\n .reduce(\n (deviceList, device) => ({\n ...deviceList,\n [device.cloudId]: {\n status: \"\",\n loading: false,\n loaded: false,\n error: null,\n configured: [],\n not_configured: [],\n zones: [],\n },\n }),\n {}\n );\n}\n\nfunction getEditInitialState() {\n return {\n error: false,\n addInProgress: false,\n deleteInProgress: false,\n };\n}\n\nconst initialState = getInitialState();\n\nexport const voiceControlSlice = createSlice({\n name: \"voiceControl\",\n initialState,\n reducers: {\n selectDevice: (state, action) => {\n state.selected = action.payload ? action.payload : unselectedDevice();\n },\n initEdit: (state) => {\n Object.assign(state, getEditInitialState());\n },\n },\n extraReducers: (builder) => {\n builder.addCase(getControls.pending, (state, action) => {\n state.devices[action.meta.arg].loading = true;\n });\n builder.addCase(getControls.fulfilled, (state, action) => {\n const { cloudId, controls, zones } = action.payload;\n state.devices[cloudId] = {\n ...state.devices[cloudId],\n configured: controls.filter((component) =>\n component.hasOwnProperty(\"type\")\n ),\n not_configured: controls.filter(\n (component) => !component.hasOwnProperty(\"type\")\n ),\n zones,\n loading: false,\n loaded: true,\n };\n if (!zones.length) {\n state.devices[cloudId].status = \"empty\";\n }\n });\n builder.addCase(getControls.rejected, (state, action) => {\n state.devices[action.meta.arg].loading = false;\n state.devices[action.meta.arg].loaded = false;\n state.devices[action.meta.arg].status = \"generic_error\";\n if (action.payload.type) {\n state.devices[action.meta.arg].error = action.payload.type;\n }\n });\n builder.addCase(addControl.pending, (state) => {\n state.addInProgress = true;\n });\n builder.addCase(addControl.fulfilled, (state, action) => {\n const { cloudId, newControl } = action.payload;\n const controlIndex = state.devices[cloudId].configured.findIndex(\n (controls) => controls.id === newControl.id\n );\n controlIndex !== -1\n ? (state.devices[cloudId].configured[controlIndex] = newControl)\n : (state.devices[cloudId].configured = [\n ...state.devices[cloudId].configured,\n newControl,\n ]);\n state.devices[cloudId].not_configured = state.devices[\n cloudId\n ].not_configured.filter((controls) => controls.id !== newControl.id);\n state.addInProgress = false;\n });\n builder.addCase(addControl.rejected, (state, action) => {\n state.error = true;\n state.addInProgress = false;\n if (action.payload.type) {\n state.devices[action.meta.arg.cloudId].error = action.payload.type;\n }\n });\n builder.addCase(refreshDeviceStatus.pending, (state, action) => {\n state.devices[action.meta.arg].status = \"checking\";\n });\n builder.addCase(refreshDeviceStatus.fulfilled, (state, action) => {\n state.devices[action.meta.arg].status = action.payload.status;\n });\n builder.addCase(refreshDeviceStatus.rejected, (state, action) => {\n state.devices[action.meta.arg].status = \"generic_error\";\n if (action.payload.type) {\n state.devices[action.meta.arg].error = action.payload.type;\n }\n });\n builder.addCase(deleteControl.pending, (state) => {\n state.deleteInProgress = true;\n });\n builder.addCase(deleteControl.fulfilled, (state, action) => {\n state.error = false;\n state.deleteInProgress = false;\n const component = state.devices[action.meta.arg.cloudId].configured.find(\n (control) => control.id === action.meta.arg.controlId\n );\n const configured = state.devices[action.meta.arg.cloudId].configured;\n state.devices[action.meta.arg.cloudId].configured = configured.filter(\n (control) => control.id !== action.meta.arg.controlId\n );\n state.devices[action.meta.arg.cloudId].not_configured = [\n ...state.devices[action.meta.arg.cloudId].not_configured,\n component,\n ];\n });\n builder.addCase(deleteControl.rejected, (state, action) => {\n state.error = true;\n state.deleteInProgress = false;\n if (action.payload.type) {\n state.devices[action.meta.arg.cloudId].error = action.payload.type;\n }\n });\n builder.addCase(deleteControls.pending, (state) => {\n state.deleteInProgress = true;\n });\n builder.addCase(deleteControls.fulfilled, (state, action) => {\n state.deleteInProgress = false;\n state.devices[action.meta.arg].status = \"\";\n });\n builder.addCase(deleteControls.rejected, (state, action) => {\n state.deleteInProgress = false;\n state.devices[action.meta.arg].status = \"generic_error\";\n });\n builder.addCase(logout.fulfilled, () => {\n return { ...getInitialState() };\n });\n builder.addCase(getUserDevices.fulfilled, (state, action) => {\n state.devices = {\n ...getVoiceCompatibleDevices(action.payload),\n ...state.devices,\n };\n });\n },\n});\n\nexport const { selectDevice, initEdit } = voiceControlSlice.actions;\n\nexport const getError = (state) => state.voiceControl.error;\nexport const getSelectedDeviceData = (state) => {\n return {\n ...state.voiceControl.selected,\n ...state.voiceControl.devices[state.voiceControl.selected.cloudId],\n };\n};\nexport const getDeviceVoiceData = (cloudId) => (state) =>\n state.voiceControl.devices[cloudId];\n\nexport const getInProgressState = ({ voiceControl }) => {\n return {\n addInProgress: voiceControl.addInProgress,\n deleteInProgress: voiceControl.deleteInProgress,\n };\n};\n\nexport const voiceControlReducer = voiceControlSlice.reducer;\n","import { configureStore } from \"@reduxjs/toolkit\";\nimport { authReducer } from \"./auth-slice\";\nimport { devicesReducer } from \"./devices-slice\";\nimport { settingsReducer } from \"./settings-slice\";\nimport { voiceControlReducer } from \"./voiceControl-slice\";\n\nexport const store = configureStore({\n reducer: {\n auth: authReducer,\n devices: devicesReducer,\n settings: settingsReducer,\n voiceControl: voiceControlReducer,\n },\n});\n","const redirects = {\n \"/app/#/register\": \"/signup\",\n \"/app/#/passreco\": \"/password-recovery\",\n};\n\nfunction getMatchingRedirect(path) {\n const [, dest] =\n Object.entries(redirects).find(([source]) => path.indexOf(source) === 0) ||\n [];\n return dest;\n}\n\nexport function redirectFromOldUrls() {\n const { pathname, hash } = window.location;\n const path = pathname + hash;\n const redirect = getMatchingRedirect(path);\n if (!redirect) return;\n window.location = redirect;\n}\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport \"./index.scss\";\nimport App from \"./App\";\nimport { store } from \"./redux/store\";\nimport { redirectFromOldUrls } from \"./services/redirect-service\";\nimport { Provider } from \"react-redux\";\nimport { ErrorBoundary, ScrollToTop } from \"./components\";\n\nredirectFromOldUrls();\n\nReactDOM.render(\n \n \n \n \n \n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n"],"sourceRoot":""}