{"version":3,"file":"index-DdV9h7HG.js","sources":["../../../SkandiaMaklarna.Web.Frontend/node_modules/friendly-challenge/index.js"],"sourcesContent":["// Adapted from the base64-arraybuffer package implementation\n// (https://github.com/niklasvh/base64-arraybuffer, MIT licensed)\nconst CHARS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nconst EQ_CHAR = \"=\".charCodeAt(0);\n// Use a lookup table to find the index.\nconst lookup = new Uint8Array(256);\nfor (let i = 0; i < CHARS.length; i++) {\n lookup[CHARS.charCodeAt(i)] = i;\n}\nfunction encode(bytes) {\n const len = bytes.length;\n let base64 = \"\";\n for (let i = 0; i < len; i += 3) {\n const b0 = bytes[i + 0];\n const b1 = bytes[i + 1];\n const b2 = bytes[i + 2];\n // This temporary variable stops the NextJS 13 compiler from breaking this code in optimization.\n // See issue https://github.com/FriendlyCaptcha/friendly-challenge/issues/165\n let t = \"\";\n t += CHARS.charAt(b0 >>> 2);\n t += CHARS.charAt(((b0 & 3) << 4) | (b1 >>> 4));\n t += CHARS.charAt(((b1 & 15) << 2) | (b2 >>> 6));\n t += CHARS.charAt(b2 & 63);\n base64 += t;\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n return base64;\n}\nfunction decode(base64) {\n const len = base64.length;\n let bufferLength = (len * 3) >>> 2; // * 0.75\n if (base64.charCodeAt(len - 1) === EQ_CHAR)\n bufferLength--;\n if (base64.charCodeAt(len - 2) === EQ_CHAR)\n bufferLength--;\n const bytes = new Uint8Array(bufferLength);\n for (let i = 0, p = 0; i < len; i += 4) {\n const encoded1 = lookup[base64.charCodeAt(i + 0)];\n const encoded2 = lookup[base64.charCodeAt(i + 1)];\n const encoded3 = lookup[base64.charCodeAt(i + 2)];\n const encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return bytes;\n}\n\nvar css = '.frc-captcha *{margin:0;padding:0;border:0;text-align:initial;border-radius:0;filter:none!important;transition:none!important;font-weight:400;font-size:14px;line-height:1.2;text-decoration:none;background-color:initial;color:#222}.frc-captcha{position:relative;min-width:250px;max-width:312px;border:1px solid #f4f4f4;padding-bottom:12px;background-color:#fff}.frc-captcha b{font-weight:700}.frc-container{display:flex;align-items:center;min-height:52px}.frc-icon{fill:#222;stroke:#222;flex-shrink:0;margin:8px 8px 0}.frc-icon.frc-warning{fill:#c00}.frc-success .frc-icon{animation:1s ease-in both frc-fade-in}.frc-content{white-space:nowrap;display:flex;flex-direction:column;margin:4px 6px 0 0;overflow-x:auto;flex-grow:1}.frc-banner{position:absolute;bottom:0;right:6px;line-height:1}.frc-banner *{font-size:10px;opacity:.8;text-decoration:none}.frc-progress{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:3px 0;height:4px;border:none;background-color:#eee;color:#222;width:100%;transition:.5s linear}.frc-progress::-webkit-progress-bar{background:#eee}.frc-progress::-webkit-progress-value{background:#222}.frc-progress::-moz-progress-bar{background:#222}.frc-button{cursor:pointer;padding:2px 6px;background-color:#f1f1f1;border:1px solid transparent;text-align:center;font-weight:600;text-transform:none}.frc-button:focus{border:1px solid #333}.frc-button:hover{background-color:#ddd}.frc-captcha-solution{display:none}.frc-err-url{text-decoration:underline;font-size:.9em}.frc-rtl{direction:rtl}.frc-rtl .frc-content{margin:4px 0 0 6px}.frc-banner.frc-rtl{left:6px;right:auto}.dark.frc-captcha{color:#fff;background-color:#222;border-color:#333}.dark.frc-captcha *{color:#fff}.dark.frc-captcha button{background-color:#444}.dark .frc-icon{fill:#fff;stroke:#fff}.dark .frc-progress{background-color:#444}.dark .frc-progress::-webkit-progress-bar{background:#444}.dark .frc-progress::-webkit-progress-value{background:#ddd}.dark .frc-progress::-moz-progress-bar{background:#ddd}@keyframes frc-fade-in{from{opacity:0}to{opacity:1}}';\n\n// This is not an enum to save some bytes in the output bundle.\nconst SOLVER_TYPE_JS = 1;\nconst CHALLENGE_SIZE_BYTES = 128;\n\n// @ts-ignore\r\nconst loaderSVG = ``;\r\nconst errorSVG = ``;\r\n/**\r\n * Base template used for all widget states\r\n * The reason we use raw string interpolation here is so we don't have to ship something like lit-html.\r\n */\r\nfunction getTemplate(fieldName, rtl, svgContent, svgAriaHidden, textContent, solutionString, buttonText, progress = false, debugData, additionalContainerClasses) {\r\n return `
\n${svgContent}\n
\n ${textContent}\n ${buttonText ? `` : \"\"}\n ${progress ? `0%` : \"\"}\n
\n
FriendlyCaptcha ⇗\n${fieldName === \"-\" ? \"\" : ``}`;\r\n}\r\n/**\r\n * Used when the widget is ready to start solving.\r\n */\r\nfunction getReadyHTML(fieldName, l) {\r\n return getTemplate(fieldName, l.rtl, ``, true, l.text_ready, \".UNSTARTED\", l.button_start, false);\r\n}\r\n/**\r\n * Used when the widget is retrieving a puzzle\r\n */\r\nfunction getFetchingHTML(fieldName, l) {\r\n return getTemplate(fieldName, l.rtl, loaderSVG, true, l.text_fetching, \".FETCHING\", undefined, true);\r\n}\r\n/**\r\n * Used when the solver is running, displays a progress bar.\r\n */\r\nfunction getRunningHTML(fieldName, l) {\r\n return getTemplate(fieldName, l.rtl, loaderSVG, true, l.text_solving, \".UNFINISHED\", undefined, true);\r\n}\r\nfunction getDoneHTML(fieldName, l, solution, data) {\r\n const timeData = `${data.t.toFixed(0)}s (${((data.h / data.t) * 0.001).toFixed(0)}K/s)${data.solver === SOLVER_TYPE_JS ? \" JS Fallback\" : \"\"}`;\r\n return getTemplate(fieldName, l.rtl, `${l.text_completed_sr}`, false, l.text_completed, solution, undefined, false, timeData, \"frc-success\");\r\n}\r\nfunction getExpiredHTML(fieldName, l) {\r\n return getTemplate(fieldName, l.rtl, errorSVG, true, l.text_expired, \".EXPIRED\", l.button_restart);\r\n}\r\nfunction getErrorHTML(fieldName, l, errorDescription, recoverable = true, headless = false) {\r\n return getTemplate(fieldName, l.rtl, errorSVG, true, `${l.text_error}
${errorDescription}`, headless ? \".HEADLESS_ERROR\" : \".ERROR\", recoverable ? l.button_retry : undefined);\r\n}\r\n/**\r\n * Injects the style if no #frc-style element is already present\r\n * (to support custom stylesheets)\r\n */\r\nfunction injectStyle(styleNonce = null) {\r\n if (!document.querySelector(\"#frc-style\")) {\r\n const styleSheet = document.createElement(\"style\");\r\n styleSheet.id = \"frc-style\";\r\n styleSheet.innerHTML = css;\r\n if (styleNonce) {\r\n styleSheet.setAttribute('nonce', styleNonce);\r\n }\r\n document.head.appendChild(styleSheet);\r\n }\r\n}\r\n/**\r\n * @param element parent element of friendlycaptcha\r\n * @param progress value between 0 and 1\r\n */\r\nfunction updateProgressBar(element, data) {\r\n const p = element.querySelector(\".frc-progress\");\r\n const perc = (data.i + 1) / data.n;\r\n if (p) {\r\n p.value = perc;\r\n p.innerText = (perc * 100).toFixed(1) + \"%\";\r\n p.title = data.i + 1 + \"/\" + data.n + \" (\" + ((data.h / data.t) * 0.001).toFixed(0) + \"K/s)\";\r\n }\r\n}\r\n/**\r\n * Traverses parent nodes until a
is found, returns null if not found.\r\n */\r\nfunction findParentFormElement(element) {\r\n while (element.tagName !== \"FORM\") {\r\n element = element.parentElement;\r\n if (!element) {\r\n return null;\r\n }\r\n }\r\n return element;\r\n}\r\n/**\r\n * Add listener to specified element that will only fire once on focus.\r\n */\r\nfunction executeOnceOnFocusInEvent(element, listener) {\r\n element.addEventListener(\"focusin\", listener, { once: true, passive: true });\r\n}\n\n// Defensive init to make it easier to integrate with Gatsby, NextJS, and friends.\r\nlet nav;\r\nlet ua;\r\nif (typeof navigator !== \"undefined\" && typeof navigator.userAgent === \"string\") {\r\n nav = navigator;\r\n ua = nav.userAgent.toLowerCase();\r\n}\r\n/**\r\n * Headless browser detection on the clientside is imperfect. One can modify any clientside code to disable or change this check,\r\n * and one can spoof whatever is checked here. However, that doesn't make it worthless: it's yet another hurdle for spammers and\r\n * it stops unsophisticated scripters from making any request whatsoever.\r\n */\r\nfunction isHeadless() {\r\n return (\r\n //tell-tale bot signs\r\n ua.indexOf(\"headless\") !== -1 ||\r\n nav.appVersion.indexOf(\"Headless\") !== -1 ||\r\n ua.indexOf(\"bot\") !== -1 || // http://www.useragentstring.com/pages/useragentstring.php?typ=Browser\r\n ua.indexOf(\"crawl\") !== -1 || // Only IE5 has two distributions that has this on windows NT.. so yeah.\r\n nav.webdriver === true ||\r\n !nav.language ||\r\n (nav.languages !== undefined && !nav.languages.length) // IE 11 does not support NavigatorLanguage.languages https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/languages\r\n );\r\n}\n\n/**\n * Maps a value between 0 and 255 to a difficulty threshold (as uint32)\n * Difficulty 0 maps to 99.99% probability of being right on the first attempt\n * Anything above 250 needs 2^32 tries on average to solve.\n * 150 to 180 seems reasonable\n */\nfunction difficultyToThreshold(value) {\n if (value > 255) {\n value = 255;\n }\n else if (value < 0) {\n value = 0;\n }\n return Math.pow(2, (255.999 - value) / 8.0) >>> 0;\n}\n\nconst PUZZLE_EXPIRY_OFFSET = 13;\nconst NUMBER_OF_PUZZLES_OFFSET = 14;\nconst PUZZLE_DIFFICULTY_OFFSET = 15;\nfunction getPuzzleSolverInputs(puzzleBuffer, numPuzzles) {\n const startingPoints = [];\n for (let i = 0; i < numPuzzles; i++) {\n const input = new Uint8Array(CHALLENGE_SIZE_BYTES);\n input.set(puzzleBuffer);\n input[120] = i;\n startingPoints.push(input);\n }\n return startingPoints;\n}\n\nfunction decodeBase64Puzzle(base64Puzzle) {\r\n const parts = base64Puzzle.split(\".\");\r\n const puzzle = parts[1];\r\n const arr = decode(puzzle);\r\n return {\r\n signature: parts[0],\r\n base64: puzzle,\r\n buffer: arr,\r\n n: arr[NUMBER_OF_PUZZLES_OFFSET],\r\n threshold: difficultyToThreshold(arr[PUZZLE_DIFFICULTY_OFFSET]),\r\n expiry: arr[PUZZLE_EXPIRY_OFFSET] * 300000,\r\n };\r\n}\r\nasync function getPuzzle(urlsSeparatedByComma, siteKey, lang) {\r\n const urls = urlsSeparatedByComma.split(\",\");\r\n for (let i = 0; i < urls.length; i++) {\r\n try {\r\n const response = await fetchAndRetryWithBackoff(urls[i] + \"?sitekey=\" + siteKey, { headers: [[\"x-frc-client\", \"js-0.9.18\"]], mode: \"cors\" }, 2);\r\n if (response.ok) {\r\n const json = await response.json();\r\n return json.data.puzzle;\r\n }\r\n else {\r\n let json;\r\n try {\r\n json = await response.json();\r\n }\r\n catch (e) {\r\n /* Do nothing, the error is not valid JSON */\r\n }\r\n if (json && json.errors && json.errors[0] === \"endpoint_not_enabled\") {\r\n throw Error(`Endpoint not allowed (${response.status})`);\r\n }\r\n if (i === urls.length - 1) {\r\n throw Error(`Response status ${response.status} ${response.statusText} ${json ? json.errors : \"\"}`);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(\"[FRC Fetch]:\", e);\r\n const err = new Error(`${lang.text_fetch_error} ${urls[i]}`);\r\n err.rawError = e;\r\n throw err;\r\n }\r\n }\r\n // This code should never be reached.\r\n throw Error(`Internal error`);\r\n}\r\n/**\r\n * Retries given request with exponential backoff (starting with 1000ms delay, multiplying by 4 every time)\r\n * @param url Request (can be string url) to fetch\r\n * @param opts Options for fetch\r\n * @param n Number of times to attempt before giving up.\r\n */\r\nasync function fetchAndRetryWithBackoff(url, opts, n) {\r\n let time = 1000;\r\n return fetch(url, opts).catch(async (error) => {\r\n if (n === 0)\r\n throw error;\r\n await new Promise((r) => setTimeout(r, time));\r\n time *= 4;\r\n return fetchAndRetryWithBackoff(url, opts, n - 1);\r\n });\r\n}\n\n// English\r\nconst LANG_EN = {\r\n text_init: \"Initializing...\",\r\n text_ready: \"Anti-Robot Verification\",\r\n button_start: \"Click to start verification\",\r\n text_fetching: \"Fetching Challenge\",\r\n text_solving: \"Verifying you are human...\",\r\n text_completed: \"I am human\",\r\n text_completed_sr: \"Automatic spam check completed\",\r\n text_expired: \"Anti-Robot verification expired\",\r\n button_restart: \"Restart\",\r\n text_error: \"Verification failed\",\r\n button_retry: \"Retry\",\r\n text_fetch_error: \"Failed to connect to\",\r\n};\r\n// French\r\nconst LANG_FR = {\r\n text_init: \"Chargement...\",\r\n text_ready: \"Vérification Anti-Robot\",\r\n button_start: \"Clique ici pour vérifier\",\r\n text_fetching: \"Chargement du défi\",\r\n text_solving: \"Nous vérifions que vous n'êtes pas un robot...\",\r\n text_completed: \"Je ne suis pas un robot\",\r\n text_completed_sr: \"Vérification automatique des spams terminée\",\r\n text_expired: \"Vérification anti-robot expirée\",\r\n button_restart: \"Redémarrer\",\r\n text_error: \"Échec de la vérification\",\r\n button_retry: \"Recommencer\",\r\n text_fetch_error: \"Problème de connexion avec\",\r\n};\r\n// German\r\nconst LANG_DE = {\r\n text_init: \"Initialisierung...\",\r\n text_ready: \"Anti-Roboter-Verifizierung\",\r\n button_start: \"Hier klicken\",\r\n text_fetching: \"Herausforderung laden...\",\r\n text_solving: \"Verifizierung, dass Sie ein Mensch sind...\",\r\n text_completed: \"Ich bin ein Mensch\",\r\n text_completed_sr: \"Automatische Spamprüfung abgeschlossen\",\r\n text_expired: \"Verifizierung abgelaufen\",\r\n button_restart: \"Erneut starten\",\r\n text_error: \"Verifizierung fehlgeschlagen\",\r\n button_retry: \"Erneut versuchen\",\r\n text_fetch_error: \"Verbindungsproblem mit\",\r\n};\r\n// Dutch\r\nconst LANG_NL = {\r\n text_init: \"Initializeren...\",\r\n text_ready: \"Anti-robotverificatie\",\r\n button_start: \"Klik om te starten\",\r\n text_fetching: \"Aan het laden...\",\r\n text_solving: \"Anti-robotverificatie bezig...\",\r\n text_completed: \"Ik ben een mens\",\r\n text_completed_sr: \"Automatische anti-spamcheck voltooid\",\r\n text_expired: \"Verificatie verlopen\",\r\n button_restart: \"Opnieuw starten\",\r\n text_error: \"Verificatie mislukt\",\r\n button_retry: \"Opnieuw proberen\",\r\n text_fetch_error: \"Verbinding mislukt met\",\r\n};\r\n// Italian\r\nconst LANG_IT = {\r\n text_init: \"Inizializzazione...\",\r\n text_ready: \"Verifica Anti-Robot\",\r\n button_start: \"Clicca per iniziare\",\r\n text_fetching: \"Caricamento...\",\r\n text_solving: \"Verificando che sei umano...\",\r\n text_completed: \"Non sono un robot\",\r\n text_completed_sr: \"Controllo automatico dello spam completato\",\r\n text_expired: \"Verifica Anti-Robot scaduta\",\r\n button_restart: \"Ricomincia\",\r\n text_error: \"Verifica fallita\",\r\n button_retry: \"Riprova\",\r\n text_fetch_error: \"Problema di connessione con\",\r\n};\r\n// Portuguese\r\nconst LANG_PT = {\r\n text_init: \"Inicializando...\",\r\n text_ready: \"Verificação Anti-Robô\",\r\n button_start: \"Clique para iniciar verificação\",\r\n text_fetching: \"Carregando...\",\r\n text_solving: \"Verificando se você é humano...\",\r\n text_completed: \"Eu sou humano\",\r\n text_completed_sr: \"Verificação automática de spam concluída\",\r\n text_expired: \"Verificação Anti-Robô expirada\",\r\n button_restart: \"Reiniciar\",\r\n text_error: \"Verificação falhou\",\r\n button_retry: \"Tentar novamente\",\r\n text_fetch_error: \"Falha de conexão com\",\r\n};\r\n// Spanish\r\nconst LANG_ES = {\r\n text_init: \"Inicializando...\",\r\n text_ready: \"Verificación Anti-Robot\",\r\n button_start: \"Haga clic para iniciar la verificación\",\r\n text_fetching: \"Cargando desafío\",\r\n text_solving: \"Verificando que eres humano...\",\r\n text_completed: \"Soy humano\",\r\n text_completed_sr: \"Verificación automática de spam completada\",\r\n text_expired: \"Verificación Anti-Robot expirada\",\r\n button_restart: \"Reiniciar\",\r\n text_error: \"Ha fallado la verificación\",\r\n button_retry: \"Intentar de nuevo\",\r\n text_fetch_error: \"Error al conectarse a\",\r\n};\r\n// Catalan\r\nconst LANG_CA = {\r\n text_init: \"Inicialitzant...\",\r\n text_ready: \"Verificació Anti-Robot\",\r\n button_start: \"Fes clic per començar la verificació\",\r\n text_fetching: \"Carregant repte\",\r\n text_solving: \"Verificant que ets humà...\",\r\n text_completed: \"Soc humà\",\r\n text_completed_sr: \"Verificació automàtica de correu brossa completada\",\r\n text_expired: \"La verificació Anti-Robot ha expirat\",\r\n button_restart: \"Reiniciar\",\r\n text_error: \"Ha fallat la verificació\",\r\n button_retry: \"Tornar a provar\",\r\n text_fetch_error: \"Error connectant a\",\r\n};\r\n// Japanese\r\nconst LANG_JA = {\r\n text_init: \"開始しています...\",\r\n text_ready: \"アンチロボット認証\",\r\n button_start: \"クリックして認証を開始\",\r\n text_fetching: \"ロードしています\",\r\n text_solving: \"認証中...\",\r\n text_completed: \"私はロボットではありません\",\r\n text_completed_sr: \"自動スパムチェックが完了しました\",\r\n text_expired: \"認証の期限が切れています\",\r\n button_restart: \"再度認証を行う\",\r\n text_error: \"認証にエラーが発生しました\",\r\n button_retry: \"再度認証を行う\",\r\n text_fetch_error: \"接続ができませんでした\",\r\n};\r\n// Danish\r\nconst LANG_DA = {\r\n text_init: \"Aktiverer...\",\r\n text_ready: \"Jeg er ikke en robot\",\r\n button_start: \"Klik for at starte verifikationen\",\r\n text_fetching: \"Henter data\",\r\n text_solving: \"Kontrollerer at du er et menneske...\",\r\n text_completed: \"Jeg er et menneske.\",\r\n text_completed_sr: \"Automatisk spamkontrol gennemført\",\r\n text_expired: \"Verifikationen kunne ikke fuldføres\",\r\n button_restart: \"Genstart\",\r\n text_error: \"Bekræftelse mislykkedes\",\r\n button_retry: \"Prøv igen\",\r\n text_fetch_error: \"Forbindelsen mislykkedes\",\r\n};\r\n// Russian\r\nconst LANG_RU = {\r\n text_init: \"Инициализация...\",\r\n text_ready: \"АнтиРобот проверка\",\r\n button_start: \"Нажмите, чтобы начать проверку\",\r\n text_fetching: \"Получаю задачу\",\r\n text_solving: \"Проверяю, что вы человек...\",\r\n text_completed: \"Я человек\",\r\n text_completed_sr: \"Aвтоматическая проверка на спам завершена\",\r\n text_expired: \"Срок АнтиРоботной проверки истёк\",\r\n button_restart: \"Начать заново\",\r\n text_error: \"Ошибка проверки\",\r\n button_retry: \"Повторить ещё раз\",\r\n text_fetch_error: \"Ошибка подключения\",\r\n};\r\n// Swedish\r\nconst LANG_SV = {\r\n text_init: \"Aktiverar...\",\r\n text_ready: \"Jag är inte en robot\",\r\n button_start: \"Klicka för att verifiera\",\r\n text_fetching: \"Hämtar data\",\r\n text_solving: \"Kontrollerar att du är människa...\",\r\n text_completed: \"Jag är en människa\",\r\n text_completed_sr: \"Automatisk spamkontroll slutförd\",\r\n text_expired: \"Anti-robot-verifieringen har löpt ut\",\r\n button_restart: \"Börja om\",\r\n text_error: \"Verifiering kunde inte slutföras\",\r\n button_retry: \"Omstart\",\r\n text_fetch_error: \"Verifiering misslyckades\",\r\n};\r\n// Turkish\r\nconst LANG_TR = {\r\n text_init: \"Başlatılıyor...\",\r\n text_ready: \"Anti-Robot Doğrulaması\",\r\n button_start: \"Doğrulamayı başlatmak için tıklayın\",\r\n text_fetching: \"Yükleniyor\",\r\n text_solving: \"Robot olmadığınız doğrulanıyor...\",\r\n text_completed: \"Ben bir insanım\",\r\n text_completed_sr: \"Otomatik spam kontrolü tamamlandı\",\r\n text_expired: \"Anti-Robot doğrulamasının süresi doldu\",\r\n button_restart: \"Yeniden başlat\",\r\n text_error: \"Doğrulama başarısız oldu\",\r\n button_retry: \"Tekrar dene\",\r\n text_fetch_error: \"Bağlantı başarısız oldu\",\r\n};\r\n// Greek\r\nconst LANG_EL = {\r\n text_init: \"Προετοιμασία...\",\r\n text_ready: \"Anti-Robot Επαλήθευση\",\r\n button_start: \" Κάντε κλικ για να ξεκινήσει η επαλήθευση\",\r\n text_fetching: \" Λήψη πρόκλησης\",\r\n text_solving: \" Επιβεβαίωση ανθρώπου...\",\r\n text_completed: \"Είμαι άνθρωπος\",\r\n text_completed_sr: \" Ο αυτόματος έλεγχος ανεπιθύμητου περιεχομένου ολοκληρώθηκε\",\r\n text_expired: \" Η επαλήθευση Anti-Robot έληξε\",\r\n button_restart: \" Επανεκκίνηση\",\r\n text_error: \" Η επαλήθευση απέτυχε\",\r\n button_retry: \" Δοκιμάστε ξανά\",\r\n text_fetch_error: \" Αποτυχία σύνδεσης με\",\r\n};\r\n// Ukrainian\r\nconst LANG_UK = {\r\n text_init: \"Ініціалізація...\",\r\n text_ready: \"Антиробот верифікація\",\r\n button_start: \"Натисніть, щоб розпочати верифікацію\",\r\n text_fetching: \"З’єднання\",\r\n text_solving: \"Перевірка, що ви не робот...\",\r\n text_completed: \"Я не робот\",\r\n text_completed_sr: \"Автоматична перевірка спаму завершена\",\r\n text_expired: \"Час вичерпано\",\r\n button_restart: \"Почати знову\",\r\n text_error: \"Верифікація не вдалась\",\r\n button_retry: \"Спробувати знову\",\r\n text_fetch_error: \"Не вдалось з’єднатись\",\r\n};\r\n// Bulgarian\r\nconst LANG_BG = {\r\n text_init: \"Инициализиране...\",\r\n text_ready: \"Анти-робот проверка\",\r\n button_start: \"Щракнете, за да започнете проверката\",\r\n text_fetching: \"Предизвикателство\",\r\n text_solving: \"Проверяваме дали си човек...\",\r\n text_completed: \"Аз съм човек\",\r\n text_completed_sr: \"Автоматичната проверка за спам е завършена\",\r\n text_expired: \"Анти-Робот проверката изтече\",\r\n button_restart: \"Рестартирайте\",\r\n text_error: \"Неуспешна проверка\",\r\n button_retry: \"Опитайте пак\",\r\n text_fetch_error: \"Неуспешно свързване с\",\r\n};\r\n// Czech\r\nconst LANG_CS = {\r\n text_init: \"Inicializace...\",\r\n text_ready: \"Ověření proti robotům\",\r\n button_start: \"Klikněte pro ověření\",\r\n text_fetching: \"Problém při načítání\",\r\n text_solving: \"Ověření, že jste člověk...\",\r\n text_completed: \"Jsem člověk\",\r\n text_completed_sr: \"Automatická kontrola spamu dokončena\",\r\n text_expired: \"Ověření proti robotům vypršelo\",\r\n button_restart: \"Restartovat\",\r\n text_error: \"Ověření se nezdařilo\",\r\n button_retry: \"Zkusit znovu\",\r\n text_fetch_error: \"Připojení se nezdařilo\",\r\n};\r\n// Slovak\r\nconst LANG_SK = {\r\n text_init: \"Inicializácia...\",\r\n text_ready: \"Overenie proti robotom\",\r\n button_start: \"Kliknite pre overenie\",\r\n text_fetching: \"Problém pri načítaní\",\r\n text_solving: \"Overenie, že ste človek...\",\r\n text_completed: \"Som človek\",\r\n text_completed_sr: \"Automatická kontrola spamu dokončená\",\r\n text_expired: \"Overenie proti robotom vypršalo\",\r\n button_restart: \"Reštartovať\",\r\n text_error: \"Overenie sa nepodarilo\",\r\n button_retry: \"Skúsiť znova\",\r\n text_fetch_error: \"Pripojenie sa nepodarilo\",\r\n};\r\n// Norwegian\r\nconst LANG_NO = {\r\n text_init: \" Aktiverer...\",\r\n text_ready: \"Jeg er ikke en robot\",\r\n button_start: \"Klikk for å starte verifiseringen\",\r\n text_fetching: \"Henter data\",\r\n text_solving: \"Sjekker at du er et menneske...\",\r\n text_completed: \"Jeg er et menneske\",\r\n text_completed_sr: \"Automatisk spam-sjekk fullført\",\r\n text_expired: \"Verifisering kunne ikke fullføres\",\r\n button_restart: \"Omstart\",\r\n text_error: \"Bekreftelsen mislyktes\",\r\n button_retry: \"Prøv på nytt\",\r\n text_fetch_error: \"Tilkoblingen mislyktes\",\r\n};\r\n// Finnish\r\nconst LANG_FI = {\r\n text_init: \"Aktivoidaan...\",\r\n text_ready: \"En ole robotti\",\r\n button_start: \"Aloita vahvistus klikkaamalla\",\r\n text_fetching: \"Haetaan tietoja\",\r\n text_solving: \"Tarkistaa, että olet ihminen...\",\r\n text_completed: \"Olen ihminen\",\r\n text_completed_sr: \"Automaattinen roskapostin tarkistus suoritettu\",\r\n text_expired: \"Vahvistusta ei voitu suorittaa loppuun\",\r\n button_restart: \"Uudelleenkäynnistys\",\r\n text_error: \"Vahvistus epäonnistui\",\r\n button_retry: \"Yritä uudelleen\",\r\n text_fetch_error: \"Yhteys epäonnistui\",\r\n};\r\n// Latvian\r\nconst LANG_LV = {\r\n text_init: \"Notiek inicializēšana...\",\r\n text_ready: \"Verifikācija, ka neesat robots\",\r\n button_start: \"Noklikšķiniet, lai sāktu verifikāciju\",\r\n text_fetching: \"Notiek drošības uzdevuma izgūšana\",\r\n text_solving: \"Notiek pārbaude, vai esat cilvēks...\",\r\n text_completed: \"Es esmu cilvēks\",\r\n text_completed_sr: \"Automātiska surogātpasta pārbaude pabeigta\",\r\n text_expired: \"Verifikācijas, ka neesat robots, derīgums beidzies\",\r\n button_restart: \"Restartēt\",\r\n text_error: \"Verifikācija neizdevās\",\r\n button_retry: \"Mēģināt vēlreiz\",\r\n text_fetch_error: \"Neizdevās izveidot savienojumu ar\",\r\n};\r\n// Lithuanian\r\nconst LANG_LT = {\r\n text_init: \"Inicijuojama...\",\r\n text_ready: \"Patikrinimas, ar nesate robotas\",\r\n button_start: \"Spustelėkite patikrinimui pradėti\",\r\n text_fetching: \"Gavimo iššūkis\",\r\n text_solving: \"Tikrinama, ar esate žmogus...\",\r\n text_completed: \"Esu žmogus\",\r\n text_completed_sr: \"Automatinė patikra dėl pašto šiukšlių atlikta\",\r\n text_expired: \"Patikrinimas, ar nesate robotas, baigė galioti\",\r\n button_restart: \"Pradėti iš naujo\",\r\n text_error: \"Patikrinimas nepavyko\",\r\n button_retry: \"Kartoti\",\r\n text_fetch_error: \"Nepavyko prisijungti prie\",\r\n};\r\n// Polish\r\nconst LANG_PL = {\r\n text_init: \"Inicjowanie...\",\r\n text_ready: \"Weryfikacja antybotowa\",\r\n button_start: \"Kliknij, aby rozpocząć weryfikację\",\r\n text_fetching: \"Pobieranie\",\r\n text_solving: \"Weryfikacja, czy nie jesteś robotem...\",\r\n text_completed: \"Nie jestem robotem\",\r\n text_completed_sr: \"Zakończono automatyczne sprawdzanie spamu\",\r\n text_expired: \"Weryfikacja antybotowa wygasła\",\r\n button_restart: \"Uruchom ponownie\",\r\n text_error: \"Weryfikacja nie powiodła się\",\r\n button_retry: \"Spróbuj ponownie\",\r\n text_fetch_error: \"Nie udało się połączyć z\",\r\n};\r\n// Estonian\r\nconst LANG_ET = {\r\n text_init: \"Initsialiseerimine...\",\r\n text_ready: \"Robotivastane kinnitus\",\r\n button_start: \"Kinnitamisega alustamiseks klõpsake\",\r\n text_fetching: \"Väljakutse toomine\",\r\n text_solving: \"Kinnitatakse, et sa oled inimene...\",\r\n text_completed: \"Ma olen inimene\",\r\n text_completed_sr: \"Automaatne rämpsposti kontroll on lõpetatud\",\r\n text_expired: \"Robotivastane kinnitus aegus\",\r\n button_restart: \"Taaskäivita\",\r\n text_error: \"Kinnitamine nurjus\",\r\n button_retry: \"Proovi uuesti\",\r\n text_fetch_error: \"Ühenduse loomine nurjus\",\r\n};\r\n// Croatian\r\nconst LANG_HR = {\r\n text_init: \"Početno postavljanje...\",\r\n text_ready: \"Provjera protiv robota\",\r\n button_start: \"Kliknite za početak provjere\",\r\n text_fetching: \"Dohvaćanje izazova\",\r\n text_solving: \"Provjeravamo jeste li čovjek...\",\r\n text_completed: \"Nisam robot\",\r\n text_completed_sr: \"Automatska provjera je završena\",\r\n text_expired: \"Vrijeme za provjeru protiv robota je isteklo\",\r\n button_restart: \"Osvježi\",\r\n text_error: \"Provjera nije uspjlela\",\r\n button_retry: \" Ponovo pokreni\",\r\n text_fetch_error: \"Nije moguće uspostaviti vezu\",\r\n};\r\n// Serbian\r\nconst LANG_SR = {\r\n text_init: \"Pokretanje...\",\r\n text_ready: \"Anti-Robot Verifikacija\",\r\n button_start: \"Kliknite da biste započeli verifikaciju\",\r\n text_fetching: \"Učitavanje izazova\",\r\n text_solving: \"Verifikacija da ste čovek...\",\r\n text_completed: \"Ja sam čovek\",\r\n text_completed_sr: \"Automatska provera neželjene pošte je završena\",\r\n text_expired: \"Anti-Robot verifikacija je istekla\",\r\n button_restart: \"Ponovo pokrenuti\",\r\n text_error: \"Verifikacija nije uspela\",\r\n button_retry: \"Pokušajte ponovo\",\r\n text_fetch_error: \"Neuspelo povezivanje sa...\",\r\n};\r\n// Slovenian\r\nconst LANG_SL = {\r\n text_init: \"Inicializiranje...\",\r\n text_ready: \"Preverjanje robotov\",\r\n button_start: \"Kliknite za začetek preverjanja\",\r\n text_fetching: \"Prenašanje izziva\",\r\n text_solving: \"Preverjamo, ali ste človek\",\r\n text_completed: \"Nisem robot\",\r\n text_completed_sr: \"Avtomatsko preverjanje je zaključeno\",\r\n text_expired: \"Preverjanje robotov je poteklo\",\r\n button_restart: \"Osveži\",\r\n text_error: \"Preverjanje ni uspelo\",\r\n button_retry: \"Poskusi ponovno\",\r\n text_fetch_error: \"Povezave ni bilo mogoče vzpostaviti\",\r\n};\r\n// Hungarian\r\nconst LANG_HU = {\r\n text_init: \"Inicializálás...\",\r\n text_ready: \"Robotellenes ellenőrzés\",\r\n button_start: \"Kattintson az ellenőrzés megkezdéséhez\",\r\n text_fetching: \"Feladvány lekérése\",\r\n text_solving: \"Annak igazolása, hogy Ön nem robot...\",\r\n text_completed: \"Nem vagyok robot\",\r\n text_completed_sr: \"Automatikus spam ellenőrzés befejeződött\",\r\n text_expired: \"Robotellenes ellenőrzés lejárt\",\r\n button_restart: \"Újraindítás\",\r\n text_error: \"Az ellenőrzés nem sikerült\",\r\n button_retry: \"Próbálja újra\",\r\n text_fetch_error: \"Nem sikerült csatlakozni\",\r\n};\r\n// Romanian\r\nconst LANG_RO = {\r\n text_init: \"Se inițializează...\",\r\n text_ready: \"Verificare anti-robot\",\r\n button_start: \"Click pentru a începe verificarea\",\r\n text_fetching: \"Downloading\",\r\n text_solving: \"Verificare că ești om...\",\r\n text_completed: \"Sunt om\",\r\n text_completed_sr: \"Verificarea automată a spam-ului a fost finalizată\",\r\n text_expired: \"Verificarea anti-robot a expirat\",\r\n button_restart: \"Restart\",\r\n text_error: \"Verificare eșuată\",\r\n button_retry: \"Reîncearcă\",\r\n text_fetch_error: \"Nu s-a putut conecta\",\r\n};\r\n// Chinese\r\nconst LANG_ZH = {\r\n text_init: \"初始化中……\",\r\n text_ready: \"人机验证\",\r\n button_start: \"点击开始\",\r\n text_fetching: \"正在加载\",\r\n text_solving: \"人机校验中……\",\r\n text_completed: \"我不是机器人\",\r\n text_completed_sr: \"人机验证完成\",\r\n text_expired: \"验证已过期\",\r\n button_restart: \"重新开始\",\r\n text_error: \"校验失败\",\r\n button_retry: \"重试\",\r\n text_fetch_error: \"无法连接到\",\r\n};\r\n// Traditional Chinese\r\nconst LANG_ZH_TW = {\r\n text_init: \"正在初始化……\",\r\n text_ready: \"反機器人驗證\",\r\n button_start: \"點擊開始驗證\",\r\n text_fetching: \"載入中\",\r\n text_solving: \"反機器人驗證中……\",\r\n text_completed: \"我不是機器人\",\r\n text_completed_sr: \"驗證完成\",\r\n text_expired: \"驗證超時\",\r\n button_restart: \"重新開始\",\r\n text_error: \"驗證失敗\",\r\n button_retry: \"重試\",\r\n text_fetch_error: \"無法連線到\",\r\n};\r\n// Vietnamese\r\nconst LANG_VI = {\r\n text_init: \"Đang khởi tạo...\",\r\n text_ready: \"Xác minh chống Robot\",\r\n button_start: \"Bấm vào đây để xác minh\",\r\n text_fetching: \"Tìm nạp và xử lý thử thách\",\r\n text_solving: \"Xác minh bạn là người...\",\r\n text_completed: \"Bạn là con người\",\r\n text_completed_sr: \"Xác minh hoàn tất\",\r\n text_expired: \"Xác minh đã hết hạn\",\r\n button_restart: \"Khởi động lại\",\r\n text_error: \"Xác minh thất bại\",\r\n button_retry: \"Thử lại\",\r\n text_fetch_error: \"Không kết nối được\",\r\n};\r\n// Hebrew\r\nconst LANG_HE = {\r\n text_init: \"בביצוע...\",\r\n text_ready: \"אימות אנוש\",\r\n button_start: \"צריך ללחוץ להתחלת האימות\",\r\n text_fetching: \"אתגר המענה בהכנה\",\r\n text_solving: \"מתבצע אימות אנוש...\",\r\n text_completed: \"אני לא רובוט\",\r\n text_completed_sr: \"בדיקת הספאם האוטומטית הסתיימה\",\r\n text_expired: \"פג תוקף אימות האנוש\",\r\n button_restart: \"להתחיל שוב\",\r\n text_error: \"אימות האנוש נכשל\",\r\n button_retry: \"לנסות שוב\",\r\n text_fetch_error: \"נכשל החיבור אל\",\r\n rtl: true,\r\n};\r\n// Thai\r\nconst LANG_TH = {\r\n text_init: \"การเริ่มต้น...\",\r\n text_ready: \" การตรวจสอบต่อต้านหุ่นยนต์\",\r\n button_start: \"คลิกเพื่อเริ่มการตรวจสอบ\",\r\n text_fetching: \"การดึงความท้าทาย\",\r\n text_solving: \"ยืนยันว่าคุณเป็นมนุษย์...\",\r\n text_completed: \"ฉันเป็นมนุษย์\",\r\n text_completed_sr: \"การตรวจสอบสแปมอัตโนมัติเสร็จสมบูรณ์\",\r\n text_expired: \"การตรวจสอบ ต่อต้านหุ่นยนต์ หมดอายุ\",\r\n button_restart: \"รีสตาร์ท\",\r\n text_error: \"การยืนยันล้มเหลว\",\r\n button_retry: \"ลองใหม่\",\r\n text_fetch_error: \"ไม่สามารถเชื่อมต่อได้\"\r\n};\r\n// South Korean\r\nconst LANG_KR = {\r\n text_init: \"초기화 중\",\r\n text_ready: \"Anti-Robot 검증\",\r\n button_start: \"검증을 위해 클릭해 주세요\",\r\n text_fetching: \"검증 준비 중\",\r\n text_solving: \"검증 중\",\r\n text_completed: \"검증이 완료되었습니다\",\r\n text_completed_sr: \"자동 스팸 확인 완료\",\r\n text_expired: \"Anti-Robot 검증 만료\",\r\n button_restart: \"다시 시작합니다\",\r\n text_error: \"검증 실패\",\r\n button_retry: \"다시 시도해 주세요\",\r\n text_fetch_error: \"연결하지 못했습니다\",\r\n};\r\n// Arabic\r\nconst LANG_AR = {\r\n text_init: \"...التهيئة\",\r\n text_ready: \"يتم التحقيق\",\r\n button_start: \"إضغط هنا للتحقيق\",\r\n text_fetching: \"تهيئة التحدي\",\r\n text_solving: \"نتحقق من أنك لست روبوتًا...\",\r\n text_completed: \"أنا لست روبوتًا\",\r\n text_completed_sr: \"تم الانتهاء من التحقق التلقائي من البريد العشوائي\",\r\n text_expired: \"انتهت صلاحية التحقق\",\r\n button_restart: \"إعادة تشغيل\",\r\n text_error: \"فشل التحقق\",\r\n button_retry: \"ابدأ مرة أخرى\",\r\n text_fetch_error: \"مشكلة في الاتصال مع\",\r\n};\r\nconst localizations = {\r\n en: LANG_EN,\r\n de: LANG_DE,\r\n nl: LANG_NL,\r\n fr: LANG_FR,\r\n it: LANG_IT,\r\n pt: LANG_PT,\r\n es: LANG_ES,\r\n ca: LANG_CA,\r\n ja: LANG_JA,\r\n da: LANG_DA,\r\n ru: LANG_RU,\r\n sv: LANG_SV,\r\n tr: LANG_TR,\r\n el: LANG_EL,\r\n uk: LANG_UK,\r\n bg: LANG_BG,\r\n cs: LANG_CS,\r\n sk: LANG_SK,\r\n no: LANG_NO,\r\n fi: LANG_FI,\r\n lv: LANG_LV,\r\n lt: LANG_LT,\r\n pl: LANG_PL,\r\n et: LANG_ET,\r\n hr: LANG_HR,\r\n sr: LANG_SR,\r\n sl: LANG_SL,\r\n hu: LANG_HU,\r\n ro: LANG_RO,\r\n zh: LANG_ZH,\r\n zh_tw: LANG_ZH_TW,\r\n vi: LANG_VI,\r\n he: LANG_HE,\r\n th: LANG_TH,\r\n kr: LANG_KR,\r\n ar: LANG_AR,\r\n // alternative language codes\r\n nb: LANG_NO,\r\n};\n\nfunction createDiagnosticsBuffer(solverID, timeToSolved) {\n const arr = new Uint8Array(3);\n const view = new DataView(arr.buffer);\n view.setUint8(0, solverID);\n view.setUint16(1, timeToSolved);\n return arr;\n}\n\nvar workerString = \"!function(){\\\"use strict\\\";const A=\\\"=\\\".charCodeAt(0),I=new Uint8Array(256);for(let A=0;A<64;A++)I[\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\\\".charCodeAt(A)]=A;function g(A){const I={},g=A.exports,C=g.memory,Q=g.__alloc,t=g.__retain,B=g.__rtti_base||-1;return I.__allocArray=(A,I)=>{const g=function(A){return new Uint32Array(C.buffer)[(B+4>>>2)+2*A]}(A),e=31-Math.clz32(g>>>6&31),o=I.length,i=Q(o<>>2]=t(i),n[r+4>>>2]=i,n[r+8>>>2]=o<>>e)+A]=t(I[A]);else s.set(I,i>>>e);return r},I.__getUint8Array=A=>{const I=new Uint32Array(C.buffer),g=I[A+4>>>2];return new Uint8Array(C.buffer,g,I[g-4>>>2]>>>0)},function(A,I={}){const g=A.__argumentsLength?I=>{A.__argumentsLength.value=I}:A.__setArgumentsLength||A.__setargc||(()=>({}));for(const C in A){if(!Object.prototype.hasOwnProperty.call(A,C))continue;const Q=A[C],t=C.split(\\\".\\\")[0];\\\"function\\\"==typeof Q&&Q!==g?(I[t]=(...A)=>(g(A.length),Q(...A))).original=Q:I[t]=Q}return I}(g,I)}class C{constructor(A){this.b=new Uint8Array(128),this.h=new Uint32Array(16),this.t=0,this.c=0,this.v=new Uint32Array(32),this.m=new Uint32Array(32),this.outlen=A}}function Q(A,I){return A[I]^A[I+1]<<8^A[I+2]<<16^A[I+3]<<24}function t(A,I,g,C,Q,t,B,e){const o=I[B],i=I[B+1],r=I[e],n=I[e+1];let E,s,w,a,c=A[g],D=A[g+1],f=A[C],h=A[C+1],y=A[Q],l=A[Q+1],u=A[t],N=A[t+1];E=c+f,s=(c&f|(c|f)&~E)>>>31,c=E,D=D+h+s,E=c+o,s=(c&o|(c|o)&~E)>>>31,c=E,D=D+i+s,w=u^c,a=N^D,u=a,N=w,E=y+u,s=(y&u|(y|u)&~E)>>>31,y=E,l=l+N+s,w=f^y,a=h^l,f=w>>>24^a<<8,h=a>>>24^w<<8,E=c+f,s=(c&f|(c|f)&~E)>>>31,c=E,D=D+h+s,E=c+r,s=(c&r|(c|r)&~E)>>>31,c=E,D=D+n+s,w=u^c,a=N^D,u=w>>>16^a<<16,N=a>>>16^w<<16,E=y+u,s=(y&u|(y|u)&~E)>>>31,y=E,l=l+N+s,w=f^y,a=h^l,f=a>>>31^w<<1,h=w>>>31^a<<1,A[g]=c,A[g+1]=D,A[C]=f,A[C+1]=h,A[Q]=y,A[Q+1]=l,A[t]=u,A[t+1]=N}const B=[4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225],e=[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,28,20,8,16,18,30,26,12,2,24,0,4,22,14,10,6,22,16,24,0,10,4,30,26,20,28,6,12,14,2,18,8,14,18,6,2,26,24,22,28,4,12,10,20,8,0,30,16,18,0,10,14,4,8,20,30,28,2,22,24,12,16,6,26,4,24,12,20,0,22,16,6,8,26,14,10,30,28,2,18,24,10,2,30,28,26,8,20,0,14,12,6,18,4,16,22,26,22,14,28,24,2,6,18,10,0,30,8,16,12,4,20,12,30,28,18,22,6,0,16,24,4,26,14,2,8,20,10,20,4,16,8,14,12,2,10,30,22,18,28,6,24,26,0,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,28,20,8,16,18,30,26,12,2,24,0,4,22,14,10,6];function o(A,I){const g=A.v,C=A.m;for(let I=0;I<16;I++)g[I]=A.h[I],g[I+16]=B[I];g[24]=g[24]^A.t,g[25]=g[25]^A.t/4294967296,I&&(g[28]=~g[28],g[29]=~g[29]);for(let I=0;I<32;I++)C[I]=Q(A.b,4*I);for(let A=0;A<12;A++)t(g,C,0,8,16,24,e[16*A+0],e[16*A+1]),t(g,C,2,10,18,26,e[16*A+2],e[16*A+3]),t(g,C,4,12,20,28,e[16*A+4],e[16*A+5]),t(g,C,6,14,22,30,e[16*A+6],e[16*A+7]),t(g,C,0,10,20,30,e[16*A+8],e[16*A+9]),t(g,C,2,12,22,24,e[16*A+10],e[16*A+11]),t(g,C,4,14,16,26,e[16*A+12],e[16*A+13]),t(g,C,6,8,18,28,e[16*A+14],e[16*A+15]);for(let I=0;I<16;I++)A.h[I]=A.h[I]^g[I]^g[I+16]}function i(A,I){for(let I=0;I<16;I++)A.h[I]=B[I];A.b.set(I),A.h[0]^=16842752^A.outlen}async function r(){return(A,I,g=4294967295)=>{const Q=function(A,I,g){if(128!=A.length)throw Error(\\\"Invalid input\\\");const Q=A.buffer,t=new DataView(Q),B=new C(32);B.t=128;const e=t.getUint32(124,!0),r=e+g;for(let g=e;gE=A));self.onerror=A=>{self.postMessage({type:\\\"error\\\",message:JSON.stringify(A)})},self.onmessage=async C=>{const Q=C.data;try{if(\\\"solver\\\"===Q.type){if(Q.forceJS){n=1;const A=await r();E(A)}else try{n=2;const C=WebAssembly.compile(function(g){let C=3285;g.charCodeAt(4379)===A&&C--,g.charCodeAt(4378)===A&&C--;const Q=new Uint8Array(C);for(let A=0,C=0;A<4380;A+=4){const t=I[g.charCodeAt(A+0)],B=I[g.charCodeAt(A+1)],e=I[g.charCodeAt(A+2)],o=I[g.charCodeAt(A+3)];Q[C++]=t<<2|B>>4,Q[C++]=(15&B)<<4|e>>2,Q[C++]=(3&e)<<6|63&o}return Q}(\\\"AGFzbQEAAAABKghgAABgAn9/AGADf39/AX9gAX8AYAR/f39/AGAAAX9gAX8Bf2ACf38BfwINAQNlbnYFYWJvcnQABAMMCwcGAwAAAQIFAQIABQMBAAEGFgR/AUEAC38BQQALfwBBAwt/AEHgDAsHbgkGbWVtb3J5AgAHX19hbGxvYwABCF9fcmV0YWluAAIJX19yZWxlYXNlAAMJX19jb2xsZWN0AAQHX19yZXNldAAFC19fcnR0aV9iYXNlAwMNVWludDhBcnJheV9JRAMCDHNvbHZlQmxha2UyYgAKCAELCvQSC5IBAQV/IABB8P///wNLBEAACyMBQRBqIgQgAEEPakFwcSICQRAgAkEQSxsiBmoiAj8AIgVBEHQiA0sEQCAFIAIgA2tB//8DakGAgHxxQRB2IgMgBSADShtAAEEASARAIANAAEEASARAAAsLCyACJAEgBEEQayICIAY2AgAgAkEBNgIEIAIgATYCCCACIAA2AgwgBAsEACAACwMAAQsDAAELBgAjACQBC7sCAQF/AkAgAUUNACAAQQA6AAAgACABakEEayICQQA6AAMgAUECTQ0AIABBADoAASAAQQA6AAIgAkEAOgACIAJBADoAASABQQZNDQAgAEEAOgADIAJBADoAACABQQhNDQAgAEEAIABrQQNxIgJqIgBBADYCACAAIAEgAmtBfHEiAmpBHGsiAUEANgIYIAJBCE0NACAAQQA2AgQgAEEANgIIIAFBADYCECABQQA2AhQgAkEYTQ0AIABBADYCDCAAQQA2AhAgAEEANgIUIABBADYCGCABQQA2AgAgAUEANgIEIAFBADYCCCABQQA2AgwgACAAQQRxQRhqIgFqIQAgAiABayEBA0AgAUEgTwRAIABCADcDACAAQgA3AwggAEIANwMQIABCADcDGCABQSBrIQEgAEEgaiEADAELCwsLcgACfyAARQRAQQxBAhABIQALIAALQQA2AgAgAEEANgIEIABBADYCCCABQfD///8DIAJ2SwRAQcAKQfAKQRJBORAAAAsgASACdCIBQQAQASICIAEQBiAAKAIAGiAAIAI2AgAgACACNgIEIAAgATYCCCAAC88BAQJ/QaABQQAQASIAQQxBAxABQYABQQAQBzYCACAAQQxBBBABQQhBAxAHNgIEIABCADcDCCAAQQA2AhAgAEIANwMYIABC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\\\")),Q=await async function(A){const I=await async function(A){const I={env:{abort(){throw Error(\\\"Wasm aborted\\\")}}};return{exports:g(await WebAssembly.instantiate(A,I))}}(A),C=I.exports.__retain(I.exports.__allocArray(I.exports.Uint8Array_ID,new Uint8Array(128)));let Q=I.exports.__getUint8Array(C);return(A,g,t=4294967295)=>{Q.set(A);const B=I.exports.solveBlake2b(C,g,t);Q=I.exports.__getUint8Array(C);const e=I.exports.__getUint8Array(B);return I.exports.__release(B),[Q,e]}}(await C);E(Q)}catch(A){console.log(\\\"FriendlyCaptcha failed to initialize WebAssembly, falling back to Javascript solver: \\\"+A.toString()),n=1;const I=await r();E(I)}self.postMessage({type:\\\"ready\\\",solver:n})}else if(\\\"start\\\"===Q.type){const A=await s;self.postMessage({type:\\\"started\\\"});let I,g=0;for(let C=0;C<256;C++){Q.puzzleSolverInput[123]=C;const[t,B]=A(Q.puzzleSolverInput,Q.threshold);if(0!==B.length){I=t;break}console.warn(\\\"FC: Internal error or no solution found\\\"),g+=Math.pow(2,32)-1}g+=new DataView(I.slice(-4).buffer).getUint32(0,!0),self.postMessage({type:\\\"done\\\",solution:I.slice(-8),h:g,puzzleIndex:Q.puzzleIndex,puzzleNumber:Q.puzzleNumber})}}catch(A){setTimeout((()=>{throw A}))}}}();\";\n\n// Defensive init to make it easier to integrate with Gatsby and friends.\r\nlet URL;\r\nif (typeof window !== \"undefined\") {\r\n URL = window.URL || window.webkitURL;\r\n}\r\nclass WorkerGroup {\r\n constructor() {\r\n this.workers = [];\r\n this.puzzleNumber = 0;\r\n this.numPuzzles = 0;\r\n this.threshold = 0;\r\n this.startTime = 0;\r\n this.progress = 0;\r\n this.totalHashes = 0;\r\n this.puzzleSolverInputs = [];\r\n // The index of the next puzzle\r\n this.puzzleIndex = 0;\r\n this.solutionBuffer = new Uint8Array(0);\r\n // initialize some value, so ts is happy\r\n this.solverType = 1;\r\n this.readyPromise = new Promise(() => { });\r\n this.readyCount = 0;\r\n this.startCount = 0;\r\n this.progressCallback = () => 0;\r\n this.readyCallback = () => 0;\r\n this.startedCallback = () => 0;\r\n this.doneCallback = () => 0;\r\n this.errorCallback = () => 0;\r\n }\r\n init() {\r\n this.terminateWorkers();\r\n this.progress = 0;\r\n this.totalHashes = 0;\r\n let setReady;\r\n this.readyPromise = new Promise((resolve) => (setReady = resolve));\r\n this.readyCount = 0;\r\n this.startCount = 0;\r\n // Setup four workers for now - later we could calculate this depending on the device\r\n this.workers = new Array(4);\r\n const workerBlob = new Blob([workerString], { type: \"text/javascript\" });\r\n for (let i = 0; i < this.workers.length; i++) {\r\n this.workers[i] = new Worker(URL.createObjectURL(workerBlob));\r\n this.workers[i].onerror = (e) => this.errorCallback(e);\r\n this.workers[i].onmessage = (e) => {\r\n const data = e.data;\r\n if (!data)\r\n return;\r\n if (data.type === \"ready\") {\r\n this.readyCount++;\r\n this.solverType = data.solver;\r\n // We are ready, when all workers are ready\r\n if (this.readyCount == this.workers.length) {\r\n setReady();\r\n this.readyCallback();\r\n }\r\n }\r\n else if (data.type === \"started\") {\r\n this.startCount++;\r\n // We started, when the first worker starts working\r\n if (this.startCount == 1) {\r\n this.startTime = Date.now();\r\n this.startedCallback();\r\n }\r\n }\r\n else if (data.type === \"done\") {\r\n if (data.puzzleNumber !== this.puzzleNumber)\r\n return; // solution belongs to a previous puzzle\r\n if (this.puzzleIndex < this.puzzleSolverInputs.length) {\r\n this.workers[i].postMessage({\r\n type: \"start\",\r\n puzzleSolverInput: this.puzzleSolverInputs[this.puzzleIndex],\r\n threshold: this.threshold,\r\n puzzleIndex: this.puzzleIndex,\r\n puzzleNumber: this.puzzleNumber,\r\n });\r\n this.puzzleIndex++;\r\n }\r\n this.progress++;\r\n this.totalHashes += data.h;\r\n this.progressCallback({\r\n n: this.numPuzzles,\r\n h: this.totalHashes,\r\n t: (Date.now() - this.startTime) / 1000,\r\n i: this.progress,\r\n });\r\n this.solutionBuffer.set(data.solution, data.puzzleIndex * 8);\r\n // We are done, when all puzzles have been solved\r\n if (this.progress == this.numPuzzles) {\r\n const totalTime = (Date.now() - this.startTime) / 1000;\r\n this.doneCallback({\r\n solution: this.solutionBuffer,\r\n h: this.totalHashes,\r\n t: totalTime,\r\n diagnostics: createDiagnosticsBuffer(this.solverType, totalTime),\r\n solver: this.solverType,\r\n });\r\n }\r\n }\r\n else if (data.type === \"error\") {\r\n this.errorCallback(data);\r\n }\r\n };\r\n }\r\n }\r\n setupSolver(forceJS = false) {\r\n const msg = { type: \"solver\", forceJS: forceJS };\r\n for (let i = 0; i < this.workers.length; i++) {\r\n this.workers[i].postMessage(msg);\r\n }\r\n }\r\n async start(puzzle) {\r\n await this.readyPromise;\r\n this.puzzleSolverInputs = getPuzzleSolverInputs(puzzle.buffer, puzzle.n);\r\n this.solutionBuffer = new Uint8Array(8 * puzzle.n);\r\n this.numPuzzles = puzzle.n;\r\n this.threshold = puzzle.threshold;\r\n this.puzzleIndex = 0;\r\n this.puzzleNumber++;\r\n for (let i = 0; i < this.workers.length; i++) {\r\n if (this.puzzleIndex === this.puzzleSolverInputs.length)\r\n break;\r\n this.workers[i].postMessage({\r\n type: \"start\",\r\n puzzleSolverInput: this.puzzleSolverInputs[i],\r\n threshold: this.threshold,\r\n puzzleIndex: this.puzzleIndex,\r\n puzzleNumber: this.puzzleNumber,\r\n });\r\n this.puzzleIndex++;\r\n }\r\n }\r\n terminateWorkers() {\r\n if (this.workers.length == 0)\r\n return;\r\n for (let i = 0; i < this.workers.length; i++) {\r\n this.workers[i].terminate();\r\n }\r\n this.workers = [];\r\n }\r\n}\n\nconst PUZZLE_ENDPOINT_URL = \"https://api.friendlycaptcha.com/api/v1/puzzle\";\r\nclass WidgetInstance {\r\n constructor(element, options = {}) {\r\n this.workerGroup = new WorkerGroup();\r\n /**\r\n * The captcha has been succesfully solved.\r\n */\r\n this.valid = false;\r\n /**\r\n * Some errors may cause a need for the (worker) to be reinitialized. If this is\r\n * true `init` will be called again when start is called.\r\n */\r\n this.needsReInit = false;\r\n /**\r\n * Start() has been called at least once ever.\r\n */\r\n this.hasBeenStarted = false;\r\n this.hasBeenDestroyed = false;\r\n this.opts = Object.assign({\r\n forceJSFallback: false,\r\n skipStyleInjection: false,\r\n startMode: \"focus\",\r\n puzzleEndpoint: element.dataset[\"puzzleEndpoint\"] || PUZZLE_ENDPOINT_URL,\r\n startedCallback: () => 0,\r\n readyCallback: () => 0,\r\n doneCallback: () => 0,\r\n errorCallback: () => 0,\r\n sitekey: element.dataset[\"sitekey\"] || \"\",\r\n language: element.dataset[\"lang\"] || \"en\",\r\n solutionFieldName: element.dataset[\"solutionFieldName\"] || \"frc-captcha-solution\",\r\n styleNonce: null,\r\n }, options);\r\n this.e = element;\r\n this.e.friendlyChallengeWidget = this;\r\n this.loadLanguage();\r\n // @ts-ignore Ignore is required as TS thinks that `this.lang` is not assigned yet, but it happens in `this.loadLanguage()` above.\r\n element.innerText = this.lang.text_init;\r\n if (!this.opts.skipStyleInjection) {\r\n injectStyle(this.opts.styleNonce);\r\n }\r\n this.init(this.opts.startMode === \"auto\" || this.e.dataset[\"start\"] === \"auto\");\r\n }\r\n init(forceStart) {\r\n if (this.hasBeenDestroyed) {\r\n console.error(\"FriendlyCaptcha widget has been destroyed using destroy(), it can not be used anymore.\");\r\n return;\r\n }\r\n this.initWorkerGroup();\r\n if (forceStart) {\r\n this.start();\r\n }\r\n else if (this.e.dataset[\"start\"] !== \"none\" &&\r\n (this.opts.startMode === \"focus\" || this.e.dataset[\"start\"] === \"focus\")) {\r\n const form = findParentFormElement(this.e);\r\n if (form) {\r\n executeOnceOnFocusInEvent(form, () => this.start());\r\n }\r\n else {\r\n console.log(\"FriendlyCaptcha div seems not to be contained in a form, autostart will not work\");\r\n }\r\n }\r\n }\r\n /**\r\n * Loads the configured language, or a language passed to this function.\r\n * Note that only the next update will be in the new language, consider calling `reset()` after switching languages.\r\n */\r\n loadLanguage(lang) {\r\n if (lang !== undefined) {\r\n this.opts.language = lang;\r\n }\r\n else if (this.e.dataset[\"lang\"]) {\r\n this.opts.language = this.e.dataset[\"lang\"];\r\n }\r\n if (typeof this.opts.language === \"string\") {\r\n let langCode = this.opts.language.toLowerCase();\r\n let l = localizations[langCode];\r\n if (l === undefined && langCode[2] === \"-\") {\r\n // Language has a locale '-' separator, remove it and try again\r\n langCode = langCode.substring(0, 2);\r\n l = localizations[langCode];\r\n }\r\n if (l === undefined) {\r\n console.error('FriendlyCaptcha: language \"' + this.opts.language + '\" not found.');\r\n // Fall back to English\r\n l = localizations.en;\r\n }\r\n this.lang = l;\r\n }\r\n else {\r\n // We assign to a copy of the English language localization, so that any missing values will be English\r\n this.lang = Object.assign(Object.assign({}, localizations.en), this.opts.language);\r\n }\r\n }\r\n /**\r\n * Add a listener to the button that calls `this.start` on click.\r\n */\r\n makeButtonStart() {\r\n const b = this.e.querySelector(\"button\");\r\n if (b) {\r\n b.addEventListener(\"click\", (e) => this.start(), { once: true, passive: true });\r\n b.addEventListener(\"touchstart\", (e) => this.start(), { once: true, passive: true });\r\n }\r\n }\r\n onWorkerError(e) {\r\n this.hasBeenStarted = false;\r\n this.needsReInit = true;\r\n if (this.expiryTimeout)\r\n clearTimeout(this.expiryTimeout);\r\n console.error(\"[FRC]\", e);\r\n this.e.innerHTML = getErrorHTML(this.opts.solutionFieldName, this.lang, \"Background worker error \" + e.message);\r\n this.makeButtonStart();\r\n // Just out of precaution\r\n this.opts.forceJSFallback = true;\r\n }\r\n initWorkerGroup() {\r\n this.workerGroup.progressCallback = (progress) => {\r\n updateProgressBar(this.e, progress);\r\n };\r\n this.workerGroup.readyCallback = () => {\r\n this.e.innerHTML = getReadyHTML(this.opts.solutionFieldName, this.lang);\r\n this.makeButtonStart();\r\n this.opts.readyCallback();\r\n };\r\n this.workerGroup.startedCallback = () => {\r\n this.e.innerHTML = getRunningHTML(this.opts.solutionFieldName, this.lang);\r\n this.opts.startedCallback();\r\n };\r\n this.workerGroup.doneCallback = (data) => {\r\n const solutionPayload = this.handleDone(data);\r\n this.opts.doneCallback(solutionPayload);\r\n const callback = this.e.dataset[\"callback\"];\r\n if (callback) {\r\n window[callback](solutionPayload);\r\n }\r\n };\r\n this.workerGroup.errorCallback = (e) => {\r\n this.onWorkerError(e);\r\n };\r\n this.workerGroup.init();\r\n this.workerGroup.setupSolver(this.opts.forceJSFallback);\r\n }\r\n expire() {\r\n this.hasBeenStarted = false;\r\n // Node.isConnected will be undefined in older browsers\r\n if (this.e.isConnected !== false) {\r\n this.e.innerHTML = getExpiredHTML(this.opts.solutionFieldName, this.lang);\r\n this.makeButtonStart();\r\n }\r\n }\r\n async start() {\r\n if (this.hasBeenDestroyed) {\r\n console.error(\"Can not start FriendlyCaptcha widget which has been destroyed\");\r\n return;\r\n }\r\n if (this.hasBeenStarted) {\r\n console.warn(\"Can not start FriendlyCaptcha widget which has already been started\");\r\n return;\r\n }\r\n const sitekey = this.opts.sitekey || this.e.dataset[\"sitekey\"];\r\n if (!sitekey) {\r\n console.error(\"FriendlyCaptcha: sitekey not set on frc-captcha element\");\r\n this.e.innerHTML = getErrorHTML(this.opts.solutionFieldName, this.lang, \"Website problem: sitekey not set\", false);\r\n return;\r\n }\r\n if (isHeadless()) {\r\n this.e.innerHTML = getErrorHTML(this.opts.solutionFieldName, this.lang, \"Browser check failed, try a different browser\", false, true);\r\n return;\r\n }\r\n if (this.needsReInit) {\r\n this.needsReInit = false;\r\n this.init(true);\r\n return;\r\n }\r\n this.hasBeenStarted = true;\r\n try {\r\n this.e.innerHTML = getFetchingHTML(this.opts.solutionFieldName, this.lang);\r\n this.puzzle = decodeBase64Puzzle(await getPuzzle(this.opts.puzzleEndpoint, sitekey, this.lang));\r\n if (this.expiryTimeout)\r\n clearTimeout(this.expiryTimeout);\r\n this.expiryTimeout = setTimeout(() => this.expire(), this.puzzle.expiry - 30000); // 30s grace\r\n }\r\n catch (e) {\r\n console.error(\"[FRC]\", e);\r\n this.hasBeenStarted = false;\r\n if (this.expiryTimeout)\r\n clearTimeout(this.expiryTimeout);\r\n this.e.innerHTML = getErrorHTML(this.opts.solutionFieldName, this.lang, e.message);\r\n this.makeButtonStart();\r\n const code = \"error_getting_puzzle\";\r\n this.opts.errorCallback({ code, description: e.toString(), error: e });\r\n const callback = this.e.dataset[\"callback-error\"];\r\n if (callback) {\r\n window[callback](this);\r\n }\r\n return;\r\n }\r\n await this.workerGroup.start(this.puzzle);\r\n }\r\n /**\r\n * This is to be called when the puzzle has been succesfully completed.\r\n * Here the hidden field gets updated with the solution.\r\n * @param data message from the webworker\r\n */\r\n handleDone(data) {\r\n this.valid = true;\r\n const puzzleSolutionMessage = `${this.puzzle.signature}.${this.puzzle.base64}.${encode(data.solution)}.${encode(data.diagnostics)}`;\r\n this.e.innerHTML = getDoneHTML(this.opts.solutionFieldName, this.lang, puzzleSolutionMessage, data);\r\n // this.worker = null; // This literally crashes very old browsers..\r\n this.needsReInit = true;\r\n return puzzleSolutionMessage;\r\n }\r\n /**\r\n * Cleans up the widget entirely, removing any DOM elements and terminating any background workers.\r\n * After it is destroyed it can no longer be used for any purpose.\r\n */\r\n destroy() {\r\n this.workerGroup.terminateWorkers();\r\n this.needsReInit = false;\r\n this.hasBeenStarted = false;\r\n if (this.expiryTimeout)\r\n clearTimeout(this.expiryTimeout);\r\n if (this.e) {\r\n this.e.remove();\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\r\n // @ts-ignore\r\n delete this.e;\r\n }\r\n this.hasBeenDestroyed = true;\r\n }\r\n /**\r\n * Resets the widget to the initial state.\r\n * This is useful in situations where the page does not refresh when you submit and the form may be re-submitted again\r\n */\r\n reset() {\r\n if (this.hasBeenDestroyed) {\r\n console.error(\"FriendlyCaptcha widget has been destroyed, it can not be used anymore\");\r\n return;\r\n }\r\n this.workerGroup.terminateWorkers();\r\n this.needsReInit = false;\r\n this.hasBeenStarted = false;\r\n if (this.expiryTimeout)\r\n clearTimeout(this.expiryTimeout);\r\n this.init(this.opts.startMode === \"auto\" || this.e.dataset[\"start\"] === \"auto\");\r\n }\r\n}\n\nexport { WidgetInstance, localizations };\n//# sourceMappingURL=index.js.map\n"],"names":["CHARS","lookup","encode","bytes","len","base64","i","b0","b1","b2","t","decode","bufferLength","p","encoded1","encoded2","encoded3","encoded4","css","SOLVER_TYPE_JS","CHALLENGE_SIZE_BYTES","loaderSVG","errorSVG","getTemplate","fieldName","rtl","svgContent","svgAriaHidden","textContent","solutionString","buttonText","progress","debugData","additionalContainerClasses","getReadyHTML","l","getFetchingHTML","getRunningHTML","getDoneHTML","solution","data","timeData","getExpiredHTML","getErrorHTML","errorDescription","recoverable","headless","injectStyle","styleNonce","styleSheet","updateProgressBar","element","perc","findParentFormElement","executeOnceOnFocusInEvent","listener","nav","ua","isHeadless","difficultyToThreshold","value","PUZZLE_EXPIRY_OFFSET","NUMBER_OF_PUZZLES_OFFSET","PUZZLE_DIFFICULTY_OFFSET","getPuzzleSolverInputs","puzzleBuffer","numPuzzles","startingPoints","input","decodeBase64Puzzle","base64Puzzle","parts","puzzle","arr","getPuzzle","urlsSeparatedByComma","siteKey","lang","urls","response","fetchAndRetryWithBackoff","json","e","err","url","opts","n","time","error","r","LANG_EN","LANG_FR","LANG_DE","LANG_NL","LANG_IT","LANG_PT","LANG_ES","LANG_CA","LANG_JA","LANG_DA","LANG_RU","LANG_SV","LANG_TR","LANG_EL","LANG_UK","LANG_BG","LANG_CS","LANG_SK","LANG_NO","LANG_FI","LANG_LV","LANG_LT","LANG_PL","LANG_ET","LANG_HR","LANG_SR","LANG_SL","LANG_HU","LANG_RO","LANG_ZH","LANG_ZH_TW","LANG_VI","LANG_HE","LANG_TH","LANG_KR","LANG_AR","localizations","createDiagnosticsBuffer","solverID","timeToSolved","view","workerString","URL","WorkerGroup","setReady","resolve","workerBlob","totalTime","forceJS","msg","PUZZLE_ENDPOINT_URL","WidgetInstance","options","forceStart","form","langCode","b","solutionPayload","callback","sitekey","puzzleSolutionMessage"],"mappings":"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","x_google_ignoreList":[0]}