站点详情页(跳转前展示目标站点 TDK 信息)
Careers at Backblaze: Join Our Team
www.backblaze.com
Backblaze is a leader in online backup and cloud storage and weâre always looking for great people to join our team. Interested in working for an industry leader and helping solve some of the worldâs data issues? Join us!
关键词:Backblaze is a leader in online backup and cloud storage and weâre always looking for great people to join our team. Interested in working for an industry leader and helping solve some of the worldâs data issues? Join us!" name="description" />WebFont.load({ google: { families: ["Oswald:200,300,400,500,600,700","Inconsolata:400,700","Montserrat:100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic","PT Sans:400,400italic,700,700italic","Inter:300,400,500,600,700"] }});!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);
// create dataLayer
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
// Set "granted" as default for rest of world (unspecified regions)
gtag("consent", "default", {
ad_user_data: "granted",
ad_personalization: "granted",
ad_storage: "granted",
analytics_storage: "granted",
functionality_storage: "granted",
personalization_storage: "granted",
security_storage: "granted",
wait_for_update: 2000
});
// Enable ads data redaction by default
gtag("set", "ads_data_redaction", true);
// Deny consent for EU/EEA/UK/CH + US privacy states
gtag("consent", "default", {
ad_storage: "denied",
analytics_storage: "denied",
functionality_storage: "denied",
personalization_storage: "denied",
security_storage: "denied",
ad_user_data: "denied",
ad_personalization: "denied",
region: [
// EU/EEA countries (27 EU member states)
"AT", "BE", "BG", "HR", "CY", "CZ", "DK", "EE", "FI", "FR",
"DE", "GR", "HU", "IE", "IT", "LV", "LT", "LU", "MT", "NL",
"PL", "PT", "RO", "SK", "SI", "ES", "SE",
// UK, Switzerland, and EEA non-EU countries
"GB", "CH", "IS", "LI", "NO",
// US states with comprehensive privacy laws (13 states)
"US-CA", "US-CT", "US-DE", "US-FL", "US-IL", "US-MD",
"US-MA", "US-MI", "US-MT", "US-NV", "US-NH", "US-PA", "US-WA"
]
});
window.Bz = window.Bz || {};
/** Locale configuration.
* - Keys are BCP-47 language tags (e.g., "fr-CA").
* - Values are the served path prefix for that locale.
* - Unlisted codes fall back to the default locale.
*/
window.Bz.LOCALE_CONFIG = {
defaultLocale: "en",
localeToPrefix: {
"en": "",
"fr": "/fr",
"fr-CA": "/fr"
}
};
let env,
envExt = "", GTM_Code = "GTM-NL4J38", GC_Code = "G-M7PHW7QLHY", captchaKeyForms = "";
switch (location.hostname) {
case "webflow-prod.backblaze.com":
case "www.backblaze.com":
env = "prod";
envExt = "com";
GTM_Code = "GTM-N9N283";
GC_Code = "G-KKNKYMVB92";
captchaKeyForms = "6LetRxEqAAAAAOPSMj8e-TL4F3FRglKid4BirVDF";
break;
case "www.backblaze.net":
env = "staging";
envExt = "net";
captchaKeyForms = "6LetRxEqAAAAAOPSMj8e-TL4F3FRglKid4BirVDF";
break;
case "www.backblaze.pet":
env = "dev";
envExt = "pet";
captchaKeyForms = "6LdWVwYqAAAAAMTLJRWMW0TdN8Yu6tnNMLQ6QNFm";
break;
case "www.backblaze.fun":
env = "dev";
envExt = "fun";
captchaKeyForms = "6LdWVwYqAAAAAMTLJRWMW0TdN8Yu6tnNMLQ6QNFm";
break;
case "www.backblaze.red":
env = "dev";
envExt = "red";
captchaKeyForms = "6LdWVwYqAAAAAMTLJRWMW0TdN8Yu6tnNMLQ6QNFm";
break;
case "www.backblaze.xyz":
env = "dev";
envExt = "xyz";
captchaKeyForms = "6LdWVwYqAAAAAMTLJRWMW0TdN8Yu6tnNMLQ6QNFm";
break;
default:
env = "invalid";
envExt = "invalid";
break;
}
window.Bz.env = env;
window.Bz.envExt = envExt;
const PRICES = {
"b1-monthly": 9,
"b1-annually": 99,
"b1-bi-annually": 189,
"b1-annual-savings": 9,
"b1-biannual-savings": 27,
"b2-monthly-tb": 6.95,
"b2-monthly-gb": 0.00695,
"b2-monthly-egress": 0.01,
"b1e-annually": 24,
"b2-overdrive-monthly-tb": 15
};
window.Bz.prices = PRICES;
(function (w, d, s, l) {
w[l] = w[l] || [];
w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != "dataLayer" ? "&l=" + l : "";
j.async = true;
j.src = "https://www.googletagmanager.com/gtm.js?id=" + GTM_Code + dl;
f.parentNode.insertBefore(j, f);
})(window, document, "script", "dataLayer");
const getClientId = () => new Promise((resolve, reject) => gtag('get', GC_Code, 'client_id', clientId => clientId ? resolve(clientId) : reject('ClientID not found')));
async function setClientId(i){
let c = await getClientId();
document.querySelector(`#${i}`).src+=`&uf_gcid=${c}`;
}
/* This is only being used in the iframe class - june 13 2024*/
function getEstimatedIframeHeight(src) {
try {
const paramsObject = decodeURIComponent(src)
.split("?")[1]
.split("&")
.reduce((a, b) => {
const [key, val] = b.split("=");
a[key] = val;
return a;
}, {});
if (paramsObject.ufb_fields) {
const fieldCount = paramsObject.ufb_fields.split(",").length;
const ESTIMATE_SIZE_PER_INPUT_FIELD = 80;
return `${fieldCount * ESTIMATE_SIZE_PER_INPUT_FIELD}px`;
} else {
return "123.09px";
}
} catch (e) {
return "123.09px";
}
}
function openDatabase() {
return new Promise((resolve, reject) => {
const request = window.indexedDB.open("FileDatabase", 1);
request.onerror = () => {
console.error("Failed to open the database");
return reject();
};
request.onsuccess = () => resolve(request.result);
request.onupgradeneeded = (event) => {
const db = event.target.result;
const objectStore = db.createObjectStore("Files", {
keyPath: "id",
autoIncrement: true,
});
objectStore.createIndex("name", "name", { unique: false });
};
});
}
async function handleExistingFileBlob() {
const db = await openDatabase();
const transaction = db.transaction("Files", "readwrite");
const objectStore = transaction.objectStore("Files");
const getRequest = objectStore.get("installer");
return new Promise((resolve, reject) => {
getRequest.onsuccess = async () => {
const existingData = getRequest.result;
if (existingData) {
await deleteFileBlobFromIndexedDB();
}
return resolve();
};
getRequest.onerror = () => {
console.error("Failed to retrieve the file blob");
return reject();
};
});
}
async function storeFileBlobInIndexedDB({ fileBlob, fileName, retries = 0 }) {
if (retries > 3) {
console.error("Failed to store the file blob");
return;
}
await handleExistingFileBlob();
const db = await openDatabase();
const transaction = db.transaction("Files", "readwrite");
const objectStore = transaction.objectStore("Files");
const fileRecord = { id: "installer", fileName, fileBlob };
const addRequest = objectStore.add(fileRecord);
return new Promise((resolve, reject) => {
addRequest.onsuccess = async () => {
const file = await getFileBlobFromIndexedDB();
if (!file) {
return await storeFileBlobInIndexedDB({
fileBlob,
fileName,
retries: retries + 1,
});
}
return resolve();
};
addRequest.onerror = () => {
console.error("Failed to store the file blob");
return reject();
};
});
}
async function deleteFileBlobFromIndexedDB() {
const db = await openDatabase();
const transaction = db.transaction("Files", "readwrite");
const objectStore = transaction.objectStore("Files");
const deleteRequest = objectStore.delete("installer");
return new Promise((resolve, reject) => {
deleteRequest.onsuccess = () => resolve();
deleteRequest.onerror = () => {
console.error("Failed to delete the file blob");
return reject();
};
});
}
async function getFileBlobFromIndexedDB() {
const db = await openDatabase();
const transaction = db.transaction("Files", "readonly");
const objectStore = transaction.objectStore("Files");
const request = objectStore.get("installer");
return new Promise((resolve, reject) => {
request.onsuccess = () => {
const fileRecord = request.result;
if (fileRecord) {
return resolve(fileRecord);
} else {
console.warn("File blob not found");
return reject();
}
};
request.onerror = () => {
console.error("Failed to retrieve the file blob");
return reject();
};
});
}
function setCodeFromHash() {
const hash = window.location.hash.toLowerCase().substring(1)
function removeHash() {
window.history.replaceState(
null,
null,
window.location.pathname + window.location.search
)
}
if (hash.startsWith("af")) {
setPartnerCode(hash)
removeHash()
}
if (hash.startsWith("ad")) {
setCookie("bz_adcode_c", hash, 30);
setAdCode(hash);
removeHash();
}
}
function setAdCode(code) {
try {
$.ajax({
url: `https://secure.backblaze.${envExt}/api/create_account_on_download?action=set_ad_code&ad_code=${code}&page_url=${encodeURIComponent(
document.location
)}&page_referrer=${encodeURIComponent(document.referrer)}`,
type: "GET",
dataType: "jsonp",
crossDomain: true,
cache: false,
scriptCharset: "utf-8",
timeout: 5000,
success: function (response) {
if (response.status == "true") {
// valid partner ID, reload the iFrame to make sure it's populated at time of sign up
console.log("reinitialize user form with partner cookie");
document.dispatchEvent(new Event("BzReloadUserFormsIframe"));
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {},
})
} catch (err) {}
}
function setPartnerCode(code) {
try {
$.ajax({
url: `https://secure.backblaze.${envExt}/api/create_account_on_download?action=set_partner_code&partner_code=${encodeURIComponent(
code
)}`,
type: "GET",
dataType: "jsonp",
crossDomain: true,
cache: false,
scriptCharset: "utf-8",
timeout: 5000,
success: function (response) {
if (response.status == "true") {
// valid partner ID, reload the iFrame to make sure it's populated at time of sign up
console.log("re initialize user form with partner cookie");
document.dispatchEvent(new Event("BzReloadUserFormsIframe"));
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {},
})
} catch (err) {}
}
(function (global) {
"use strict";
class UserFormsIframe {
constructor({ props, iframeConfig, responseHandler } = {}) {
this.responseHandler = responseHandler;
this.props = props;
this.iframeConfig = iframeConfig;
this.reset();
}
addStylesToIframe() {
const iframeStyles = {
height: getEstimatedIframeHeight(this.iframeConfig.src),
transition: "height 0.1s ease-in",
};
Object.entries(iframeStyles).forEach(([key, value]) => {
this.iframe.style[key] = value;
});
}
reset() {
this.channel = new MessageChannel();
this.channel.port1.onmessage = (resp) =>
this.setupResponseHandler({
resp,
responseHandler: this.responseHandler,
});
this.iframe = document.createElement("iframe");
this.iframe.id = this.iframeConfig.id;
this.iframe.src = this.iframeConfig.src;
this.iframe.title = "Backblaze Form";
this.addStylesToIframe();
this.channelIsSet = false;
this.interval = null;
this.pendingPrefillEmail = null;
}
prefillEmail(email) {
this.pendingPrefillEmail = (email || "").trim();
if (this.channelIsSet && this.pendingPrefillEmail) {
this.updateProps({
fieldValues: {
...(this.props?.fieldValues || {}),
email: this.pendingPrefillEmail,
},
});
this.pendingPrefillEmail = null;
}
}
reload() {
// reload the iframe so that we can fetch fresh cookies
this.iframe.src = this.iframeConfig.src;
}
setupResponseHandler({ resp, responseHandler }) {
const data =
typeof resp.data === "string" ? JSON.parse(resp.data) : resp.data;
if (data?.status === "SETUP_COMPLETE") {
this.channelIsSet = true;
if (this.interval) {
clearInterval(this.interval);
this.interval = null;
}
if (this.pendingPrefillEmail) {
this.updateProps({
fieldValues: {
...(this.props?.fieldValues || {}),
email: this.pendingPrefillEmail,
},
});
this.pendingPrefillEmail = null;
}
} else {
responseHandler(resp);
}
}
updateProps(props = {}) {
this.props = { ...this.props, ...props };
this.iframe.contentWindow.postMessage(
{ type: "data", props: this.props },
"*"
);
}
mount() {
let rootEl = document.body;
if (this.iframeConfig.selector) {
rootEl = document.body.querySelector(this.iframeConfig.selector);
}
rootEl.appendChild(this.iframe);
}
unMount() {
this.iframe.remove();
}
sendPort() {
if (this.channel.port2) {
try {
this.iframe.contentWindow.postMessage({ type: "port" }, "*", [
this.channel.port2,
]);
} catch (e) {
//this.toggleLoading(true);
}
}
}
setupPorts() {
const iframe = this.iframe;
iframe.addEventListener("load", () => {
this.sendPort();
let tries = 0;
const TRY_LIMIT = 5;
this.interval = setInterval(() => {
if (this.channelIsSet) {
clearInterval(this.interval);
this.interval = null;
return;
}
this.sendPort();
if (tries >= TRY_LIMIT) {
clearInterval(this.interval);
this.interval = null;
const pendingEmail = this.pendingPrefillEmail;
this.unMount();
this.reset();
this.pendingPrefillEmail = pendingEmail;
this.init();
}
tries++;
}, 1000);
});
}
init() {
this.mount();
this.updateProps();
this.setupPorts();
}
}
function init() {
try {
global.Bz = global.Bz || {};
global.Bz.UserFormsIframe = UserFormsIframe;
} catch (err) {
console.log(err);
}
}
init();
})(window);
function getUTMCookieValue(utm) {
let cookie = document.cookie
.split("; ")
.find((row) => row.startsWith("_vb_utm_a="));
if (!cookie) return "";
cookie = decodeURIComponent(cookie.split("=")[1]);
let utmParams = cookie.split("&");
let utmParam = utmParams.find((param) => param.startsWith(utm + "="));
return utmParam ? utmParam.split("=")[1] : null;
}
const setCookie = (n, v, d) => document.cookie = `${n}=${encodeURIComponent(v)}; max-age=${d * 86400}; path=/`;
const getCookie = name => document.cookie.split('; ').reduce((r, c) => (c = c.split('='), c[0] === name ? decodeURIComponent(c[1]) : r), null);
function getUrlValue(name) {
const url = new URL(window.location.href);
return url.searchParams.get(name);
}
const initUTMCookie = () => {
// Our cookie name to keep track of all the utm parameters
const COOKIE_NAME = '_vb_utm_a';
// Helper functions
const getCookie = (name) => {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
return null;
};
const setCookie = (name, value, days) => {
const date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
const expires = `expires=${date.toUTCString()}`;
document.cookie = `${name}=${value}; ${expires}; path=/`;
};
const isUTMParam = (param) => {
return param.startsWith('utm_');
};
// Finding utm params
const currentParams = new URLSearchParams(window.location.search);
const utm_params = Object.fromEntries([...currentParams.entries()].filter(([key]) => isUTMParam(key)));
const utm_params_string = Object.keys(utm_params).map(itm => `${itm}=${utm_params[itm]}`).join('&');
let utm_cookie = getCookie(COOKIE_NAME);
utm_cookie = utm_cookie ? decodeURIComponent(utm_cookie) : null;
if (utm_params_string) {
// If the cookie doesn't match the utm parameters in the url, set or update the cookie
if (utm_cookie !== utm_params_string) {
// Setting cookie
setCookie(COOKIE_NAME, encodeURIComponent(utm_params_string), 30);
}
}
};
document.addEventListener("DOMContentLoaded", () => {
gsap.registerPlugin(ScrollTrigger);
initUTMCookie();
for (const p in PRICES) {
const els = document.querySelectorAll(`.${p}`)
els.forEach((el) => { el.textContent = PRICES[p] })
}
if (envExt !== "com") {
const bannerStyle = document.createElement('style');
bannerStyle.innerHTML = '#onetrust-consent-sdk { display: none; }';
document.head.appendChild(bannerStyle);
}
//moved clearbit to gtm addTagScript();
// Setting up adcode based on url
const adcode_c = getUrlValue('adcode');
if(adcode_c) {
console.log(adcode_c);
setCookie("bz_adcode_c", adcode_c, 30);
}
function handleInputChange(e) {
let target = e.target;
if (e.target.type !== "range") target = document.getElementById("range");
updateRange(target);
}
function updateRange(r) {
const min = r.min;
const max = r.max;
const val = r.value;
r.style.backgroundSize = ((val - min) * 100) / (max - min) + "% 100%";
}
const rangeInputs = document.querySelectorAll('input[type="range"]');
rangeInputs.forEach((i) => {
i.addEventListener("input", handleInputChange);
updateRange(i);
});
// removing hidden a tags in h2
const h2s = document.querySelectorAll("h2");
h2s.forEach((h) => {
const as = h.querySelectorAll("a");
as.forEach((a) => {
a.remove();
});
});
setCodeFromHash();
let invisibleElms = document.getElementsByClassName('w-condition-invisible')
let invisibleArr = Array.from(invisibleElms);
invisibleArr.forEach((element) => {
element.parentNode.removeChild(element)
});
const faqItems = document.querySelectorAll("._1c_faq_listitem")
faqItems.forEach((el) => {
let btn = el.querySelector('._1c_faq_listitem_expandbtn');
btn.setAttribute('aria-expanded', false);
el.onclick = (e) => {
el.classList.toggle("on")
btn = el.querySelector('._1c_faq_listitem_expandbtn');
btn.setAttribute('aria-expanded', el.classList.contains('on'));
}
})
// For CTA animations
const ctaTargets = [".cta", "a.points_system_card", "a.points_system_card_vhome", "a.cards_system_card", "a._2c_4cards_card"] // All the elements we want to target to activate the hover state of the CTA
const ctaTargetsCombinedString = ctaTargets.join(", ");
document.querySelectorAll(ctaTargetsCombinedString).forEach(cta => {
const initialPath1 = cta.querySelector('.path1');
const initialPath2 = cta.querySelector('.path2');
if (!initialPath1 || !initialPath2) return;
const animateToHoverState = () => {
gsap.to(initialPath1, {
duration: 0.25,
attr: { d: "M2.5 17.5H15L25.5 7" },
ease: "power2.inOut"
});
gsap.to(initialPath2, {
duration: 0.25,
attr: { d: "M19 6H26.3479V13.361" },
ease: "power2.inOut"
});
};
const animateToInitialState = () => {
gsap.to(initialPath1, {
duration: 0.25,
attr: { d: "M2.5 17.5H11.5L20 9" },
ease: "power2.inOut"
});
gsap.to(initialPath2, {
duration: 0.25,
attr: { d: "M13 8.5H20.3479V15.861" },
ease: "power2.inOut"
});
};
cta.addEventListener('mouseenter', animateToHoverState);
cta.addEventListener('focus', animateToHoverState);
cta.addEventListener('mouseleave', animateToInitialState);
cta.addEventListener('blur', animateToInitialState);
});
}); // end of DomContentLoaded
//beginning of fb, li, ms tracking
(function () {
const COOKIE_MAX_AGE_SECONDS = 60 * 60 * 24 * 90;
const TRACKING_KEYS = [
{ queryParam: "fbclid", cookieName: "bz_fbclid" },
{ queryParam: "li_fat_id", cookieName: "bz_li_fat_id" },
{ queryParam: "msclkid", cookieName: "bz_msclkid" },
];
const escapeRegex = (value) =>
value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
const readCookie = (name) => {
const match = document.cookie.match(
new RegExp("(^|;\\s*)" + escapeRegex(name) + "=([^;]*)")
);
return match ? decodeURIComponent(match[2]) : "";
};
const writeCookie = (name, value) => {
const parts = [
name + "=" + encodeURIComponent(value),
"Path=/",
"Max-Age=" + COOKIE_MAX_AGE_SECONDS,
"SameSite=Lax",
"Secure",
];
document.cookie = parts.join("; ");
};
const getUrlValue = (name) => {
const params = new URLSearchParams(window.location.search);
return params.get(name) || "";
};
const initAdClickCookies = () => {
TRACKING_KEYS.forEach(({ queryParam, cookieName }) => {
const value = getUrlValue(queryParam);
if (value) {
writeCookie(cookieName, value);
}
});
};
const getValues = () => {
const values = {};
TRACKING_KEYS.forEach(({ queryParam, cookieName }) => {
const value = getUrlValue(queryParam) || readCookie(cookieName);
if (value) {
values[queryParam] = value;
}
});
return values;
};
initAdClickCookies();
window.BzAdClickTracking = {
init: initAdClickCookies,
getValues,
readCookie,
cookieNames: {
fbclid: "bz_fbclid",
li_fat_id: "bz_li_fat_id",
msclkid: "bz_msclkid",
},
};
})();
(function () {
const host = window.location.hostname;
const allowedDomains = ['backblaze.pet', 'backblaze.net'];
const matchesDomain = allowedDomains.some(domain =>
host === domain || host.endsWith('.' + domain)
);
if (!matchesDomain) return;
if (document.getElementById('hs-script-loader')) return;
const script = document.createElement('script');
script.id = 'hs-script-loader';
script.async = true;
script.defer = true;
script.src = 'https://js.hs-scripts.com/21120428.js';
document.head.appendChild(script);
})();
function OptanonWrapper() { }
function vwo() {
window._vwo_code || (function() {
var account_id=612650,
version=2.1,
settings_tolerance=2000,
hide_element='body',
hide_element_style = 'opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;transition:none !important;',
/* DO NOT EDIT BELOW THIS LINE */
f=false,w=window,d=document,v=d.querySelector('#vwoCode'),cK='_vwo_'+account_id+'_settings',cc={};try{var c=JSON.parse(localStorage.getItem('_vwo_'+account_id+'_config'));cc=c&&typeof c==='object'?c:{}}catch(e){}var stT=cc.stT==='session'?w.sessionStorage:w.localStorage;code={nonce:v&&v.nonce,use_existing_jquery:function(){return typeof use_existing_jquery!=='undefined'?use_existing_jquery:undefined},library_tolerance:function(){return typeof library_tolerance!=='undefined'?library_tolerance:undefined},settings_tolerance:function(){return cc.sT||settings_tolerance},hide_element_style:function(){return'{'+(cc.hES||hide_element_style)+'}'},hide_element:function(){if(performance.getEntriesByName('first-contentful-paint')[0]){return''}return typeof cc.hE==='string'?cc.hE:hide_element},getVersion:function(){return version},finish:function(e){if(!f){f=true;var t=d.getElementById('_vis_opt_path_hides');if(t)t.parentNode.removeChild(t);if(e)(new Image).src='https://dev.visualwebsiteoptimizer.com/ee.gif?a='+account_id+e}},finished:function(){return f},addScript:function(e){var t=d.createElement('script');t.type='text/javascript';if(e.src){t.src=e.src}else{t.text=e.text}v&&t.setAttribute('nonce',v.nonce);d.getElementsByTagName('head')[0].appendChild(t)},load:function(e,t){var n=this.getSettings(),i=d.createElement('script'),r=this;t=t||{};if(n){i.textContent=n;d.getElementsByTagName('head')[0].appendChild(i);if(!w.VWO||VWO.caE){stT.removeItem(cK);r.load(e)}}else{var o=new XMLHttpRequest;o.open('GET',e,true);o.withCredentials=!t.dSC;o.responseType=t.responseType||'text';o.onload=function(){if(t.onloadCb){return t.onloadCb(o,e)}if(o.status===200||o.status===304){_vwo_code.addScript({text:o.responseText})}else{_vwo_code.finish('&e=loading_failure:'+e)}};o.onerror=function(){if(t.onerrorCb){return t.onerrorCb(e)}_vwo_code.finish('&e=loading_failure:'+e)};o.send()}},getSettings:function(){try{var e=stT.getItem(cK);if(!e){return}e=JSON.parse(e);if(Date.now()>e.e){stT.removeItem(cK);return}return e.s}catch(e){return}},init:function(){if(d.URL.indexOf('__vwo_disable__')>-1)return;var e=this.settings_tolerance();w._vwo_settings_timer=setTimeout(function(){_vwo_code.finish();stT.removeItem(cK)},e);var t;if(this.hide_element()!=='body'){t=d.createElement('style');var n=this.hide_element(),i=n?n+this.hide_element_style():'',r=d.getElementsByTagName('head')[0];t.setAttribute('id','_vis_opt_path_hides');v&&t.setAttribute('nonce',v.nonce);t.setAttribute('type','text/css');if(t.styleSheet)t.styleSheet.cssText=i;else t.appendChild(d.createTextNode(i));r.appendChild(t)}else{t=d.getElementsByTagName('head')[0];var i=d.createElement('div');i.style.cssText='z-index: 2147483647 !important;position: fixed !important;left: 0 !important;top: 0 !important;width: 100% !important;height: 100% !important;background: white !important;display: block !important;';i.setAttribute('id','_vis_opt_path_hides');i.classList.add('_vis_hide_layer');t.parentNode.insertBefore(i,t.nextSibling)}var o=window._vis_opt_url||d.URL,s='https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(o)+'&vn='+version;if(w.location.search.indexOf('_vwo_xhr')!==-1){this.addScript({src:s})}else{this.load(s+'&x=true')}}};w._vwo_code=code;code.init();})();
}
function zoomInfo() {
(function () {
var zi = document.createElement("script");
zi.type = "text/javascript";
zi.async = true;
zi.referrerPolicy = "unsafe-url";
zi.src = "https://ws.zoominfo.com/pixel/uJCeansYSuz2ElG9kpkr";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(zi, s);
})();
window[
(function (_dK6, _gd) {
var _Lg = "";
for (var _Eh = 0; _Eh < _dK6.length; _Eh++) {
var _3K = _dK6[_Eh].charCodeAt();
_gd > 6;
_3K -= _gd;
_3K += 61;
_Lg == _Lg;
_3K %= 94;
_3K != _Eh;
_3K += 33;
_Lg += String.fromCharCode(_3K);
}
return _Lg;
})(atob("Y1JZe3hzbmx9VG4k"), 9)
] = "0aed9573201679954438";
var zi = document.createElement("script");
(zi.type = "text/javascript"),
(zi.async = true),
(zi.src = (function (_El0, _fi) {
var _uP = "";
for (var _FY = 0; _FY < _El0.length; _FY++) {
var _HJ = _El0[_FY].charCodeAt();
_uP == _uP;
_HJ -= _fi;
_fi > 1;
_HJ += 61;
_HJ != _FY;
_HJ %= 94;
_HJ += 33;
_uP += String.fromCharCode(_HJ);
}
return _uP;
})(atob("LDg4NDdcUVEuN1A+LU83JzYtNDg3UCczMVE+LU84JStQLjc="), 34)),
document.readyState === "complete"
? document.body.appendChild(zi)
: window.addEventListener("load", function () {
document.body.appendChild(zi);
});
}
function hasConsentForGroupId(groupId) {
const consentCookie = document.cookie
.split('; ')
.find((row) => row.startsWith('OptanonConsent='));
if (!consentCookie) return false;
const decodedCookie = decodeURIComponent(consentCookie);
const groupsMatch = decodedCookie.match(/groups=([^&]+)/);
if (!groupsMatch || !groupsMatch[1]) return false;
const groups = groupsMatch[1].split(',');
return groups.includes(`${groupId}:1`);
}
const cookieConsents = {
performance: hasConsentForGroupId('C0002'),
functional: hasConsentForGroupId('C0003'),
targeting: hasConsentForGroupId('C0004'),
socialMedia: hasConsentForGroupId('C0005'),
};
if (cookieConsents.performance && cookieConsents.functional) {
vwo();
zoomInfo();
}