1!function (e) { 2 if (!e.hasInitialised) { 3 var t = { 4 escapeRegExp: function (e) { 5 return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") 6 }, hasClass: function (e, t) { 7 var i = " "; 8 return 1 === e.nodeType && (i + e.className + i).replace(/[\n\t]/g, i).indexOf(i + t + i) >= 0 9 }, addClass: function (e, t) { 10 e.className += " " + t 11 }, removeClass: function (e, t) { 12 var i = new RegExp("\\b" + this.escapeRegExp(t) + "\\b"); 13 e.className = e.className.replace(i, "") 14 }, interpolateString: function (e, t) { 15 var i = /{{([a-z][a-z0-9\-_]*)}}/gi; 16 return e.replace(i, function (e) { 17 return t(arguments[1]) || "" 18 }) 19 }, getCookie: function (e) { 20 var t = "; " + document.cookie, i = t.split("; " + e + "="); 21 return i.length < 2 ? void 0 : i.pop().split(";").shift() 22 }, setCookie: function (e, t, i, n, o, s) { 23 var r = new Date; 24 r.setDate(r.getDate() + (i || 365)); 25 var a = [e + "=" + t, "expires=" + r.toUTCString(), "path=" + (o || "/")]; 26 n && a.push("domain=" + n), s && a.push("secure"), document.cookie = a.join(";") 27 }, deepExtend: function (e, t) { 28 for (var i in t) t.hasOwnProperty(i) && (i in e && this.isPlainObject(e[i]) && this.isPlainObject(t[i]) ? this.deepExtend(e[i], t[i]) : e[i] = t[i]); 29 return e 30 }, throttle: function (e, t) { 31 var i = !1; 32 return function () { 33 i || (e.apply(this, arguments), i = !0, setTimeout(function () { 34 i = !1 35 }, t)) 36 } 37 }, hash: function (e) { 38 var t, i, n, o = 0; 39 if (0 === e.length) return o; 40 for (t = 0, n = e.length; t < n; ++t) i = e.charCodeAt(t), o = (o << 5) - o + i, o |= 0; 41 return o 42 }, normaliseHex: function (e) { 43 return "#" == e[0] && (e = e.substr(1)), 3 == e.length && (e = e[0] + e[0] + e[1] + e[1] + e[2] + e[2]), e 44 }, getContrast: function (e) { 45 e = this.normaliseHex(e); 46 var t = parseInt(e.substr(0, 2), 16), i = parseInt(e.substr(2, 2), 16), 47 n = parseInt(e.substr(4, 2), 16), o = (299 * t + 587 * i + 114 * n) / 1e3; 48 return o >= 128 ? "#000" : "#fff" 49 }, getLuminance: function (e) { 50 var t = parseInt(this.normaliseHex(e), 16), i = 38, n = (t >> 16) + i, o = (t >> 8 & 255) + i, 51 s = (255 & t) + i, 52 r = (16777216 + 65536 * (n < 255 ? n < 1 ? 0 : n : 255) + 256 * (o < 255 ? o < 1 ? 0 : o : 255) + (s < 255 ? s < 1 ? 0 : s : 255)).toString(16).slice(1); 53 return "#" + r 54 }, isMobile: function () { 55 return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) 56 }, isPlainObject: function (e) { 57 return "object" == typeof e && null !== e && e.constructor == Object 58 }, traverseDOMPath: function (e, i) { 59 return e && e.parentNode ? t.hasClass(e, i) ? e : this.traverseDOMPath(e.parentNode, i) : null 60 } 61 }; 62 e.status = {deny: "deny", allow: "allow", dismiss: "dismiss"}, e.transitionEnd = function () { 63 var e = document.createElement("div"), t = { 64 t: "transitionend", 65 OT: "oTransitionEnd", 66 msT: "MSTransitionEnd", 67 MozT: "transitionend", 68 WebkitT: "webkitTransitionEnd" 69 }; 70 for (var i in t) if (t.hasOwnProperty(i) && "undefined" != typeof e.style[i + "ransition"]) return t[i]; 71 return "" 72 }(), e.hasTransition = !!e.transitionEnd; 73 var i = Object.keys(e.status).map(t.escapeRegExp); 74 e.customStyles = {}, e.Popup = function () { 75 function n() { 76 this.initialise.apply(this, arguments) 77 } 78 79 function o(e) { 80 this.openingTimeout = null, t.removeClass(e, "cc-invisible") 81 } 82 83 function s(t) { 84 t.style.display = "none", t.removeEventListener(e.transitionEnd, this.afterTransition), this.afterTransition = null 85 } 86 87 function r() { 88 var t = this.options.onInitialise.bind(this); 89 if (!window.navigator.cookieEnabled) return t(e.status.deny), !0; 90 if (window.CookiesOK || window.navigator.CookiesOK) return t(e.status.allow), !0; 91 var i = Object.keys(e.status), n = this.getStatus(), o = i.indexOf(n) >= 0; 92 return o && t(n), o 93 } 94 95 function a() { 96 var e = this.options.position.split("-"), t = []; 97 return e.forEach(function (e) { 98 t.push("cc-" + e) 99 }), t 100 } 101 102 function c() { 103 var e = this.options, i = "top" == e.position || "bottom" == e.position ? "banner" : "floating"; 104 t.isMobile() && (i = "floating"); 105 var n = ["cc-" + i, "cc-type-" + e.type, "cc-theme-" + e.theme]; 106 e["static"] && n.push("cc-static"), n.push.apply(n, a.call(this)); 107 p.call(this, this.options.palette); 108 return this.customStyleSelector && n.push(this.customStyleSelector), n 109 } 110 111 function l() { 112 var e = {}, i = this.options; 113 i.showLink || (i.elements.link = "", i.elements.messagelink = i.elements.message), Object.keys(i.elements).forEac
113h(function (n) { 114 e[n] = t.interpolateString(i.elements[n], function (e) { 115 var t = i.content[e]; 116 return e && "string" == typeof t && t.length ? t : "" 117 }) 118 }); 119 var n = i.compliance[i.type]; 120 n || (n = i.compliance.info), e.compliance = t.interpolateString(n, function (t) { 121 return e[t] 122 }); 123 var o = i.layouts[i.layout]; 124 return o || (o = i.layouts.basic), t.interpolateString(o, function (t) { 125 return e[t] 126 }) 127 } 128 129 function u(i) { 130 var n = this.options, o = document.createElement("div"), 131 s = n.container && 1 === n.container.nodeType ? n.container : document.body; 132 o.innerHTML = i; 133 var r = o.children[0]; 134 return r.style.display = "none", t.hasClass(r, "cc-window") && e.hasTransition && t.addClass(r, "cc-invisible"), this.onButtonClick = h.bind(this), r.addEventListener("click", this.onButtonClick), n.autoAttach && (s.firstChild ? s.insertBefore(r, s.firstChild) : s.appendChild(r)), r 135 } 136 137 function h(n) { 138 var o = t.traverseDOMPath(n.target, "cc-btn") || n.target; 139 if (t.hasClass(o, "cc-btn")) { 140 var s = o.className.match(new RegExp("\\bcc-(" + i.join("|") + ")\\b")), r = s && s[1] || !1; 141 r && (this.setStatus(r), this.close(!0)) 142 } 143 t.hasClass(o, "cc-close") && (this.setStatus(e.status.dismiss), this.close(!0)), t.hasClass(o, "cc-revoke") && this.revokeChoice() 144 } 145 146 function p(e) { 147 var i = t.hash(JSON.stringify(e)), n = "cc-color-override-" + i, o = t.isPlainObject(e); 148 return this.customStyleSelector = o ? n : null, o && d(i, e, "." + n), o 149 } 150 151 function d(i, n, o) { 152 if (e.customStyles[i]) return void ++e.customStyles[i].references; 153 var s = {}, r = n.popup, a = n.button, c = n.highlight; 154 r && (r.text = r.text ? r.text : t.getContrast(r.background), r.link = r.link ? r.link : r.text, s[o + ".cc-window"] = ["color: " + r.text, "background-color: " + r.background], s[o + ".cc-revoke"] = ["color: " + r.text, "background-color: " + r.background], s[o + " .cc-link," + o + " .cc-link:active," + o + " .cc-link:visited"] = ["color: " + r.link], a && (a.text = a.text ? a.text : t.getContrast(a.background), a.border = a.border ? a.border : "transparent", s[o + " .cc-btn"] = ["color: " + a.text, "border-color: " + a.border, "background-color: " + a.background], a.padding && s[o + " .cc-btn"].push("padding: " + a.padding), "transparent" != a.background && (s[o + " .cc-btn:hover, " + o + " .cc-btn:focus"] = ["background-color: " + (a.hover || v(a.background))]), c ? (c.text = c.text ? c.text : t.getContrast(c.background), c.border = c.border ? c.border : "transparent", s[o + " .cc-highlight .cc-btn:first-child"] = ["color: " + c.text, "border-color: " + c.border, "background-color: " + c.background]) : s[o + " .cc-highlight .cc-btn:first-child"] = ["color: " + r.text])); 155 var l = document.createElement("style"); 156 document.head.appendChild(l), e.customStyles[i] = {references: 1, element: l.sheet}; 157 var u = -1; 158 for (var h in s) s.hasOwnProperty(h) && l.sheet.insertRule(h + "{" + s[h].join(";") + "}", ++u) 159 } 160 161 function v(e) { 162 return e = t.normaliseHex(e), "000000" == e ? "#222" : t.getLuminance(e) 163 } 164 165 function f(i) { 166 if (t.isPlainObject(i)) { 167 var n = t.hash(JSON.stringify(i)), o = e.customStyles[n]; 168 if (o && !--o.references) { 169 var s = o.element.ownerNode; 170 s && s.parentNode && s.parentNode.removeChild(s), e.customStyles[n] = null 171 } 172 } 173 } 174 175 function m(e, t) { 176 for (var i = 0, n = e.length; i < n; ++i) { 177 var o = e[i]; 178 if (o instanceof RegExp && o.test(t) || "string" == typeof o && o.length && o === t) return !0 179 } 180 return !1 181 } 182 183 function b() { 184 var i = this.setStatus.bind(this), n = this.close.bind(this), o = this.options.dismissOnTimeout; 185 "number" == typeof o && o >= 0 && (this.dismissTimeout = window.setTimeout(function () { 186 i(e.status.dismiss), n(!0) 187 }, Math.floor(o))); 188 var s = this.options.dismissOnScroll; 189 if ("number" == typeof s && s >= 0) { 190 var r = function (t) { 191 window.pageYOffset > Math.floor(s) && (i(e.status.dismiss), n(!0), window.removeEventListener("scroll", r), this.onWindowScroll = null) 192 }; 193 this.options.enabled && (this.onWindowScroll = r, window.addEventListener("scroll", r)) 194 } 195 var a = this.options.dismissOnWindowClick, c = this.options.ignoreClicksFrom; 196 if (a) { 197 var l = function (o) { 198 for (var s = !1, r = o.path.length, a = c.length, u = 0; u < r; u++) if (!s) for (var h = 0; h < a; h++) s || (s = t.hasClass(o.path[u], c[h])); 199 s || (i(e.status.dismiss), n(!0), window.removeEventListener("click", l), this.onWindowClick = null) 200 }.bind(this); 201 this.options.enabled && (this.onWindowClick = l, window.addEventListener("click", l)) 202 } 203 } 204 205 function g() { 206 if ("info" != this.options.type && (this.options.revokable = !0), t.isMobile() && (this.options.animateRevokable = !1), this.options.revokable) { 207 var e = a.call(this); 208 this.options.animateRevokable && e.push("cc-animate"), this.customStyleSelector && e.push(this.customStyleSelector); 209 var i = this.options.revokeBtn.replace("{{classes}}", e.join(" ")).replace("{{policy}}", this.options.content.policy); 210 this.revokeBtn = u.call(this, i); 211 var n = this.revokeBtn; 212 if (this.options.animateRevokable) { 213 var o = t.throttle(function (e) { 214 var i = !1, o = 20, s = window.innerHeight - 20; 215 t.hasClass(n, "cc-top") && e.clientY < o && (i = !0), t.hasClass(n, "cc-bottom") && e.clientY >
215 s && (i = !0), i ? t.hasClass(n, "cc-active") || t.addClass(n, "cc-active") : t.hasClass(n, "cc-active") && t.removeClass(n, "cc-active") 216 }, 200); 217 this.onMouseMove = o, window.addEventListener("mousemove", o) 218 } 219 } 220 } 221 222 var y = { 223 enabled: !0, 224 container: null, 225 cookie: {name: "cookieconsent_status", path: "/", domain: "", expiryDays: 365, secure: !1}, 226 onPopupOpen: function () { 227 }, 228 onPopupClose: function () { 229 }, 230 onInitialise: function (e) { 231 }, 232 onStatusChange: function (e, t) { 233 }, 234 onRevokeChoice: function () { 235 }, 236 onNoCookieLaw: function (e, t) { 237 }, 238 content: { 239 header: "Cookies used on the website!", 240 message: "This website uses cookies to ensure you get the best experience on our website.", 241 dismiss: "Got it!", 242 allow: "Allow cookies", 243 deny: "Decline", 244 link: "Learn more", 245 href: "https://cookiesandyou.com", 246 close: "❌", 247 target: "_blank", 248 policy: "Cookie Policy" 249 }, 250 elements: { 251 header: '<span class="cc-header">{{header}}</span> ', 252 message: '<span id="cookieconsent:desc" class="cc-message">{{message}}</span>', 253 messagelink: '<span id="cookieconsent:desc" class="cc-message">{{message}} <a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" rel="noopener noreferrer nofollow" target="{{target}}">{{link}}</a></span>', 254 dismiss: '<a aria-label="dismiss cookie message" role=button tabindex="0" class="cc-btn cc-dismiss">{{dismiss}}</a>', 255 allow: '<a aria-label="allow cookies" role=button tabindex="0" class="cc-btn cc-allow">{{allow}}</a>', 256 deny: '<a aria-label="deny cookies" role=button tabindex="0" class="cc-btn cc-deny">{{deny}}</a>', 257 link: '<a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" rel="noopener noreferrer nofollow" target="{{target}}">{{link}}</a>', 258 close: '<span aria-label="dismiss cookie message" role=button tabindex="0" class="cc-close">{{close}}</span>' 259 }, 260 window: '<div role="dialog" aria-live="polite" aria-label="cookieconsent" aria-describedby="cookieconsent:desc" class="cc-window {{classes}}"><!--googleoff: all-->{{children}}<!--googleon: all--></div>', 261 revokeBtn: '<div class="cc-revoke {{classes}}">{{policy}}</div>', 262 compliance: { 263 info: '<div class="cc-compliance">{{dismiss}}</div>', 264 "opt-in": '<div class="cc-compliance cc-highlight">{{deny}}{{allow}}</div>', 265 "opt-out": '<div class="cc-compliance cc-highlight">{{deny}}{{allow}}</div>' 266 }, 267 type: "info", 268 layouts: { 269 basic: "{{messagelink}}{{compliance}}", 270 "basic-close": "{{messagelink}}{{compliance}}{{close}}", 271 "basic-header": "{{header}}{{message}}{{link}}{{compliance}}" 272 }, 273 layout: "basic", 274 position: "bottom", 275 theme: "block", 276 "static": !1, 277 palette: null, 278 revokable: !1, 279 animateRevokable: !0, 280 showLink: !0, 281 dismissOnScroll: !1, 282 dismissOnTimeout: !1, 283 dismissOnWindowClick: !1, 284 ignoreClicksFrom: ["cc-revoke", "cc-btn"], 285 autoOpen: !0, 286 autoAttach: !0, 287 whitelistPage: [], 288 blacklistPage: [], 289 overrideHTML: null 290 }; 291 return n.prototype.initialise = function (e) { 292 this.options && this.destroy(), t.deepExtend(this.options = {}, y), t.isPlainObject(e) && t.deepExtend(this.options, e), r.call(this) && (this.options.enabled = !1), m(this.options.blacklistPage, location.pathname) && (this.options.enabled = !1), m(this.options.whitelistPage, location.pathname) && (this.options.enabled = !0); 293 var i = this.options.window.replace("{{classes}}
293", c.call(this).join(" ")).replace("{{children}}", l.call(this)), 294 n = this.options.overrideHTML; 295 if ("string" == typeof n && n.length && (i = n), this.options["static"]) { 296 var o = u.call(this, '<div class="cc-grower">' + i + "</div>"); 297 o.style.display = "", this.element = o.firstChild, this.element.style.display = "none", t.addClass(this.element, "cc-invisible") 298 } else this.element = u.call(this, i); 299 b.call(this), g.call(this), this.options.autoOpen && this.autoOpen() 300 }, n.prototype.destroy = function () { 301 this.onButtonClick && this.element && (this.element.removeEventListener("click", this.onButtonClick), this.onButtonClick = null), this.dismissTimeout && (clearTimeout(this.dismissTimeout), this.dismissTimeout = null), this.onWindowScroll && (window.removeEventListener("scroll", this.onWindowScroll), this.onWindowScroll = null), this.onWindowClick && (window.removeEventListener("click", this.onWindowClick), this.onWindowClick = null), this.onMouseMove && (window.removeEventListener("mousemove", this.onMouseMove), this.onMouseMove = null), this.element && this.element.parentNode && this.element.parentNode.removeChild(this.element), this.element = null, this.revokeBtn && this.revokeBtn.parentNode && this.revokeBtn.parentNode.removeChild(this.revokeBtn), this.revokeBtn = null, f(this.options.palette), this.options = null 302 }, n.prototype.open = function (t) { 303 if (this.element) return this.isOpen() || (e.hasTransition ? this.fadeIn() : this.element.style.display = "", this.options.revokable && this.toggleRevokeButton(), this.options.onPopupOpen.call(this)), this 304 }, n.prototype.close = function (t) { 305 if (this.element) return this.isOpen() && (e.hasTransition ? this.fadeOut() : this.element.style.display = "none", t && this.options.revokable && this.toggleRevokeButton(!0), this.options.onPopupClose.call(this)), this 306 }, n.prototype.fadeIn = function () { 307 var i = this.element; 308 if (e.hasTransition && i && (this.afterTransition && s.call(this, i), t.hasClass(i, "cc-invisible"))) { 309 if (i.style.display = "", this.options["static"]) { 310 var n = this.element.clientHeight; 311 this.element.parentNode.style.maxHeight = n + "px" 312 } 313 var r = 20; 314 this.openingTimeout = setTimeout(o.bind(this, i), r) 315 } 316 }, n.prototype.fadeOut = function () { 317 var i = this.element; 318 e.hasTransition && i && (this.openingTimeout && (clearTimeout(this.openingTimeout), o.bind(this, i)), t.hasClass(i, "cc-invisible") || (this.options["static"] && (this.element.parentNode.style.maxHeight = ""), this.afterTransition = s.bind(this, i), i.addEventListener(e.transitionEnd, this.afterTransition), t.addClass(i, "cc-invisible"))) 319 }, n.prototype.isOpen = function () { 320 return this.element && "" == this.element.style.display && (!e.hasTransition || !t.hasClass(this.element, "cc-invisible")) 321 }, n.prototype.toggleRevokeButton = function (e) { 322 this.revokeBtn && (this.revokeBtn.style.display = e ? "" : "none") 323 }, n.prototype.revokeChoice = function (e) { 324 this.options.enabled = !0, this.clearStatus(), this.options.onRevokeChoice.call(this), e || this.autoOpen() 325 }, n.prototype.hasAnswered = function (t) { 326 return Object.keys(e.status).indexOf(this.getStatus()) >= 0 327 }, n.prototype.hasConsented = function (t) { 328 var i = this.getStatus(); 329 return i == e.status.allow || i == e.status.dismiss 330 }, n.prototype.autoOpen = function (e) { 331 !this.hasAnswered() && this.options.enabled ? this.open() : this.hasAnswered() && this.options.revokable && this.toggleRevokeButton(!0) 332 }, n.prototype.setStatus = function (i) { 333 var n = this.options.cookie, o = t.getCookie(n.name), s = Object.keys(e.status).indexOf(o) >= 0; 334 Object.keys(e.status).indexOf(i) >= 0 ? (t.setCookie(n.name, i, n.expiryDays, n.domain, n.path, n.secure), this.options.onStatusChange.call(this, i, s)) : this.clearStatus() 335 }, n.prototype.getStatus = function () { 336 return t.getCookie(this.options.cookie.name) 337 }, n.prototype.clearStatus = function () { 338 var e = this.options.cookie; 339 t.setCookie(e.name, "", -1, e.domain, e.path) 340 }, n 341 }(), e.Location = function () { 342 function e(e) { 343 t.deepExtend(this.options = {}, s), t.isPlainObject(e) && t.deepExtend(this.options, e), this.currentServiceIndex = -1 344 } 345 346 function i(e, t, i) { 347 var n, o = document.createElement("script"); 348 o.type = "text/" + (e.type || "javascript"), o.src = e.src || e, o.async = !1, o.onreadystatechange = o.onload = function () { 349 var e = o.readyState; 350 clearTimeout(n), t.done || e && !/loaded|complete/.test(e) || (t.done = !0, t(), o.onreadystatechange = o.onload = null) 351 }, document.body.appendChild(o), n = setTimeout(function () { 352 t.done = !0, t(), o.onreadystatechange = o.onload = null 353 }, i) 354 } 355 356 function n(e, t, i, n, o) { 357 var s = new (window.XMLHttpRequest || window.ActiveXObject)("MSXML2.XMLHTTP.3.0"); 358 if (s.open(n ? "POST" : "GET", e, 1), s.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), Array.isArray(o)) for (var r = 0, a = o.length; r < a; ++r) { 359 var c = o[r].split(":", 2); 360 s.setRequestHeader(c[0].replace(/^\s+|\s+$/g, ""), c[1].replace(/^\s+|\s+$/g, "")) 361 } 362 "function" == typeof t && (s.onreadystatechange = function () { 363 s.readyState > 3 && t(s) 364 }), s.send(n) 365 } 366 367 function o(e) { 368 return new Error("Error [" + (e.code || "UNKNOWN") + "]: " + e.error) 369 } 370 371 var s = { 372 timeout: 5e3, services: ["ipinfo"], serviceDefinitions: { 373 ipinfo: function () { 374 return { 375 url: "//ipinfo.io", headers: ["Accept: application/json"], callback: function (e, t) { 376 try { 377 var i = JSON.parse(t); 378 return i.error ? o(i) : {code: i.country} 379 } catch (n) {
380 return o({error: "Invalid response (" + n + ")"}) 381 } 382 } 383 } 384 }, ipinfodb: function (e) { 385 return { 386 url: "//api.ipinfodb.com/v3/ip-country/?key={api_key}&format=json&callback={callback}", 387 isScript: !0, 388 callback: function (e, t) { 389 try { 390 var i = JSON.parse(t); 391 return "ERROR" == i.statusCode ? o({error: i.statusMessage}) : {code: i.countryCode} 392 } catch (n) { 393 return o({error: "Invalid response (" + n + ")"}) 394 } 395 } 396 } 397 }, maxmind: function () { 398 return { 399 url: "//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js", 400 isScript: !0, 401 callback: function (e) { 402 return window.geoip2 ? void geoip2.country(function (t) { 403 try { 404 e({code: t.country.iso_code}) 405 } catch (i) { 406 e(o(i)) 407 } 408 }, function (t) { 409 e(o(t)) 410 }) : void e(new Error("Unexpected response format. The downloaded script should have exported `geoip2` to the global scope")) 411 } 412 } 413 } 414 } 415 }; 416 return e.prototype.getNextService = function () { 417 var e; 418 do e = this.getServiceByIdx(++this.currentServiceIndex); while (this.currentServiceIndex < this.options.services.length && !e); 419 return e 420 }, e.prototype.getServiceByIdx = function (e) { 421 var i = this.options.services[e]; 422 if ("function" == typeof i) { 423 var n = i(); 424 return n.name && t.deepExtend(n, this.options.serviceDefinitions[n.name](n)), n 425 } 426 return "string" == typeof i ? this.options.serviceDefinitions[i]() : t.isPlainObject(i) ? this.options.serviceDefinitions[i.name](i) : null 427 }, e.prototype.locate = function (e, t) { 428 var i = this.getNextService(); 429 return i ? (this.callbackComplete = e, this.callbackError = t, void this.runService(i, this.runNextServiceOnError.bind(this))) : void t(new Error("No services to run")) 430 }, e.prototype.setupUrl = function (e) { 431 var t = this.getCurrentServiceOpts(); 432 return e.url.replace(/\{(.*?)\}/g, function (i, n) { 433 if ("callback" === n) { 434 var o = "callback" + Date.now(); 435 return window[o] = function (t) { 436 e.__JSONP_DATA = JSON.stringify(t) 437 }, o 438 } 439 if (n in t.interpolateUrl) return t.interpolateUrl[n] 440 }) 441 }, e.prototype.runService = function (e, t) { 442 var o = this; 443 if (e && e.url && e.callback) { 444 var s = e.isScript ? i : n, r = this.setupUrl(e); 445 s(r, function (i) { 446 var n = i ? i.responseText : ""; 447 e.__JSONP_DATA && (n = e.__JSONP_DATA, delete e.__JSONP_DATA), o.runServiceCallback.call(o, t, e, n) 448 }, this.options.timeout, e.data, e.headers) 449 } 450 }, e.prototype.runServiceCallback = function (e, t, i) { 451 var n = this, o = function (t) { 452 s || n.onServiceResult.call(n, e, t) 453 }, s = t.callback(o, i); 454 s && this.onServiceResult.call(this, e, s) 455 }, e.prototype.onServiceResult = function (e, t) { 456 t instanceof Error || t && t.error ? e.call(this, t, null) : e.call(this, null, t) 457 }, e.prototype.runNextServiceOnError = function (e, t) { 458 if (e) { 459 this.logError(e); 460 var i = this.getNextService(); 461 i ? this.runService(i, this.runNextServiceOnError.bind(this)) : this.completeService.call(this, this.callbackError, new Error("All services failed")) 462 } else this.completeService.call(this, this.callbackComplete, t) 463 }, e.prototype.getCurrentServiceOpts = function () { 464 var e = this.options.services[this.currentServiceIndex]; 465 return "string" == typeof e ? {name: e} : "function" == typeof e ? e() : t.isPlainObject(e) ? e : {} 466 }, e.prototype.completeService = function (e, t) { 467 this.currentServiceIndex = -1, e && e(t) 468 }, e.prototype.logError = function (e) { 469 var t = this.currentServiceIndex, i = this.getServiceByIdx(t); 470 console.warn("The service[" + t + "] (" + i.url + ") responded with the following error", e) 471 }, e 472 }(), e.Law = function () { 473 function e(e) { 474 this.initialise.apply(this, arguments) 475 } 476 477 var i = { 478 regionalLaw: !0, 479 hasLaw: ["AT", "BE", "BG", "HR", "CZ", "CY", "DK", "EE", "FI", "FR", "DE", "EL", "HU", "IE", "IT", "LV", "LT", "LU", "MT", "NL", "PL", "PT", "SK", "ES", "SE", "GB", "UK", "GR", "EU"], 480 revokable: ["HR", "CY", "DK", "EE", "FR", "DE", "LV", "LT", "NL", "PT", "ES"], 481 explicitAction: ["HR", "IT", "ES"] 482 }; 483 return e.prototype.initialise = function (e) { 484 t.deepExtend(this.options = {}, i), t.isPlainObject(e) && t.deepExtend(this.options, e) 485 }, e.prototype.get = function (e) { 486 var t = this.options; 487 return { 488 hasLaw: t.hasLaw.indexOf(e) >= 0, 489 revokable: t.revokable.indexOf(e) >= 0, 490 explicitAction: t.explicitAction.indexOf(e) >= 0 491 } 492 }, e.prototype.applyLaw = function (e, t) { 493 var i = this.get(t); 494 return i.hasLaw || (e.enabled = !1, "function" == typeof e.onNoCookieLaw && e.onNoCookieLaw(t, i)), this.options.regionalLaw && (i.revokable && (e.revokable = !0), i.explicitAction && (e.dismissOnScroll = !1, e.dismissOnTimeout = !1)), e 495 }, e 496 }(), e.initialise = function (i, n, o) { 497 var s = new e.Law(i.law); 498 n || (n = function () { 499 }), o || (o = function () { 500 }); 501 var r = Object.keys(e.status), a = t.getCookie("cookieconsent_status"), c = r.indexOf(a) >= 0; 502 return c ? void n(new e.Popup(i)) : void e.getCountryCode(i, function (t) { 503 delete i.law, delete i.location, t.code && (i = s.applyLaw(i, t.code)), n(new e.Popup(i)) 504 }, function (t) { 505 delete i.law, delete i.location, o(t, new e.Popup(i)) 506 }) 507 }, e.getCountryCode = function (t, i, n) { 508 if (t.law && t.law.countryCode) return void i({code: t.law.countryCode}); 509 if (t.location) { 510 var o = new e.Location(t.location); 511 return void o.locate(function (e) { 512 i(e || {}) 513 }, n) 514 } 515 i({}) 516 }
516, e.utils = t, e.hasInitialised = !0, window.cookieconsent = e 517 } 518}(window.cookieconsent || {});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.