PageSourceSearch

https://www.outdoornativitysets.com/about-us

html outdoornativitysets.com collected 2026-09-26 03:57:14 UTC 349,602 bytes, 5,797 lines download raw bytes

1<!doctype html>
2<html lang="en">
3<head >
4    <meta charset="utf-8"/>
4<script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={licenseKey:"fcf28e5364",applicationID:"95730697",browserID:"95730795"};;/*! For license information please see nr-loader-rum-1.322.0.min.js.LICENSE.txt */
5(()=>{var e={8122(e,t,r){"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),a=0===Object.keys(r).length?e:r;for(let s in a)if(void 0!==e[s])try{if(null===e[s]){r[s]=null;continue}Array.isArray(e[s])&&Array.isArray(t[s])?r[s]=Array.from(new Set([...e[s],...t[s]])):e[s]instanceof Map||e[s]instanceof Set||e[s]instanceof Date||e[s]instanceof RegExp?r[s]=e[s]:"object"==typeof e[s]&&null!==t[s]&&"object"==typeof t[s]?r[s]=i(e[s],t[s]):r[s]=e[s]}catch(e){r[s]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555(e,t,r){"use strict";r.d(t,{f:()=>s});var n=r(384),i=r(8122);const a={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0};function s(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}r.d(t,["D",0,e=>(0,i.a)(e,a)])},7699(e,t,r){"use strict";var n=r(860);const i={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0};r.d(t,["It",0,1e6,"KC",0,i,"qh",0,"SESSION_ERROR"])},9324(e,t,r){"use strict";r.d(t,["xv",0,"1.322.0"])},981(e,t,r){"use strict";r.d(t,["R",0,{AJAX:"AjaxRequest",PA:"PageAction",UA:"UserAction",BP:"BrowserPerformance",WS:"WebSocket",SPV:"SecurityPolicyViolation",JSE:"JavaScriptError",LOG:"Log",PVE:"PageView",PVT:"PageViewTiming",SR:"SessionReplay",ST:"SessionTrace",BI:"BrowserInteraction"}])},6154(e,t,r){"use strict";var n=r(1863);const i="undefined"!=typeof window&&!!window.document,a="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),s=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),o=Boolean("hidden"===s?.document?.visibilityState),c=""+s?.location,u=/iPad|iPhone|iPod/.test(s.navigator?.userAgent),d=u&&"undefined"==typeof SharedWorker,l=((()=>{const e=s.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);Array.isArray(e)&&e.length>=2&&e[1]})(),Date.now()-(0,n.t)());r.d(t,["OF",0,u,"RI",0,i,"WN",0,l,"bv",0,a,"gm",0,s,"m",0,c,"mw",0,o,"sb",0,d,"zk",0,()=>{const e=s?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<s.performance.now())return e}])},3241(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(6154);function i(e={}){try{n.gm.dispatchEvent(new CustomEvent("newrelic",{detail:e}))}catch(e){}}},1687(e,t,r){"use strict";r.d(t,{Ak:()=>o,Ze:()=>u,x3:()=>c});var n=r(3241),i=r(3606),a=r(860),s=r(2646);function o(e,t){if(!e)return;const r={staged:!1,priority:a.P3[t]||0};e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&d(e))}function u(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,d(e)}}function d(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const a=e.ee,o=i.i.handlers;if(a&&!a.aborted&&a.backlog&&o){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=a.backlog[t],r=o[t];if(r){for(let t=0;e&&t<e.length;++t)f(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}
5).forEach(t=>{t[0]?.on&&t[0].context()instanceof s.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}a.isolatedBacklog||delete o[t],a.backlog[t]=null,a.emit("drain-"+t,[])}}function f(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],a=e[2];n.apply(i,a)}})}},7836(e,t,r){"use strict";var n=r(384),i=r(8990),a=r(2646),s=r(5607);const o="nr@context:".concat(s.W),c=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&u.initializedAgents?.[r]?.runtime.isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,a){!1!==a&&(a=!0);if(c.aborted&&!i)return;t&&a&&t.emit(e,r,n);var o=g(n);m(e).forEach(e=>{e.apply(o,r)});var u=v()[s[e]];u&&u.push([f,e,r,o]);return o},get:h,listeners:m,context:g,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach(([e,n])=>{s[n]=t,t in r||(r[t]=[])})},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach(e=>{delete f.backlog[e]})},isBuffering:function(e){return!!v()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function g(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,o,()=>new a.y(o)):new a.y(o)}function p(e,t){n[e]=m(e).concat(t)}function m(e){return n[e]||[]}function h(t){return d[t]=d[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),u=(0,n.Zm)();u.ee||(u.ee=c),r.d(t,["P",0,o,"ee",0,c])},2646(e,t,r){"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908(e,t,r){"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,a){a?(a.buffer([e],i),a.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606(e,t,r){"use strict";r.d(t,{i:()=>a});var n=r(9908);a.on=s;var i=a.handlers={};function a(e,t,r,a){s(a||n.d,i,e,t,r)}function s(e,t,r,i,a){a||(a="feature"),e||(e=n.d);var s=t[a]=t[a]||{};(s[r]=s[r]||[]).push([e,i])}},3878(e,t,r){"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function a(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>a,jT:()=>n,sp:()=>i})},5607(e,t,r){"use strict";const n=(0,r(9566).bz)();r.d(t,["W",0,n])},9566(e,t,r){"use strict";r.d(t,{LA:()=>s,bz:()=>a});var n=r(6154);function i(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").map(e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,a=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const s=[];for(var o=0;o<e;o++)s.push(i(r,a++).toString(16));return s.join("")}},2614(e,t,r){"use strict";r.d(t,["BB",0,18e5,"Wt",0,"NRBA_SESSION::","iL",0,{SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},"tS",0,{STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},"wk",0,144e5])},1863(e,t,r){"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},944(e,t,r){"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},8990(e,t,r){"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389(e,t,r){"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout(()=>{i=clearTimeout(i)},t)),n||(clearTimeout(i),i=setTimeout(()=>{e.apply(this,r)},t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},1910(e,t,r){"use strict";r.d(t,{i:()=>a});var n=r(944);const i=new Map;function a(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),a=t.includes("nrWrapper");return r||a||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},5289(e,t,r){"use strict";r.d(t,{GG:()=>s,Qr:()=>c,sB:()=>o});var n=r(3878),i=r(6389);function a(){return"undefined"==typeof document||"complete"===document.readyState}function s(e,t){if(a())return e();const r=(0,i.J)(e),s=setInterval(()=>
5{a()&&(clearInterval(s),r())},500);(0,n.sp)("load",r,t)}function o(e){if(a())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(a())return e();(0,n.sp)("popstate",e)}},384(e,t,r){"use strict";r.d(t,{Zm:()=>c,bQ:()=>d,dV:()=>u,pV:()=>l});var n=r(6154),i=r(1863),a=r(944),s=r(1910);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function u(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,s.i)(...Object.values(e.o))),e}function d(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,a.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),u(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}r.d(t,["NT",0,o])},2843(e,t,r){"use strict";r.d(t,{G:()=>a,u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)},r,i)}function a(e,t,r){(0,n.sp)("pagehide",e,t,r)}},9300(e,t,r){"use strict";r(860).K7.ajax;r.d(t,["mo",0,{NONE:"none",FAILURES:"failures",ALL:"all"}])},3969(e,t,r){"use strict";const n=r(860).K7.metrics;r.d(t,["TZ",0,n,"XG",0,"storeEventMetrics","xV",0,"storeSupportabilityMetrics"])},6630(e,t,r){"use strict";const n=r(860).K7.pageViewEvent;r.d(t,["T",0,n])},782(e,t,r){"use strict";const n=r(860).K7.pageViewTiming;r.d(t,["T",0,n])},4234(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},7767(e,t,r){"use strict";var n=r(6154);r.d(t,["V",0,e=>n.RI&&!0===e?.privacy.cookies_enabled])},8362(e,t,r){"use strict";r.d(t,{d:()=>a});var n=r(9566),i=r(1741);class a extends i.W{agentIdentifier=(0,n.LA)(16)}},1741(e,t,r){"use strict";r.d(t,{W:()=>a});var n=r(944),i=r(4261);class a{#e(e,...t){if(this[e]!==a.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e("log",e,t)}start(){return this.#e("start")}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},4261(e,t,r){"use strict";r.d(t,["BL",0,"finished","CH",0,"recordReplay","Dl",0,"setUserId","Fw",0,"setPageViewName","PA",0,"setCurrentRouteName","Pv",0,"consent","Tb",0,"pauseReplay","U2",0,"addToTrace","V1",0,"measure","Wb",0,"wrapLogger","bt",0,"setErrorHandler","cD",0,"setCustomAttribute","dT",0,"interaction","eY",0,"register","fF",0,"recordCustomEvent","hG",0,"addPageAction","k6",0,"addRelease","nb",0,"setApplicationVersion","o5",0,"noticeError"])},1738(e,t,r){"use strict";r.d(t,{U:()=>l,Y:()=>d});var n=r(3241),i=r(9908),a=r(1863),s=r(944),o=r(3969),c=r(8362),u=r(860);function d(e,t,r,a){const d=a||r;!d||d[e]&&d[e]!==c.d.prototype[e]||(d[e]=function(){(0,i.p)(o.xV,["API/"+e+"/called"],void 0,u.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:"api-"+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,s.R)(23,e)}})}function l(e,t,r,n,s){const o=e.info;null===r?delete o.jsAttributes[t]:o.jsAttributes[t]=r,(s||null===r)&&(0,i.p)("api-"+n,[(0,a.t)(),t,r],void 0,"session",e.ee)}},8374(e,t,r){r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860(e,t,r){"use strict";const n="events",i="jserrors",a="browser/blobs",s="browser/logs",o={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},c={[o.pageViewEvent]:1,[o.pageViewTiming]:2,[o.metrics]:3,[o.jserrors]:4,[o.softNav]:5,[o.ajax]:6,[o.sessionTrace]:7,[o.sessionReplay]:8,[o.logging]:9,[o.genericEvents]:10},u={[o.pageViewEvent]:"rum",[o.pageViewTiming]:n,[o.ajax]:n,[o.softNav]:n,[o.metrics]:i,[o.jserrors]:i,[o.sessionTrace]:a,[o.sessionReplay]:a,[o.logging]:s,[o.genericEvents]:"ins"};r.d(t,["$J",0,u,"K7",0,o,"P3",0,c,"XX",0,i,"Yy",0,s,"df",0,a,"hg",0,"connect"])}};const t={};function r(n){const i=t[n];if(void 0!==i)return i.exports;const a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.m=e,r.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],a=t[n++];r.o(e,i)?0===a&&n++:0===a?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:a})}else for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,n)=>(r.f[n](e,t),t),[])),r.u=e=>"nr-rum-1.322.0.min.js",r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.322.0.PROD:";r.l=(n,i,a,s)=>{if(e[n])return void e[n].push(i);let o,c;if(void 0!==a){const e=document.getElementsByTagName("script");for(var u=0;u<e.length;u++){const r=e[u];if(r.getAttribute("src")==n||r.getAttribute("data-webpack")==t+a){o=r;break}}}if(!o){c=!0;var d={296:"sha512-/59P7qAoMYQDJAZerTRPChdYcdrlcoEAw2TwA1wz6Y0/XLmt3sblL
5I5JCXAuxG0YxsW7iqJzgrcO7NJWO58EfQ=="};o=document.createElement("script"),o.charset="utf-8",r.nc&&o.setAttribute("nonce",r.nc),o.setAttribute("data-webpack",t+a),o.src=n,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous"),d[s]&&(o.integrity=d[s])}e[n]=[i];const l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(f);const i=e[n];if(delete e[n],o.parentNode?.removeChild(o),i?.forEach(e=>e(r)),t)return t(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)}})(),r.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="https://js-agent.newrelic.com/",(()=>{const e={374:0,840:0};r.f.j=(t,n)=>{let i=r.o(e,t)?e[t]:void 0;if(0!==i)if(i)n.push(i[2]);else{const a=new Promise((r,n)=>i=e[t]=[r,n]);n.push(i[2]=a);const s=r.p+r.u(t),o=new Error,c=n=>{if(r.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed: ("+e+": "+r+")",o.name="ChunkLoadError",o.type=e,o.request=r,i[1](o)}};r.l(s,c,"chunk-"+t,t)}};const t=(t,n)=>{let[i,a,s]=n;var o,c,u=0;if(i.some(t=>0!==e[t])){for(o in a)r.o(a,o)&&(r.m[o]=a[o]);if(s)s(r)}for(t&&t(n);u<i.length;u++)c=i[u],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0},n=self["webpackChunk:NRBA-1.322.0.PROD"]=self["webpackChunk:NRBA-1.322.0.PROD"]||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";r(8374);var e=r(8362),t=r(860);const n=Object.values(t.K7);var i=r(384),a=r(1741);var s=r(2555),o=r(981);t.K7.genericEvents,o.R.PA,o.R.UA,o.R.BP;const c={RESOURCES:"experimental.resources",REGISTER:"register"};var u=r(9300);const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var l=r(2614),f=r(944),g=r(8122);const p="[data-nr-mask]",m=e=>(0,g.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1,iframe_bridge:!1,iframe_domains:[]},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0,capture_payloads:u.mo.NONE},api:{register:{get enabled(){return e.feature_flags.includes(c.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1,get allow_iframe_bridge(){return e.feature_flags.includes(c.IFRAME_BRIDGE)||e.experimental.iframe_bridge},set allow_iframe_bridge(t){e.experimental.iframe_bridge=t},get iframe_domains(){return e.experimental.iframe_domains},set iframe_domains(t){Array.isArray(t)?e.experimental.iframe_domains=t:(0,f.R)(1,t)}}},browser_consent_mode:{enabled:!1},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(c.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:l.wk,inactiveMs:l.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(p):""===t||null===t?e.mask_selector=p:(0,f.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,f.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,f.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]},web_sockets:{enabled:!1}}})());var h=r(6154),v=r(9324);let b=0;const y={buildEnv:"PROD",distMethod:"CDN",version:v.xv,originTime:h.WN},_={consented:!1},w={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||_.consented},set consented(e){_.consented=e}
5,customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,connector:void 0,harvester:void 0,v2Target:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++b},listeningForIframeMessages:!1},R="BA";var A=r(7836),x=r(3241);const E={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0};var S=r(9908);const k="newrelic-iframe-";function T(e,t={},n,o){let{init:c,info:u,loader_config:d,runtime:l={},exposed:f=!0}=t;if(!u){const e=(0,i.pV)();c=e.init,u=e.info,d=e.loader_config}var p;e.init=m(c||{}),e.loader_config=(p=d||{},(0,g.a)(p,E)),u.jsAttributes??={},h.bv&&(u.jsAttributes.isWorker=!0),e.info=(0,s.D)(u);const v=e.init;e.runtime??=(e=>{const t=(0,g.a)(e,w),r=Object.keys(y).reduce((e,t)=>(e[t]={value:y[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)})(l),e.runtime.v2Target??={type:R,instance:e.agentIdentifier,get id(){return e.runtime.appMetadata?.agents?.[0]?.entityGuid},get attributes(){return{"entity.guid":this.id,appId:e.info.applicationID}}},v.proxy.assets&&(e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e})(v.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,i.pV)();Object.getOwnPropertyNames(a.W.prototype).forEach(r=>{const n=a.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let i=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return i?i(...t):n})})}(e),e.runtime.loaderType=n,e.ee=A.ee.get(e.agentIdentifier),e.exposed=f,(0,x.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.init.api.register.allow_iframe_bridge&&h.gm.addEventListener("message",t=>{"string"==typeof t.data?.type&&t.data.type.startsWith(k)&&(0,S.p)("iframe-message",[t],void 0,"IFRAME",e.ee)}),e.runtime.configured=!0)}var j=r(1863),P=r(4261),N=r(1738);
5var O=r(1687),M=r(4234),I=r(5289),D=r(7767);function V(e){return!!(0,i.dV)().o.MO&&(0,D.V)(e)&&!0===e?.session_trace.enabled}var W=r(6389),B=r(7699);const C=new WeakSet,K=new WeakMap;class U extends M.W{constructor(e,t){super(e,t),this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,W.J)(()=>{(0,O.Ak)(e,this.featureName),t()}))}):(0,O.Ak)(e,t)}importAggregator(e,t,n={}){if(this.featAggregate)return;const i=async()=>{if(await this.deferred,this.#t(e),!(0,s.f)(e.info))return(0,f.R)(43),e.ee.abort(),void this.loadedSuccessfully(!1);try{await async function(e,t,n){if(K.has(e))return K.get(e);const i=(async()=>{if((0,D.V)(e.init))try{const{setupAgentSession:t}=await r.e(296).then(r.bind(r,1768));t(e)}catch(e){(0,f.R)(20,e),t.emit("internal-error",[e]),(0,S.p)(B.qh,[e],void 0,n,t)}if(e.init.api.register.allow_iframe_bridge)try{const{setupIframeMFEMessageListener:t}=await Promise.resolve().then(function(){const e=new Error("Cannot find module '../../loaders/configure/iframe-message-handler'");throw e.code="MODULE_NOT_FOUND",e});t(e)}catch(e){(0,f.R)(23,e)}const[{Connector:i},{Harvester:a}]=await Promise.all([r.e(296).then(r.bind(r,6589)),r.e(296).then(r.bind(r,5237))]);e.runtime.connector=new i(e),e.runtime.harvester=new a(e);const s=Object.values(e.features).filter(t=>e.runtime.drainRegistry.has(t.featureName));Promise.all(s.map(e=>e.onAggregateImported)).then(()=>e.runtime.harvester.startTimer())})();K.set(e,i),await i}(e,this.ee,this.featureName)}catch(e){return(0,f.R)(79,e),this.ee.abort(),void this.loadedSuccessfully(!1)}try{if(!this.#r(this.featureName,e.runtime.session,e.init))return this.abortHandler?.(),(0,O.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:r}=await t();this.featAggregate=new r(e,n),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,f.R)(34,e),this.abortHandler?.(),(0,O.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1)}};h.RI?(0,I.GG)(()=>i(),!0):i()}#r(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return V(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}#t(e){if(!C.has(e)&&(C.add(e),!(0,s.f)(e.info))){const t=(0,i.pV)();let r={...t.info?.jsAttributes};try{r={...r,...e.info?.jsAttributes}}catch(e){}T(e,{...t,info:{...t.info,jsAttributes:r},runtime:e.runtime},e.runtime.loaderType)}}}var L=r(6630);class F extends U{static featureName=L.T;constructor(e){var t;super(e,L.T),this.setupInspectionEvents(),t=e,(0,N.Y)(P.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,S.p)("api-"+P.Fw,[(0,j.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>e.init.feature_flags.includes("rum_v2")?r.e(296).then(r.bind(r,908)):r.e(296).then(r.bind(r,7927)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,x.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,I.sB)(t=>{e(t,"DOMContentLoaded")}),(0,I.GG)(t=>{e(t,"load")}),(0,I.Qr)(t=>{e(t,"navigate")}),this.ee.on(l.tS.UPDATE,(e,t)=>{(0,x.W)({type:"lifecycle",name:"session",data:t})})}}class G extends e.d{constructor(e){var t;(super(),h.gm)?(this.features={},(0,i.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(F),T(this,e,e.loaderType||"agent"),t=this,(0,N.Y)(P.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,N.U)(t,e,r,P.cD,n);(0,f.R)(40,typeof r)}else(0,f.R)(39,typeof e)},t),function(e){(0,N.Y)(P.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,f.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,S.p)("api-setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,N.U)(e,"enduser.id",t,P.Dl,!0)},e)}(this),function(e){(0,N.Y)(P.nb,function(t){if("string"==typeof t||null===t)return(0,N.U)(e,"application.version",t,P.nb,!1);(0,f.R)(42,typeof t)},e)}(this),function(e){(0,N.Y)("start",function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,N.Y)(P.Pv,function(t=!0){if("boolean"==typeof t){if((0,S.p)("api-"+P.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum?.()})}}else(0,f.R)(65,typeof t)},e)}(this),this.run()):(0,f.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};
5return n.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),r=[...this.desiredFeatures],i=this.init.feature_flags.includes("rum_v2");r.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),r.forEach(r=>{if(!e[r.featureName]&&(i||r.featureName!==t.K7.pageViewEvent))return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,f.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,f.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,i.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var H=r(2843),z=r(782);class Y extends U{static featureName=z.T;constructor(e){super(e,z.T),h.RI&&((0,H.u)(()=>(0,S.p)("docHidden",[(0,j.t)()],void 0,z.T,this.ee),!0),(0,H.G)(()=>(0,S.p)("winPagehide",[(0,j.t)()],void 0,z.T,this.ee)),this.importAggregator(e,()=>r.e(296).then(r.bind(r,9981))))}}var Z=r(3969);class q extends U{static featureName=Z.TZ;constructor(e){super(e,Z.TZ),this.importAggregator(e,()=>r.e(296).then(r.bind(r,9623)))}}new G({features:[F,Y,q],loaderType:"lite"})})()})();</script>
5
6<meta name="title" content="About Us"/>
7<meta name="robots" content="INDEX,FOLLOW"/>
8<meta name="viewport" content="width=device-width, initial-scale=1"/>
9<title>About Us</title>
10<link  rel="stylesheet" type="text/css"  media="all" href="https://www.outdoornativitysets.com/static/version1789694905/frontend/Kadro/outdoor_nativity_sets_hyva/en_US/css/styles.css" />
11<link  rel="stylesheet" type="text/css"  defer="defer" href="https://www.outdoornativitysets.com/static/version1789694905/frontend/Kadro/outdoor_nativity_sets_hyva/en_US/Hyva_PayPalBraintree/css/apple-pay-and-google-pay.min.css" />
12<!--[if IE 11]>
13<script  type="text/javascript"  src="https://www.outdoornativitysets.com/static/version1789694905/frontend/Kadro/outdoor_nativity_sets_hyva/en_US/Klevu_Search/js/klevu/ieUrlPolyfill.js"></script>
13
14<![endif]-->
15<link  rel="canonical" href="https://www.outdoornativitysets.com/about-us" />
16<link  rel="icon" type="image/x-icon" href="https://www.outdoornativitysets.com/media/favicon/stores/7/favicon.ico" />
17<link  rel="shortcut icon" type="image/x-icon" href="https://www.outdoornativitysets.com/media/favicon/stores/7/favicon.ico" />
18<!-- Theme Scope: Store View -->
19
20<meta name="google-site-verification" content="vOwkjKpVFyjunryPd9BEx-gKNdTYiHNioB3dgP_dxSA" />
21
22<meta name="google-site-verification" content="9NXTtV4JwQL9qo00pyt29yiR95F8CKdYxC5OIpSUnuM" />
23
24<!-- Osano -->
25<script src="https://cmp.osano.com/8ejcWpwXQJ/ba349da9-d966-4213-b936-8868b41d98eb/osano.js"></script>
25
26
27<!-- ContactForm -->
28<script type='text/javascript'>
29    document.addEventListener('DOMContentLoaded', function (event) {
30
31        var openBtn = document.querySelector('.openZendeskHelpButton');
32        var block = document.querySelector('#mobile-contact-block');
33        if(!openBtn) {
34            return;
35        }
36        openBtn.addEventListener("click", function(){
37            if(typeof block !== 'undefined' && block) {
38                block.style.display = "block";
39            }
40        });
41
42        var closeBtn = document.querySelector('#contact-popup-close');
43        if(!closeBtn) {
44            return;
45        }
46        closeBtn.addEventListener("click", function(){
47            if(typeof block !== 'undefined' && block) {
48                block.style.display = "none";
49            }
50        });
51
52       var openLink = document.querySelector('#openZendeskHelpLink');
53       if(!openLink) {
54         return;
55      }
56       openLink.addEventListener("click", function() {
57          openBtn.click();
58       });
59    });
60</script>
60
61
62<!-- Misc -->
63<script type="text/javascript">
64	// Init toggle function
65	if (typeof window.toggleIdVis == 'undefined' 
66		|| window.toggleIdVis == null 
67		|| typeof window.toggleIdVis !== 'function'
68	)  {
69		window.toggleIdVis = function(id) {
70			let elem = document.getElementById(id);
71			if(!elem) {
72				return;
73			}
74			if ( elem.style.display == '' || elem.style.display == 'block' ) { 
75				elem.style.display = 'none';
76			} else {
77				elem.style.display = 'block';
78			}
79		}
80	}
81</script>
81
82
83<!-- UserWay -->
84<script defer src="https://cdn.userway.org/widget.js" data-account="4DTlzP3DEx"></script>
vendor: 2 bytes, line 84
84
85<script type="text/javascript">
86document.addEventListener("DOMContentLoaded", function(event) {
87    // Prevent Userway from interfering with focus on search input on mobile when suggestions are loaded as the user types
88    const observer = new MutationObserver((mutationList) => {
89        for (const mutation of mutationList) {
90            if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
91                var klevuContainers = [].slice.call(mutation.addedNodes).filter(function(e) {
92                    return e.tagName === 'DIV' && e.classList.contains('klevuWrap')
93                });
94                for (const container of klevuContainers) {
95                    for (const klevuLink of Array.from(container.querySelectorAll('a'))) {
96                        klevuLink.dataset.uwRmIgnore = "";
97                    }
98                }
99            }
100        }
101    });
102    observer.observe(document.querySelector('body'), { subtree: true, childList: true });
103});
104</script>
104
105            
106    <link rel="preconnect" href="https&#x3A;&#x2F;&#x2F;statsjs.klevu.com" crossorigin="anonymous"/>    <link rel="preconnect" href="https&#x3A;&#x2F;&#x2F;js.klevu.com" crossorigin="anonymous"/>
107<script nonce="dTVodmpqN2U3dDY0YjBzMGUzN2pjOHcwcnlqdDdmN3o=">
108    window.YIREO_GOOGLETAGMANAGER2_ENABLED = true;
109    (function (events) {
110        const initYireoGoogleTagManager2 = function () {
111            events.forEach(function (eventType) {
112                window.removeEventListener(eventType, initYireoGoogleTagManager2);
113            });
114
115                        (function (w, d, s, l, i) {
116                w[l] = w[l] || [];
117                w[l].push({'gtm.start': new Date().getTime(), event: 'gtm.js'});
118                var f = d.getElementsByTagName(s)[0],
119                    j = d.createElement(s),
120                    dl = l != 'dataLayer' ? '&l=' + l : '';
121                j.async = true;
122                j.src = 'https://www.googletagmanager.com' + '/gtm.js?id=' + i + dl;
123                f.parentNode.insertBefore(j, f);
124            })(window, document, 'script', 'dataLayer', 'GTM-NS6TFXL');
125                    };
126
127        events.forEach(function (eventType) {
128            window.addEventListener(eventType, initYireoGoogleTagManager2, {once: true, passive: true})
129        });
130    })(['load', 'keydown', 'mouseover', 'scroll', 'touchstart', 'wheel']);
131
132    </script>
vendor: 1 bytes, line 132
132
133<script>
134    var BASE_URL = 'https://www.outdoornativitysets.com/';
135    var THEME_PATH = 'https://www.outdoornativitysets.com/static/version1789694905/frontend/Kadro/outdoor_nativity_sets_hyva/en_US';
136    var COOKIE_CONFIG = {
137        "expires": null,
138        "path": "\u002F",
139        "domain": ".www.outdoornativitysets.com",
140        "secure": true,
141        "lifetime": "7884000",
142        "cookie_restriction_enabled": false    };
143    var CURRENT_STORE_CODE = 'ons_site_eng';
144    var CURRENT_WEBSITE_ID = '7';
145
146    window.hyva = window.hyva || {}
147
148    window.cookie_consent_groups = window.cookie_consent_groups || {}
149    window.cookie_consent_groups['necessary'] = true;
150
151    window.cookie_consent_config = window.cookie_consent_config || {};
152    window.cookie_consent_config['necessary'] = [].concat(
153        window.cookie_consent_config['necessary'] || [],
154        [
155            'user_allowed_save_cookie',
156            'form_key',
157            'mage-messages',
158            'private_content_version',
159            'mage-cache-sessid',
160            'last_visited_store',
161            'section_data_ids'
162        ]
163    );
164</script>
vendor: 1 bytes, line 164
164
165<script>
166    'use strict';
167    (function( hyva, undefined ) {
168
169        function lifetimeToExpires(options, defaults) {
170
171            const lifetime = options.lifetime || defaults.lifetime;
172
173            if (lifetime) {
174                const date = new Date;
175                date.setTime(date.getTime() + lifetime * 1000);
176                return date;
177            }
178
179            return null;
180        }
181
182        function generateRandomString() {
183
184            const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
185                length = 16;
186
187            let formKey = '',
188                charactersLength = allowedCharacters.length;
189
190            for (let i = 0; i < length; i++) {
191                formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))]
192            }
193
194            return formKey;
195        }
196
197        const sessionCookieMarker = {noLifetime: true}
198
199        const cookieTempStorage = {};
200
201        const internalCookie = {
202            get(name) {
203                const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
204                return v ? v[2] : null;
205            },
206            set(name, value, days, skipSetDomain) {
207                let expires,
208                    path,
209                    domain,
210                    secure,
211                    samesite;
212
213                const defaultCookieConfig = {
214                    expires: null,
215                    path: '/',
216                    domain: null,
217                    secure: false,
218                    lifetime: null,
219                    samesite: 'lax'
220                };
221
222                const cookieConfig = window.COOKIE_CONFIG || {};
223
224                expires = days && days !== sessionCookieMarker
225                    ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig)
226                    : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires;
227
228                path = cookieConfig.path || defaultCookieConfig.path;
229                domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain);
230                secure = cookieConfig.secure || defaultCookieConfig.secure;
231                samesite = cookieConfig.samesite || defaultCookieConfig.samesite;
232
233                document.cookie = name + "=" + encodeURIComponent(value) +
234                    (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') +
235                    (path ? '; path=' + path : '') +
236                    (domain ? '; domain=' + domain : '') +
237                    (secure ? '; secure' : '') +
238                    (samesite ? '; samesite=' + samesite : 'lax');
239            },
240            isWebsiteAllowedToSaveCookie() {
241                const allowedCookies = this.get('user_allowed_save_cookie');
242                if (allowedCookies) {
243                    const allowedWebsites = JSON.parse(unescape(allowedCookies));
244
245                    return allowedWebsites[CURRENT_WEBSITE_ID] === 1;
246                }
247                return false;
248            },
249            getGroupByCookieName(name) {
250                const cookieConsentConfig = window.cookie_consent_config || {};
251                let group = null;
252                for (let prop in cookieConsentConfig) {
253                    if (!cookieConsentConfig.hasOwnProperty(prop)) continue;
254                    if (cookieConsentConfig[prop].includes(name)) {
255                        group = prop;
256                        break;
257                    }
258                }
259                return group;
260            },
261            isCookieAllowed(name) {
262                const cookieGroup = this.getGroupByCookieName(name);
263                return cookieGroup
264                    ? window.cookie_consent_groups[cookieGroup]
265                    : this.isWebsiteAllowedToSaveCookie();
266            },
267            saveTempStorageCookies() {
268                for (const [name, data] of Object.entries(cookieTempStorage)) {
269                    if (this.isCookieAllowed(name)) {
270                        this.set(name, data['value'], data['days'], data['skipSetDomain']);
271                        delete cookieTempStorage[name];
272                    }
273                }
274            }
275        };
276
277        hyva.getCookie = (name) => {
278            const cookieConfig = window.COOKIE_CONFIG || {};
279
280            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
281                return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null;
282            }
283
284            return internalCookie.get(name);
285        }
286
287        hyva.setCookie = (name, value, days, skipSetDomain) => {
288            const cookieConfig = window.COOKIE_CONFIG || {};
289
290            if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) {
291                cookieTempStorage[name] = {value, days, skipSetDomain};
292                return;
293            }
294            return internalCookie.set(name, value, days, skipSetDomain);
295        }
296
297
298        hyva.setSessionCookie = (name, value, skipSetDomain) => {
299            return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain)
300        }
301
302        hyva.getBrowserStorage = () => {
303            const browserStorage = window.localStorage || window.sessionStorage;
304            if (!browserStorage) {
305                console.warn('Browser Storage is unavailable');
306                return false;
307            }
308            try {
309                browserStorage.setItem('storage_test', '1');
310                browserStorage.removeItem('storage_test');
311            } catch (error) {
312                console.warn('Browser Storage is not accessible', error);
313                return false;
314            }
315            return browserStorage;
316        }
317
318        hyva.postForm = (postParams) => {
319            const form = document.createElement("form");
320
321            let data = postParams.data;
322
323            if (! postParams.skipUenc && ! data.uenc) {
324                data.uenc = btoa(window.location.href);
325            }
326            form.method = "POST";
327            form.action = postParams.action;
328
329            Object.keys(postParams.data).map(key => {
330                const field = document.createElement("input");
331                field.type = 'hidden'
332                field.value = postParams.data[key];
333                field.name = key;
334                form.appendChild(field);
335            });
336
337            const form_key = document.createElement("input");
338            form_key.type = 'hidden';
339            form_key.value = hyva.getFormKey();
340            form_key.name="form_key";
341            form.appendChild(form_key);
342
343            document.body.appendChild(form);
344
345            form.submit();
346        }
347
348        hyva.getFormKey = function () {
349            let formKey = hyva.getCookie('form_key');
350
351            if (!formKey) {
352                formKey = generateRandomString();
353                hyva.setCookie('form_key', formKey);
354            }
355
356            return formKey;
357        }
358
359        hyva.formatPrice = (value, showSign, options = {}) => {
360            const groupSeparator = options.groupSeparator;
361            const decimalSeparator = options.decimalSeparator
362            delete options.groupSeparator;
363            delete options.decimalSeparator;
364            const formatter = new Intl.NumberFormat(
365                'en\u002DUS',
366                Object.assign({
367                    style: 'currency',
368                    currency: 'USD',
369                    signDisplay: showSign ? 'always' : 'auto'
370                }, options)
371            );
372            return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ?
373                formatter.formatToParts(value).map(({type, value}) => {
374                    switch (type) {
375                        case 'currency':
376                            return '\u0024' || value;
377                        case 'minusSign':
378                            return '- ';
379                        case 'plusSign':
380                            return '+ ';
381                        case 'group':
382                            return groupSeparator !== undefined ? groupSeparator : value;
383                        case 'decimal':
384                            return decimalSeparator !== undefined ? decimalSeparator : value;
385                        default :
386                            return value;
387                    }
388                }).reduce((string, part) => string + part) :
389                formatter.format(value);
390        }
391
392        const formatStr = function (str, nStart) {
393            const args = Array.from(arguments).slice(2);
394
395            return str.replace(/(%+)([0-9]+)/g, (m, p, n) => {
396                const idx = parseInt(n) - nStart;
397
398                if (args[idx] === null || args[idx] === void 0) {
399                    return m;
400                }
401                return p.length % 2
402                    ? p.slice(0, -1).replace('%%', '%') + args[idx]
403                    : p.replace('%%', '%') + n;
404            })
405        }
406
407        hyva.str = function (string) {
408            const args = Array.from(arguments);
409            args.splice(1, 0, 1);
410
411            return formatStr.apply(undefined, args);
412        }
413
414        hyva.strf = function () {
415            const args = Array.from(arguments);
416            args.splice(1, 0, 0);
417
418            return formatStr.apply(undefined, args);
419        }
420
421        /**
422         * Take a html string as `content` parameter and
423         * extract an element from the DOM to replace in
424         * the current page under the same selector,
425         * defined by `targetSelector`
426         */
427        hyva.replaceDomElement = (targetSelector, content) => {
428            // Parse the content and extract the DOM node using the `targetSelector`
429            const parser = new DOMParser();
430            const doc = parser.parseFromString(content, 'text/html');
431            const contentNode = doc.querySelector(targetSelector);
432
433            // Bail if content or target can't be found
434            if (!contentNode || !document.querySelector(targetSelector)) {
435                return;
436            }
437
438                        hyva.activateScripts(contentNode);
439            
440            // Replace the old DOM node with the new content
441            document.querySelector(targetSelector).replaceWith(contentNode);
442
443            // Reload customerSectionData and display cookie-messages if present
444            window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
445            hyva.initMessages();
446        }
447
448        hyva.removeScripts = (contentNode) => {
449            const scripts = contentNode.getElementsByTagName('script');
450            for (let i = 0; i < scripts.length; i++) {
451                scripts[i].parentNode.removeChild(scripts[i]);
452            }
453            const templates = contentNode.getElementsByTagName('template');
454            for (let i = 0; i < templates.length; i++) {
455                const container = document.createElement('div');
456                container.innerHTML = templates[i].innerHTML;
457                hyva.removeScripts(container);
458                templates[i].innerHTML = container.innerHTML;
459            }
460        }
461
462        hyva.activateScripts = (contentNode) => {
463            // Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM.
464            const scripts = Array.from(contentNode.getElementsByTagName('script'));
465
466            // Iterate over all script tags to duplicate+inject each into the head
467            for (const original of scripts) {
468                const script = document.createElement('script');
469                original.type && (script.type = original.type);
470                script.innerHTML = original.innerHTML;
471
472                // Remove the original (non-executing) script from the contentNode
473                original.parentNode.removeChild(original)
474
475                // Add script to head
476                document.head.appendChild(script);
477            }
478
479            return contentNode;
480        }
481
482        const replace = {['+']: '-', ['/']: '_', ['=']: ','};
483        hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]);
484
485        let currentTrap;
486
487        const focusableElements = (rootElement) => {
488            const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]';
489            return Array.from(rootElement.querySelectorAll(selector))
490                .filter(el => {
491                    return el.style.display !== 'none'
492                        && !el.disabled
493                        && el.tabIndex !== -1
494                        && (el.offsetWidth || el.offsetHeight || el.getClientRects().length)
495                })
496        }
497
498        const focusTrap = (e) => {
499            const isTabPressed = e.key === 'Tab' || e.keyCode === 9;
500            if (!isTabPressed) return;
501
502            const focusable = focusableElements(currentTrap)
503            const firstFocusableElement = focusable[0]
504            const lastFocusableElement = focusable[focusable.length - 1]
505
506            e.shiftKey
507                ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault())
508                : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault())
509        };
510
511        hyva.releaseFocus = (rootElement) => {
512            if (currentTrap && (!rootElement || rootElement === currentTrap)) {
513                currentTrap.removeEventListener('keydown', focusTrap)
514                currentTrap = null
515            }
516        }
517        hyva.trapFocus = (rootElement) => {
518            if (!rootElement) return;
519            hyva.releaseFocus()
520            currentTrap = rootElement
521            rootElement.addEventListener('keydown', focusTrap)
522            const firstElement = focusableElements(rootElement)[0]
523            firstElement && firstElement.focus()
524        }
525
526        hyva.safeParseNumber = (rawValue) => {
527            const number = rawValue ? parseFloat(rawValue) : null;
528
529            return Array.isArray(number) || isNaN(number) ? rawValue : number;
530        }
531
532        const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('');
533        hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => {
534
535            const camelCase = toCamelCase(name);
536            const key = '__hyva_bool_' + name
537
538            return new Proxy(Object.assign(
539                additionalMethods,
540                {
541                    [key]: !!value,
542                    [name]() {return !!this[key]},
543                    ['!' + name]() {return !this[key]}, // @deprecated This does not work with non-CSP Alpine
544                    ['not' + camelCase]() {return !this[key]},
545                    ['toggle' + camelCase]() {this[key] = !this[key]},
546                    [`set${camelCase}True`]() {this[key] = true},
547                    [`set${camelCase}False`]() {this[key] = false},
548                }
549            ), {
550                set(target, prop, value) {
551                    return prop === name
552                        ? (target[key] = !!value)
553                        : Reflect.set(...arguments);
554                }
555            })
556        }
557
558                hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true})
559        window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true});
560                window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies())
561
562    }( window.hyva = window.hyva || {} ));
563</script>
vendor: 1 bytes, line 563
563
564<script>
565    if (!window.IntersectionObserver) {
566        window.IntersectionObserver = function (callback) {
567            this.observe = el => el && callback(this.takeRecords());
568            this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}];
569            this.disconnect = () => {};
570            this.unobserve = () => {};
571        }
572    }
573</script>
573
574
575<script type="text&#x2F;javascript">
576window.addEventListener('klevu_script_loaded', function() {
577
578    var nowUnixtime = parseInt(Date.now() / 1000);
579
580    function klevufejs_getCookie(name) {
581        if (typeof (name) === "undefined") {
582            name = "klv_mage";
583        }
584        var c = "",
585            ca = document.cookie.split(';');
586
587        for (var i = 0; i < ca.length; i++) {
588            c = ca[i];
589            if (typeof c !== "string") {
590                continue;
591            }
592            var cookiePair = c.split("=");
593
594            if (name === cookiePair[0].trim()) {
595                try {
596                    return JSON.parse(decodeURIComponent(cookiePair[1]));
597                } catch (err) {
598                    // this is fine, data will be regenerated
599                }
600            }
601        }
602        return {
603            expire_sections: {}
604        };
605    }
606
607    document.addEventListener('klevu.customerData.loaded', function (e) {
608    var klevufejs_cookie = klevufejs_getCookie();
609    klevufejs_cookie.expire_sections.customerData = nowUnixtime + 600;
610
611    document.cookie = "klv_mage=" + JSON.stringify(klevufejs_cookie)
612        + "; expires=" + new Date((nowUnixtime + 7884000) * 1000).toUTCString()
613        + "; path=/"
614        + "; samesite=strict";
615    });
616
617    var klevufejs_cookie = klevufejs_getCookie();
618    var klevuData = {
619        ...{
620            customerData: {
621                revalidate_after: -1
622            }
623        },
624        ...JSON.parse(window.localStorage.getItem('klv_mage') || '{}')
625    };
626
627    const klevuCustomerDataLoadedEvent = document.createEvent('CustomEvent');
628    klevuCustomerDataLoadedEvent.initEvent('klevu.customerData.loaded', false, true);
629    const klevuCustomerDataLoadErrorEvent = document.createEvent('CustomEvent');
630    klevuCustomerDataLoadErrorEvent.initEvent('klevu.customerData.loadError', false, true);
631
632    if (typeof klevufejs_cookie.expire_sections !== "object"
633        || (klevufejs_cookie.expire_sections.customerData || -1) < nowUnixtime
634        || klevuData.customerData.revalidate_after < nowUnixtime
635        ) {
636            var xhttp = new XMLHttpRequest();
637            xhttp.onerror = function (request) {
638                document.dispatchEvent(klevuCustomerDataLoadErrorEvent);
639            };
640            xhttp.ontimeout = function (request) {
641                this.onerror(request);
642            };
643            xhttp.onload = function (request) {
644                if (this.status >= 400 || this.timeout) {
645                    this.onerror(request);
646                    return;
647                }
648                var klevuData = JSON.parse(window.localStorage.getItem('klv_mage') || '{}');
649                klevuData.customerData = JSON.parse(this.response);
650                window.localStorage.setItem('klv_mage', JSON.stringify(klevuData));
651                document.dispatchEvent(klevuCustomerDataLoadedEvent);
652            };
653        // TI-956 - Patch to use async request instead of synchronous
654        xhttp.open('GET', 'https://www.outdoornativitysets.com/rest/V1/klevu/customerData', true);
655        xhttp.send();
656    } else {
657        document.dispatchEvent(klevuCustomerDataLoadedEvent);
658    }
659});</script>
659</head>
660<body id="html-body" class="cms-about-us cms-page-view page-layout-1column">
vendor: 68 bytes, lines 660-661
660
661<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
661GTM-NS6TFXL
vendor: 88 bytes, lines 661-663
661" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
662
663    
663<noscript>
664        <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal">
665            <div class="container text-center">
666                <p>
667                    <strong>JavaScript seems to be disabled in your browser.</strong>
668                    <span>
669                        For the best experience on our site, be sure to turn on Javascript in your browser.                    </span>
670                </p>
671            </div>
672        </section>
673    </noscript>
674
675
676<script>
677    document.body.addEventListener('touchstart', () => {}, {passive: true})
678</script>
vendor: 1 bytes, line 678
678
679<script nonce="dTVodmpqN2U3dDY0YjBzMGUzN2pjOHcwcnlqdDdmN3o=">
680    function yireoGoogleTagManager2Pusher(eventData, message, callback) {
681        window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS = window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS || [];
682
683        function doCallback(cb) {
684            if (undefined === cb) {
685                return;
686            }
687
688            cb();
689        }
690
691        
692        const copyEventData = Object.assign({}, eventData);
693        let metaData = {};
694        if (copyEventData.meta) {
695            metaData = copyEventData.meta;
696            delete copyEventData.meta;
697        }
698
699        const eventHash = btoa(encodeURIComponent(JSON.stringify(copyEventData)));
700        if (window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS.includes(eventHash)) {
701            yireoGoogleTagManager2Logger('Warning: Event already triggered', eventData);
702            doCallback(callback);
703            return;
704        }
705
706        if (metaData && metaData.allowed_pages && metaData.allowed_pages.length > 0
707            && false === metaData.allowed_pages.some(page => window.location.pathname.includes(page))) {
708            yireoGoogleTagManager2Logger('Warning: Skipping event, not in allowed pages', window.location.pathname, eventData);
709            doCallback(callback);
710            return;
711        }
712
713        if (!message) {
714            message = 'push (unknown) [unknown]';
715        }
716
717        yireoGoogleTagManager2Logger(message, eventData);
718        window.dataLayer = window.dataLayer || [];
719
720        if (eventData.ecommerce) {
721            window.dataLayer.push({ecommerce: null});
722        }
723
724        try {
725            window.dataLayer.push(eventData);
726            window.YIREO_GOOGLETAGMANAGER2_PAST_EVENTS.push(eventHash);
727        } catch(error) {
728            doCallback(callback);
729        }
730
731        doCallback(callback);
732    }
733</script>
vendor: 1 bytes, line 733
733
734<script nonce="dTVodmpqN2U3dDY0YjBzMGUzN2pjOHcwcnlqdDdmN3o=">
735    function yireoGoogleTagManager2Logger(...args) {
736        const debug = window.YIREO_GOOGLETAGMANAGER2_DEBUG || false;
737        if (false === debug) {
738            return;
739        }
740
741        var color = 'gray';
742        if (args[0].toLowerCase().startsWith('push')) {
743            color = 'green';
744        }
745
746        if (args[0].toLowerCase().startsWith('warning')) {
747            color = 'orange';
748        }
749
750        var css = 'color:white; background-color:' + color + '; padding:1px;'
751        console.log('%cYireo_GoogleTagManager2', css, ...args);
752    }
753</script>
753
754<div class="page-wrapper"><header class="page-header z-10"><div class="mobile-contact-message"><style>
755@media only screen and (max-width: 768px) {
756    .ppage-header .logo img { height: 45px !important; width: 100% !important; }
757   .page-layout-checkout .logo img { height: 45px !important; width: 100% !important; }
758}
759</style></div><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white
760   contentarea"
761   href="#contentarea">
762    <span>
763        Skip to Content    </span>
764</a>
765<div class="klevu-overlay" style="display: none;">
766    <!-- intentionally empty -->
767</div>
768<div id="utility-navigation" class="navigation"><div class="utility-navigation-wrapper"><!-- Block: utility_nav -->
769
770<style>
771.bg-header { background-color: #ffffff; }
772#search-content { display: none !important; }
773#header .text-white { color: #111; }
774
775.product-info-main .mfg_link { display: none; }
776.product-info .slider-item-info .btn { margin: 0 auto; }
777
778@media only screen and (min-width: 767px) {
779  .kadro-navigation { display: none !important; }
780}
781@media only screen and (max-width: 767px) {
782  .search-wrapper { display: none !important; }
783}
784</style>
785
786<!-- CMS Content Page -->
787<style>
788.cms-page-view .column.main .scalemedia {
789    position: relative;
790    height: 0;
791    overflow: hidden;
792    padding-bottom: 56.25%;
793}
794.cms-page-view .column.main .scalemedia iframe {
795    position: absolute;
796    left: 0;
797    top: 0;
798    height: 100%;
799    width: 100%;
800</style>
801
802<!-- PDP Bundles -->
803<style>
804@media (min-width: 768px) {
805  .page-product-bundle .product-options-bottom .card { margin: 30px 0 30px 0; padding: 0 30px 0 30px; }
806}
807.page-product-bundle .product-options-bottom .card { margin: 20px 0 20px 0; padding: 0; }
808.page-product-bundle .product-options-bottom .fieldset-bundle-options>div:first-of-type { border-top-width: 1px; }
809fieldset.fieldset-bundle-options { margin-off: 30px 30px 20px 30px; }
810fieldset.fieldset-bundle-options .border-container.swatch { border: 0; }
811fieldset.fieldset-bundle-options > div:not(.swatch)  { border: 1px solid rgb(209, 213, 219); padding: 0; box-shadow: 0 2px 4px #efefef; }
812fieldset.fieldset-bundle-options > div:not(.swatch)  > div { padding-left: 20px; padding-right: 20px; }
813.catalog-product-view .fieldset .field { padding-left: 0 !important; }
814fieldset.fieldset-bundle-options .border-container { margin-bottom: 2rem; }
815fieldset.fieldset-bundle-options > div:not(.swatch) > label  { background-color: #f7f7f7; padding: 8px; text-transform: uppercase; font-weight: normal; border-color: rgb(209, 213, 219); border-width: 0 0 1px 0; }
816.catalog-product-view fieldset .field.choice .form-checkbox { height: 1.5rem; width: 1.5rem; }
817.catalog-product-view fieldset .field.choice .radio { height: 1.5rem; width: 1.5rem; }
818
819.page-product-bundle .product-options-bottom .fieldset-bundle-options .retail-price-container { font-size: 1.3rem; }
820.page-product-bundle .product-options-bottom .fieldset-bundle-options .retail-price-container .price-wrapper { font-size: 1.3rem; }
821
822#bundleSummary .title { display: none; }
823#bundleSummary .price-box { display: none; }
824
825
826</style>
827
828<!-- Mini Cart Customizations -->
829<style>
830span[x-html="item.product_sku"] {
831    display: none;
832}
833
834div[x-data="{ currentQty: item.qty, isPromoProduct: item.promo_product }"] {
835    display: none;
836}
837</style>
838
839<!-- Turno CSS Customizations -->
840<style>
841  .tt-c-product-about { display: none !important; }
842  #tt-teaser .TTteaser__rating span { font-size: 16px; }
843</style>
844
845
846<!-- Klevu Search CSS -->
847<style>
848.search-index-index .page-title { display: none; }
849</style>
850
851<!-- Klevu Filter CSS -->
852<style>
853.mfg_link { font-size: 17px; color: #454749; text-transform: uppercase; font-weight: bold; }
854.product-info-main .page-title-container { margin-top: .5rem; }
855
856@media screen and (max-width: 800px) {
857
858.product.attribute.sku {
859    display: none;
860}
861
862.product-info-main #gallery {
863  padding-top: 0 !important;
864}
865.product-info-main #gallery {
866  padding-top: 0 !important;
867  width: 90%;
868  margin: 0 auto;
869}
870.js_thumbs_slide {
871  width: 58px;
872}
873#thumbs {
874  min-height: 78px !important;
875  margin-bottom: 10px;
876}
877.product-info-main .price-info-container {
878  margin-bottom: 1rem;
879  --tw-border-opacity: 1;
880  border-bottom: 0;
881  border-style: solid;
882}
883.product-info-main .price-info-container > .stock {
884  float: none;
885  margin-bottom: 1rem;
886  display: block;
887  text-align: left;
888  margin-top: 10px;
889}
890.catalog-product-view .price-info-container > .stock {
891  width: 100%;
892}
893.lead-time {
894  border: 1px solid #ccc;
895  border-radius: 3px;
896  padding: 10px 15px;
897}
898.lead-time div {
899  display: inline-block;
900}
901.product-info-main .price-info-container > .stock a {
902  display: block;
903}
904#tt-teaser span {
905    display: none;
906}
907.TTteaser__read-comments, .TTteaser__read-reviews, .TTteaser__write-review {
908    font-size: 1.3rem;
909}
910#review-tab-label,
911#qa-tab-label {
912    text-transform: uppercase;
913    font-weight: 300;
914}
915#qa-review div.product.data.items {
916    margin: 0 0px 20px;
917}
918#product-accordion .accordion-section-header svg {
919    float: right;
920    display: inline-block;
921    position: absolute;
922    right: 12px;
923    width: 20px;
924    height: 20px;
925}
926#qa-review .product.data.items>.data.item.title>.switch>svg {
927    right: 12px;
928    width: 20px;
929    height: 20px;
930}
931#qa-review .product.data.items>.data.item.title {
932    background: #f7f7f7;
933}
934  
935}
936 
937
938
939
940.product-info-main .border-solid.border-b.border-b-gray-300 {
941    border: 0;
942}
943#review-tab-label, #qa-tab-label {
944        text-transform: uppercase;
945        font-weight: 300;
946        color: rgb(75 85 99 / var(--tw-text-opacity));
947    }
948.product.attribute.sku {
949    margin-top: 5px;
950}
951.product-info-main .price-info-container>.stock,
952.TTteaser__read-comments, .TTteaser__read-reviews, .TTteaser__write-review,
953.product.attribute.sku,
954.product.attribute.product-teaser p,
955#product-accordion .accordion-section-content ul:not(.list)>li,
956span.tt-c-answer__best-answer-text,
957.boatout_free_ship,
958.product-attr-show-block-attention {
959    font-size: 16px;
960}
961.tt-c-question__title {
962    font-size: 18px;
963}
964#product-accordion .accordion-section-header.active,
965#product-accordion .accordion-section-header:hover,
966#product-accordion .accordion-section-header {
967    background-color: #f7f7f7;
968    border-radius: 0;
969    border-left: 0;
970    border-right: 0;
971}
972#product-accordion .accordion-section-header svg {
973    float: right;
974    display: inline-block;
975    position: absolute;
976    right: 12px;
977    width: 20px;
978    height: 20px;
979}
980#product-accordion .accordion-section-header h2 {
981    text-transform: uppercase;
982    font-weight: 300;
983}
984#product-accordion {
985    margin-bottom: 0 !important;
986    position: relative;
987}
988#product-accordion .accordion-section-header svg {
989    float: right;
990}
991.tt-c-review__heading-text {
992    font-size: 1.4rem !important;
993    line-height: 1.1;
994    font-weight: 600 !important;
995}
996.tt-c-reviews-toolbar .tt-o-button {
997    display: none;
998}
999.product.attribute.product-teaser p {
1000  line-height: 25px;
1001}
1002#product-accordion .accordion-section-content .importantNote {
1003  padding: 10px 20px;
1004  margin-top: 20px;
1005  font-size: 16px;
1006}
1007.tt-o-icon--star--full {
1008    fill: #f8b900!important;
1009}
1010.tt-c-callout-comment__text::after {
1011  bottom: -1.8rem;
1012}
1013.tt-c-callout-comment__text {
1014  border-radius: 5px;
1015}
1016.tt-l-grid__header.tt-c-reviews-summary__grid-header {
1017  display: none;
1018}
1019.tt-c-reviews-summary__rating-number {
1020  font-size: 4.4rem;
1021}
1022.tt-o-icon--xl {
1023  width: 2.5rem;
1024  height: 2.5rem;
1025}
1026.tt-o-icon--lg {
1027  width: 1.5rem;
1028  height: 1.5rem;
1029}
1030.tt-o-badge {
1031  display: inline-flex;
1032  align-items: center;
1033  padding: .3rem .8rem;
1034  background-color: #eee;
1035  border-radius: 2rem;
1036  font-size: .9rem;
1037  font-weight: 400;
1038  text-transform: uppercase;
1039  letter-spacing: .08rem;
1040  line-height: normal;
1041  color: #111;
1042  vertical-align: middle;
1043  border: 1px solid #ccc;
1044}
1045.tt-c-review-toolbar.tt-u-mb--xs {
1046  display: none;
1047}
1048.tt-c-question__title {
1049 font-size: 1.5rem;
1050 line-height: 1.3;
1051}
1052.tt-c-answer--best .tt-c-answer__text {
1053  font-size: 1.3rem;
1054  line-height: 1.4;
1055}
1056.price-info-container {
1057    margin-top: 1rem;
1058  }
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072.actions-toolbar .towishlist { display: none; }
1073
1074
1075.slick-prev, .slick-next { z-index: 100 !important; }
1076.kuContainer .kuResults ul .klevuProduct .kuProdWrap footer .kuProdSwatchSlider { margin-top: 0 !important; }
1077.kuContainer .kuResults ul .klevuProduct .kuProdWrap footer .kuProdSwatchSlider .plp-swatch-slider-container .plp-color-option-swatch > * { border: 1px solid #999; }
1078.kuProdAdditionalData .action.tocart.primary  { font-size: 1.2rem; }
1079
1080.kuFilterBox .kuFilterNames ul li a { font-size: 15px; line-height: 120%; }
1081.kuFilterBox { margin-bottom: 20px; }
1082.kuLandingResultsViewSwitchContainer { display: none; }
1083.kuSearchResultsPageContainer .kuPagination a { font-size: 17px; }
1084.noUi-horizontal .noUi-handle-upper .noUi-tooltip { bottom: -40px; }
1085.noUi-horizontal .noUi-handle-lower .noUi-tooltip { bottom: -40px; }
1086#kuFilterOpener { padding: 10px 15px; }
1087body .page-wrapper .klevuLanding.kuSearchResultsPageContainer [data-container-id=ku_landing_main_container] .kuContainer .kuResults ul .klevuProduct .kuProdWrap .kuProdTop .klevuImgWrap img { margin: 1rem .75rem; }
1088body .page-wrapper .klevuLanding.kuSearchResultsPageContainer [data-container-id=ku_landing_main_container] .kuContainer .kuResults ul .klevuProduct .kuProdWrap .kuProdTop .klevuImgWrap { padding-bottom: 100%; }
1089
1090#product-accordion { margin-bottom: 0 !important; }
1091#product-accordion .accordion-section-content ul:not(.list) { line-height: 20px; margin-bottom: 12px; padding-inline-start: 20px; }
1092#product-accordion .accordion-section-content ul:not(.list)>li { line-height: 20px; margin-bottom: 12px; padding-inline-start: 0; }
1093#product-accordion .accordion-section-content { padding: 0 !important; }
1094
1095@media (min-width: 1000px) {
1096  .catalog-category-view #maincontent > .category-cms div[data-content-type="row"] > div { margin: 0 auto; max-width: 1000px; background-color: #efefef; padding: 0 100px; }
1097 }
1098
1099.catalog-product-view-expert-advice .article-body div[data-content-type="row"]:nth-child(2)  { line-height: 0; }
1100.catalog-product-view-expert-advice .article-body div[data-content-type="row"]:nth-child(n+3) > div { margin: 0 auto; max-width: 1000px; background-color: #efefef; padding: 0 100px; }
1101.catalog-product-view-expert-advice .article-body div[data-content-type="row"]:last-child > div { max-width: 1280px;
1101 padding: 0 30px !important; background-color: inherit !important; }
1102
1103.catalog-product-view-expert-advice .article-body a { color: #0057bf; }
1104.catalog-product-view-expert-advice .article-body a:hover { text-decoration: underline; color: #111; }
1105.catalog-product-view-expert-advice  h1 { font-size: 48px !important; }
1106.catalog-product-view-expert-advice .article-body h2 { font-size: 32px; }
1107.catalog-product-view-expert-advice .article-body h3 { font-size: 24px; }
1108.catalog-product-view-expert-advice .article-body h4 { font-size: 1.4rem; font-weight: bold; }
1109
1110.catalog-product-view-expert-advice .article-quote { line-height: 1.3; font-size: 24px; border-left: 3px solid #00263d; padding-left: 13px; margin: 15px 0 24px 50px; }
1111
1112.catalog-product-view-expert-advice .article-toc, .catalog-category-view .article-toc { border: 1px solid #111; background-color: #fff; padding: 15px !important; margin: 15px 0; }
1113.catalog-product-view-expert-advice .article-toc li, .catalog-category-view .article-toc  li { list-style: none; }
1114.catalog-product-view-expert-advice .article-toc li a:hover, .catalog-category-view .article-toc  li a:hover { text-decoration: underline; }
1115.catalog-product-view-expert-advice .article-toc h2, .catalog-category-view .article-toc  h2 { margin-top: 0; }
1116
1117.catalog-product-view-expert-advice .article-toc .level1 { font-weight: bold; }
1118.catalog-product-view-expert-advice .article-toc .level2, .catalog-category-view .article-toc .level2 { padding-left: 2rem; }
1119.catalog-product-view-expert-advice .article-toc .level3, .catalog-category-view .article-toc .level3 { padding-left: 4rem; }
1120
1121.learn-slider:before { content: ''; display: none; }
1122
1123@media (max-width: 1000px) {
1124  .catalog-product-view-expert-advice  h1 { font-size: 30px !important; }
1125  .catalog-product-view-expert-advice .article-body div[data-content-type="row"]:nth-child(n+3) > div { max-width: none; background-color: #efefef; padding: 0 15px !important; }
1126  .catalog-product-view-expert-advice .article-info { font-size: 13px; }
1127}
1128
1129@media only screen and (max-width: 767px) {
1130  .catalog-product-view .column.main>div:not(.custom-html-full-container) { padding: 0; }
1131  .page-header .nav-toggle { top: -5px; }
1132  .logo-container img { height: 45px !important; width: 100% !important; }
1133}
1134
1135@media (min-width: 768px) {
1136    .kadro-navigation {
1137        margin-left: 0;
1138        max-width: 765px;
1139    }
1140  .logo-container img { margin-right: 4rem; }    
1141}
1142
1143@media (max-width: 769px) {
1144  .page-layout-1column.page-with-filter .column.main { padding-top: 0; }
1145  .kuMobileDeviceEnabled .kuContainer { padding-left: 0; padding-right: 0; }
1146  .kuSearchResultsPageContainer .kuFilters { padding-left: 0; padding-right: 0; }
1147
1148  .kuContainer { padding-left: 0; }
1149  .catalog-category-view.page-layout-site-width-grid-no-left-col .column.main { padding: 0 !important; }
1150  .catalog-product-view-expert-advice .page-main { padding: 0 !important; }
1151}
1152</style>
1153
1154<!-- CSS Modifiers -->
1155<style>
1156/*html { font-size: 75.5%; }*/
1157
1158.mfp-title { color: #111; font-size: 1.1rem; }
1159.mfp-bottom-bar { left: auto; margin-top: -65px; }
1160img.mfp-img { padding: 25px 0 60px;  }
1161
1162.braintree-paypal-logo.oneclick-container { display: none; }
1163
1164.category-view .slick-slider .slick-slide .product-item-details .product-item-actions { display: none; }
1165.slick-slider .product-item-info { padding-left: 10px; padding-right: 10px; }
1166.slick-slider .product-item-info  .product-item-name { height: 3.4rem; overflow: hidden; }
1167.slick-dots li button { background-color: #ccc; }
1168
1169.catalog-product-view #maincontent .product-info-main .product-add-form .box-tocart .fieldset .actions { width: 70%; margin-left: 10px; }
1170
1171@media only screen and (max-width: 900px) {
1172  .kuProdBottom .kuPrice { font-size: inherit; }
1173}
1174@media (max-width: 768px) {
1175  .klevuAutoSuggestionsWrap.klevuAutosuggestions li { border: 1px solid #ddd; margin: 5px; text-align: center; }
1176}
1177
1178.kuSearchPersonalizationsContainer [ku-container] a, [ku-container] p, [ku-container] div, [ku-container] ul li { font-size: 1.4rem; }
1179.kuSearchPersonalizationsContainer  .klevuAutoSuggestionsWrap, .kuPopularSearchesBlock  { margin-bottom: 2rem !important; }
1180.kuSearchPersonalizationsContainer  .klevuSuggestionHeading { padding: 0; }
1181.kuSearchPersonalizationsContainer  .klevuHeadingText { margin-bottom: .5rem; }
1182.kuSearchResultsPageContainer .kuResults ul li .kuName { font-size:12px; }
1183.kuSearchResultsPageContainer .kuResults ul li .kuName a { font-size: 12px !important; }
1184body .klevuLanding .kuName .width-height, body .klevuLanding .kuName .width-height { font-size: 12px; }
1185.klevuNoResultsRecs-itemPrice .kuSalePrice, .productQuick-Price .kuSalePrice, .kuPrice .kuSalePrice { font-size: 14px; }
1186.klevuAutoSuggestionsWrap ul li a { line-height: inherit; }
1187
1188body .kuQuickResultsListContainer .klevuProduct .klevuQuickProductName { font-size: 1.4rem !important; }
1189.klevuResultsBlock .klevuQuickSearchResults ul li a.klevuQuickProductInnerBlock { padding: 0; }
1190
1191.klevuProduct.kuQSMenuItem.kuSlide:hover { background-color: #f5f5f5; }
1192.kuQuickResultsListContainer .klevuProduct .klevuQuickProductName { font-size: 1.4rem !important; }
1193
1194.klevuQuickProductDescBlock { height: 45px; overflow: hidden; }
1195
1196#klevuCategoryArea ul > li:nth-child(3) ~ li, .klevuAutoSuggestionsWrap ul > li:nth-child(3) ~ li { display: none; }
1197
1198.kuSearchResultsPageContainer .kuResults ul li .kuName a { font-size: 1.4rem; }
1199
1200.subcats { width: 140px; height: 150px; }
1201.subcats span { font-size: inherit; display: block; }
1202
1203.catalog-product-view #maincontent .product-info-main .page-title { font-size: 2rem; }
1204
1205@media (min-width: 767px) {
1206  .subcats { width: 140px; height: 150px; }
1207  .product-item .product-reviews-summary .reviews-actions { font-size: 1.2rem; }
1208  h1 { 2.8rem; }
1209  .catalog-product-view .column.main>div:not(.custom-html-full-container) { padding-left: 0; padding-right: 0; }
1210}
1211
1212.catalog-product-view .column.main .custom-html-full-container { margin-left: 0; margin-right: 0 }
1213
1214.cart-summary #block-shipping { display: none; }
1215
1216.catalog-product-view   .orig-price-box .price-label { display: inline; font-weight: normal; color: #b54626 !important; font-size: 1.5rem; }
1217.catalog-product-view   .orig-price-box .price-label:before { font-size: 1.7rem; content: '\f218  '; font-family: 'FontAwesome'; }
1218.catalog-product-view   .orig-price-box .price-value { display: inline; font-weight: 700; color: rgba(8,108,162,.7) !important; font-size: 1.7rem !important; text-decoration: line-through; }
1219
1220.catalog-product-view   .item.product.product-item { margin-left: 0 !important; }
1221.catalog-product-view   .fieldset .field { padding-left: 1rem; }
1222.catalog-product-view   .product.pricing { display: none; }
1223
1224.catalog-category-view.page-layout-site-width-grid .columns { padding-left: 0; padding-right: 0; }
1225
1226.product-add-form .fieldset>.field>.label { font-weight: 700; }
1227
1228#product-config-calculator-container+.product-options-wrapper .field .label { min-width: 9.5em; }
1229
1230@media (max-width: 767px) {
1231  .catalog-category-view.page-layout-site-width-grid .column { padding-left: 0; padding-right: 0; }
1232 #product-config-calculator-container+.product-options-wrapper .field { display: inline-block; margin: 0 0 1.5rem !important; }
1233 #product-config-calculator-container+.product-options-wrapper .field .control { display: inline-block; max-width: 160px; }
1234 .sidebar.sidebar-main { position: static !important; }
1235
1236
1237}
1238@media (min-width: 767px) {
1239  #product-config-calculator-container+.product-options-wrapper .field { width: 49% !important; display: inline-block; margin: 0 0 1.5rem !important; }
1240  #product-config-calculator-container+.product-options-wrapper .field .control { display: block; width: 80%; }
1241}
1242
1243.tt-o-pagination__next .tt-o-icon, .tt-o-pagination__back .tt-o-icon { height: 2rem !important; width: 2rem !important; }
1244.TTteaser__icon--empty { stroke: #ffcd3a; }
1245
1246.columns .column.main { padding-bottom: 10px !important; }
1247.page-header .block-search .control { background-color: #00263d; }
1248.catalog-product-view-expert-advice .tt-c-ask__label-text { display: none; }
1249.catalog-category-view.page-layout-category-learn.page-products .column.main { padding: 0 20px; }
1250
1251.cart.table-wrapper .actions-toolbar { padding-bottom: 25px; }
1252
1253.product-social-links { display: none; }
1254
1255.mageplaza-fbt-content ol, .mageplaza-fbt-content ul { padding-left: 0; }
1256.mageplaza-fbt-checkbox-label strong { display: none; }
1257.mageplaza-frequently-bought-together-block hr { display: none; }
1258#block-mageplaza-fbt-heading { font-weight: 600; }
1259
1260.tt-c-gallery__heading { font-weight: 600; text-align: left; }
1261#tt-chatter-heading { font-weight: 600; text-align: left; }
1262#qa-review .title { font-weight: 600; text-align: left; }
1263.catalog-product-view.catalog-product-view-expert-advice #tt-instant-answers-widget { margin-bottom: 2rem; }
1264
1265@media (max-width: 768px) {
1266  .tt-c-reviews-summary__expander, .tt-c-reviews-list-utilities, .tt-c-ratings-breakdown { display: none; }
1267  .tt-c-reviews-summary__write-review.tt-u-mb--xl { margin-bottom: 0; }
1268}
1269
1270.pagebuilder-column .widget-product-grid .product-item .product-item-actions .actions-secondary { display: none !important; }
1271.product-item-details .product-item-actions .actions-secondary { display: none !important; }
1272.product.actions.product-item-actions { text-align: center; }
1273
1274.block.crosssell .product-item .price-final_price { text-align: center; }
1275.block.crosssell .tocart { padding: 8px 6px; }
1276.block.crosssell .products-grid .product-item, .block.crosssell .products-crosssell.products-grid .product-item { width: 24%; padding-left: 10px; }
1277.block.crosssell .product-reviews-summary { display: none;  }
1278.products-crosssell .product-item-name { height: 4.3rem !important; overflow-y: hidden; }
1279
1280@media (max-width: 768px) {
1281  .block.crosssell { display: none; }
1282}
1283
1284.block.block-banners { margin-bottom: 0 !important; }
1285
1286.swatch-option-tooltip {
1287    max-width: 0px !important;
1288    max-height: 0px !important;
1289    overflow:hidden;
1290    min-height: 0px !important;
1291    min-width: 0px !important; border:none !important;
1292    background:transparent !important;
1293}
1294
1295.swatch-option.text {  font-weight: 400;  font-size: 17px; padding: 12px 20px; margin-right: 10px;  margin-top: 4px; }
1296.swatch-option.disabled:after { background: linear-gradient(to left top,rgba(255,255,255,0) 0%,rgba(255,255,255,0) 42%,#fff 43%,#fff 46%,#999 47%,#999 53%,#fff 54%,#fff 57%,rgba(255,255,255,0) 58%,rgba(255,255,255,0) 100%); }
1297
1298.swatch-attribute-selected-option { font-size: 17px; }
1299.swatch-attribute-label { font-weight: 700; font-size: 17px; }
1300
1301@media (min-width: 769px) {
1302  .page-layout-1column.page-with-filter .column.main { padding-top: 0; }
1303}
1304</style>
1305
1306<div class="navbar-container">
1307<ul class="nav navbar-nav"><li class="dropdown"><a href="/about-us" target="" data-toggle="">ABOUT US</a><ul class="dropdown-menu"><li><a href="/about-us" target="">Our Story</a></li><li><a href="/testimonials" target="">
1307Customer Testimonials</a></li></ul></li><li class="no-dropdown"><a href="/photo-gallery" target="" data-toggle="">PHOTO GALLERY</a></li><li class="dropdown"><a href="/contact-us" data-toggle="">QUESTIONS</a><ul class="dropdown-menu"><li><a href="/assembly-videos" target="">Videos</a></li><li><a href="/instructions" target="">Instructions</a></li></ul></li></ul>
1308</div><div class="social-nav"><style>
1309#utility-navigation .social-links { display: none; }
1310.footer.content .free-shipping-nav { display: none; }
1311.page-footer .social-links { text-align: center; }
1312.page-footer .social-links .top-social { display: inline-block; margin: 0 10px; }
1313</style>
1314<div class="free-shipping-nav">
1315  <div class="hidden-sm" style="font-weight: normal; padding: 0px 15px 0px 5px; line-height: 42px;"><I class="fa fa-truck" style="color:#333;"></I> <a href="/shipping-policy">Free Shipping</a> on orders over $150!</div>
1316  <div class="visible-sm" style="font-weight: normal; padding: 0px 5px 0px 2px; font-size: 10px; line-height: 42px;"><I class="fa fa-truck" style="color:#333;"></I> <a href="/shipping-policy">Free Shipping</a> on orders over $150!</div>
1317</div>
1318
1319<div class="social-links">
1320<div class="social-nav"> 
1321
1322		
1323	<div class="f-right top-social"><a href="https://www.facebook.com/OutdoorNativitySets" target="_blank"><span class="fa fa-facebook"> </span></a></div>  	
1324	
1325	<div class="f-right top-social"><a href="https://www.pinterest.com/OutdoorNativity" target="_blank"><span class="fa fa-pinterest"> </span></a></div>  
1326	
1327
1328</div>
1329</div></div><div class="utility-buttons">
1330<script>
1331    function initHeader () {
1332        return {
1333            searchOpen: false,
1334            cart: {},
1335            isCartOpen: false,
1336            getData(data) {
1337                if (data.cart) { this.cart = data.cart }
1338            },
1339            isCartEmpty() {
1340                return !this.cart.summary_count
1341            },
1342            toggleCart(event) {
1343                if (event.detail && event.detail.isOpen !== undefined) {
1344                    this.isCartOpen = event.detail.isOpen
1345                    if (!this.isCartOpen && this.$refs && this.$refs.cartButton) {
1346                        this.$refs.cartButton.focus()
1347                    }
1348                } else {
1349                                        this.isCartOpen = true
1350                }
1351            }
1352        }
1353    }
1354</script>
1354
1355<!--Cart Icon-->
1356<div class="minicart-wrapper" x-data="initHeader()"
1357     @private-content-loaded.window="getData(event.detail.data)">
1358    <button
1359    id="menu-cart-icon"
1360    class="relative inline-block outline-offset-2"
1361    x-ref="cartButton"
1362    :aria-disabled="isCartEmpty()"
1363    :aria-label="`
1364                    Toggle&#x20;minicart,
1365                    ${isCartEmpty()
1366                        ? 'Cart&#x20;is&#x20;empty'
1367                        : cart.summary_count > 1
1368                            ? hyva.str('&#x25;1&#x20;items', cart.summary_count)
1369                            : hyva.str('&#x25;1&#x20;item', cart.summary_count)
1370                    }`"
1371            @click.prevent.stop="() => {
1372                        $dispatch('toggle-cart', { isOpen: true })
1373                    }"
1374        @toggle-cart.window="toggleCart($event)"
1375        :aria-expanded="isCartOpen"
1376        aria-haspopup="dialog"
1377    >
1378
1379    <span class="text-lightgray">MY&#x20;CART</span>
1380    <span
1381        class="text-lightgray"
1382        x-text="'(' + cart.summary_count +')'"
1383        x-show="!isCartEmpty()"
1384        aria-hidden="true"
1385    ></span>
1386            </button>
1387    </div>
1388<div class="my-account-link"><a href="https://www.outdoornativitysets.com/customer/account/" > <span class="fa fa-user "></span><span class="my-account-link-text">Account</span></a></div></div></div></div>
1389  
1390    
1390<script type="application/javascript" async
1391            src="https://static.klaviyo.com/onsite/js/Tz4weC/klaviyo.js"></script>
1391
1392
1393    <div x-data="initKlaviyoCustomerTracking()"
1394         @private-content-loaded.window="sendCustomerDataToKlaviyo(event.detail.data)"></div>
1395    
1395<script>
1396        !function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();
1397
1398        function initKlaviyoCustomerTracking() {
1399            return {
1400                sendCustomerDataToKlaviyo(data) {
1401                    window.klaviyo = window.klaviyo || [];
1402                    const customer = data.customer;
1403
1404                    window.klaviyo.isIdentified().then((identified)=> {
1405                        if(customer && customer.email && !identified) {
1406                            window.klaviyo.identify({
1407                                '$email': customer.email,
1408                                '$first_name': customer.firstname ? customer.firstname : '',
1409                                '$last_name':  customer.lastname ? customer.lastname : ''
1410                            });
1411                        }
1412                    });
1413                }
1414            }
1415        }
1416    </script>
vendor: 1 bytes, line 1416
1416
1417<script>
1418    function initHeader () {
1419        return {
1420            searchOpen: false,
1421            isMobile: false,
1422            cart: {},
1423            isCartOpen: false,
1424            lastY: window.scrollY,
1425            checkMobile() {
1426                this.isMobile = window.innerWidth < 768
1427            },
1428            getData(data) {
1429                if (data.cart) { this.cart = data.cart }
1430            },
1431            isCartEmpty() {
1432                return !this.cart.summary_count
1433            },
1434            toggleCart(event) {
1435                if (event.detail && event.detail.isOpen !== undefined) {
1436                    this.isCartOpen = event.detail.isOpen
1437                    if (!this.isCartOpen && this.$refs && this.$refs.cartButton) {
1438                        this.$refs.cartButton.focus()
1439                    }
1440                } else {
1441                                        this.isCartOpen = true
1442                }
1443            },
1444            setStickyHeader() {
1445                const header = event.currentTarget.document.querySelector('.page-header');
1446                if(header) {
1447                    (window.scrollY <= this.lastY) ? header.classList.add('sticky-header') :  header.classList.remove('sticky-header');
1448                    this.lastY = window.scrollY;
1449                }
1450            }
1451        }
1452    }
1453
1454    function initCompareHeader() {
1455        return {
1456            compareProducts: null,
1457            itemCount: 0,
1458            receiveCompareData(data) {
1459                if (data['compare-products']) {
1460                    this.compareProducts = data['compare-products'];
1461                    this.itemCount = this.compareProducts.count;
1462                }
1463            }
1464        }
1465    }
1466
1467</script>
1467
1468<div id="header"
1469     class="z-30 w-full border-b shadow bg-header border-container-lighter max-md:pb-5"
1470     x-data="initHeader()"
1471     @private-content-loaded.window="getData(event.detail.data)"
1472     @scroll.window="setStickyHeader()"
1473>
1474    <div class="max-w-content flex flex-wrap lg:flex-nowrap items-center justify-between w-full px-6 py-0 mx-auto mt-0 pt-4">
1475
1476        <div class="md:hidden hidden-lg hidden-md nav-toggle"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="text-white" width="32" height="32" role="img">
1477  <path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"/>
1478<title>menu</title></svg>
1479</div>
1480        <!--Logo-->
1481        <div class="logo-container order-1 md:mr-6 md:mb-4 max-md:max-w-180 min-w-180">
1482            <div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0">
1483    <a
1484        class="flex items-center justify-center text-xl font-medium tracking-wide text-gray-800
1485            no-underline hover:no-underline font-title"
1486        href="https://www.outdoornativitysets.com/"
1487        aria-label="Go&#x20;to&#x20;Home&#x20;page"
1488    >
1489        <img
1490            src="https://www.outdoornativitysets.com/media/logo/stores/7/outdoor-nativity-sets-logo.png"
1491            alt="OutdoorNativitySets"
1492            width="203"            height="60"            loading="eager"
1493        />
1494            </a>
1495</div>
1496        </div>
1497
1498        <div class="site-nav flex md:flex-1 flex-col order-2 md:w-2/3">
1499            <!--Main Navigation-->
1500            
1501<script>
1502    function initMenuSections() {
1503        return {
1504            openedIndex: 'menu',
1505            isLoggedIn: false,
1506            setIsLoggedIn: function(data) {
1507                this.isLoggedIn = typeof data.customer.fullname !== 'undefined';
1508            }
1509        }
1510    }
1511
1512    function initKadroMegaMenu() {
1513        return {
1514            toggle:".nav-toggle",
1515            mediaBreakpoint: "768px",
1516            expandBehavior: false,
1517            showImagesMobile: false,
1518            showCmsBlockMobile: false,
1519            mediaQuery: window.matchMedia(`(max-width: 767px)`) ,
1520            mobileNav: document.querySelector("div.sections.nav-sections"),
1521            nav: document.querySelector(".kadro-navigation"),
1522            checkElemType(elem, type) {
1523              const nodeName = elem.nodeName.toLowerCase();
1524              return nodeName === type;
1525            },
1526            childArrayOfType(elem, type) {
1527                var self = this;
1528                return Array.from(elem.children).filter(function (child) {
1529                    return self.checkElemType(child, type);
1530                });
1531            },
1532            childArrayOfClass(elem, className) {
1533                return Array.from(elem.children).filter(function (child) {
1534                    return child.classList.contains(className);
1535                });
1536            },
1537            emptyElement(elem) {
1538                while (elem.lastChild) {
1539                    elem.removeChild(elem.lastChild);
1540                }
1541            },
1542            getAllParents(elem, selector) {
1543                let current = elem,
1544                    list    = [];
1545                while(current.parentElement != null )
1546                {
1547                    if(current.parentElement.matches(selector)) list.push(current.parentElement);
1548                    current = current.parentElement;
1549                }
1550                return list;
1551            },
1552            mediaCheck(mQ) {
1553                if(mQ.matches) {
1554                   this.mobileMenu();
1555                } else {
1556                    this.desktopMenu();
1557                }
1558            },
1559            setMediaQuery() {
1560                var self = this;
1561                self.boundToggle = this.toggleAction.bind(this);
1562                self.mediaCheck(this.mediaQuery);
1563                this.mediaQuery.addEventListener( 'change', self.mediaCheck.bind(self), self.mediaQuery);
1564            },
1565            toggleAction(event) {
1566                event.preventDefault();
1567                this.expandBehavior ? this.mobileNav.classList.add('slide') : '';
1568                this.mobileNav.classList.toggle("mobile");
1569
1570                this.mobileNav.style.maxHeight = window.innerHeight + 'px';
1571
1572                document.querySelector('html').classList.toggle("nav-open");
1573
1574                // removes images from mobile menu
1575                if(!this.showImagesMobile) {
1576                    document.querySelectorAll(".image").forEach(function (elem) {
1577                        elem.classList.toggle('menu-hidden');
1578                    });
1579                }
1580
1581                // removes cms blocks from mobile menu
1582                if(!this.showCmsBlockMobile) {
1583                    document.querySelectorAll(".cmsBlock").forEach(function (elem) {
1584                        elem.classList.add('menu-hidden');
1585                    });
1586                }
1587
1588            },
1589            mobileMenu() {
1590
1591                //search close button hidden on BO
1592                // const pageWrapper = document.querySelector('.page-wrapper');
1593                // const searchCloseBtn = document.querySelector('.search-close-button');
1594                // searchCloseBtn.parentElement.removeChild(searchCloseBtn);
1595                // pageWrapper.prepend(searchCloseBtn);
1596
1597                this.mobileNav.parentElement.style.maxHeight = window.innerHeight + 'px';
1598                const self = this;
1599
1600                // opens & closes mobile menu when hamburger is clicked
1601                document.querySelector(this.toggle).addEventListener('click', self.boundToggle);
1602
1603                // expands submenus when parent item is clicked
1604                document.querySelectorAll(".parent").forEach(function (elem) {
1605                    const childUl = self.childArrayOfType(elem, 'ul');
1606                    if (childUl.length > 0) {
1607                        const anchorChildren = self.childArrayOfType(elem, 'a');
1608                        anchorChildren.forEach(function(elem) {
1609                            elem.classList.add('arrow');
1610                            elem.addEventListener('click', function(event) {
1611                                event.stopPropagation();
1612                                if (event.target.tagName.toLowerCase() == "span"
1613                                    && this.href != window.location.href
1614                                    && this.href != "") {
1615                                    window.location.href = this.href;
1616                                } else {
1617                                    event.preventDefault();
1618                                    var $submenu = elem;
1619                                    if($submenu.closest("li").classList.contains("parent")) {
1620                                        if ($submenu.closest("li").classList.contains("expanded")) {
1621                                            if (self.expandBehavior) {
1622                                                const subMenuChildren = self.childArrayOfClass($submenu.parentElement, 'submenu');
1623                                                subMenuChildren.forEach(function(elem){
1624                                                    elem.animate(
1625                                                        {
1626                                                            left: 100 + '%'
1627                                                        },
1628                                                        {
1629                                                            duration: 300
1630                                                        }
1631                                                    );
1632                                                    var $selectedItem = $submenu.parent.closest("li");
1633                                                    var selectedItemLevel = $selectedItem.dataset.level;
1634                                                    $selectedItem.closest('.expanded.slide').classList.remove('child-expand');
1635                                                    $selectedItem.closest('ul').querySelectorAll('li.' + selectedItemLevel).forEach(
1636                                                        function (elem)
1637                                                        {
1638                                                            elem.classList.remove('hide');
1639                                                        }
1640                                                    )
1641                                                    $selectedItem.classList.toggle("expanded");
1642                                                    $selectedItem.classList.toggle("slide");
1643                                                });
1644                                            } else {
1645                                                $submenu.closest("li").classList.toggle("expanded");
1646                                                $submenu.parentElement.querySelectorAll('.submenu').forEach(function(elem) {
1647                                                    elem.classList.toggle("dropdown");
1648                                                });
1649
1650                                                //Closes children that have been opened
1651                                                const siblings = self.childArrayOfClass($submenu.parentElement, 'submenu');
1652                                                siblings.forEach(function(sibling) {
1653                                                    sibling.querySelectorAll('.expanded').forEach(function(elem){
1654                                                        elem.classList.remove('expanded');
1655                                                        self.childArrayOfClass('submenu').forEach(function(childElem){
1656                                                            childElem.classList.remove('dropdown');
1657                                                        });
1658                                                    });
1659                                                });
1660                                                //translated from this jquery $submenu.siblings('.submenu').find('.expanded').removeClass('expanded').children('.submenu').classList.remove('dropdown');
1661                                            }
1662                                        } else {
1663                                            if (self.expandBehavior) {
1664                                                var $selectedItem = $submenu.closest("li");
1665                                                var selectedItemLevel = $selectedItem.dataset.level;
1666                                                self.getAllParents($selectedItem, 'ul').forEach(
1667                                                    function(parentElem) {
1668                                                        parentElem.querySelectorAll('li.' + selectedItemLevel).forEach(
1669                                                            function(selectedItem) {
1670                                                                selectedItem.classList.toggle('hide');
1671                                                            });
1672                                                    }
1673                                                );
1674                                                $selectedItem.classList.toggle("hide");
1675                                                $selectedItem.classList.toggle("slide");
1676                                                $selectedItem.classList.toggle("expanded ");
1677
1678                                                self.getAllParents($selectedItem,'.expanded.slide').classList.add('child-expand');
1679                                                self.childArrayOfClass($submenu.parentElement,'submenu').forEach(function(sub)
1680                                                    {
1681                                                        sub.animate({
1682                                                            left: 0
1683                                                        }, {duration: 300});
1684                                                });
1685                                            } else {
1686                                                $submenu.parentElement.classList.toggle("expanded");
1687                                                self.childArrayOfClass($submenu.parentElement,'submenu').forEach(function(sub){ sub.classList.toggle("dropdown"); });
1688                                            }
1689                                        }
1690                                    } else {
1691                                        $submenu.parentElement.classList.toggle("expanded");
1692                                    }
1693                                }
1694                            })
1695                        });
1696                    }
1697                });
1698
1699                document.querySelectorAll('.slide-title').forEach(function(elem) {
1700                    elem.addEventListener('click', function(e) {
1701                        self.childArrayOfType(this.closest('.submenu').closest('li'),'a').forEach(function(anchor) {
1702                            anchor.click();
1703                        });
1704                    });
1705                });
1706            },
1707            desktopMenu() {
1708
1709                //completely hidden on BO
1710                // const navSections = document.querySelector('.sections.nav-sections');
1711                // const searchCloseBtn = document.querySelector('.search-close-button');
1712                // searchCloseBtn.parentElement.removeChild(searchCloseBtn);
1713                // navSections.parentElement.insertBefore(searchCloseBtn, navSections);
1714                var self = this;
1715
1716                document.querySelector(this.toggle).removeEventListener('click', self.boundToggle );
1717
1718                this.mobileNav.classList.remove("mobile");
1719                document.querySelector('html').classList.remove("nav-open");
1720
1721                // $('.arrow').unbind(); // Removes click event to prevent event from being fired multiple times when window is resized repeatedly //TODO figure out how to refactor in pure js
1722               // document.querySelector(this.toggle).removeEventListener('click', this.toggleAction); //todo fix for mobile
1723
1724                // un-removes images for desktop
1725                document.querySelectorAll(".image").forEach(function (elem) {
1726                    elem.classList.remove('menu-hidden');
1727                });
1728
1729                // un-removes ms blocks for desktop
1730                document.querySelectorAll(".cmsBlock").forEach(function (elem) {
1731                    elem.classList.remove('menu-hidden');
1732                });
1733
1734                //Special on hover delay openning of submenus
1735                var $topmenu = document.querySelector('.kadro-navigation .shop-dropdown');
1736                var $submenu = document.querySelectorAll('.shop-dropdown > ul > li ');
1737                var topMenuOpenClass = 'shop-dropdown-open';
1738                var subMenuOpenClass = 'submenu-open';
1739                const submenuContainer = document.querySelector('.submenu-container');
1740
1741
1742                var delay = 300;
1743                var timerTop;
1744                var timerSub;
1745                var activeSub = false;
1746
1747                $topmenu.addEventListener( 'mouseover', function() {
1748                    clearTimeout(timerTop);
1749                    document.querySelector(".page-header").classList.add('fixed-header-on-hover')
1750                    $topmenu.classList.add(topMenuOpenClass);
1751
1752                    //Set max height for menu to not exceed height of viewport
1753                    const totalMaxHeight = (window.innerHeight - document.querySelector(".page-header").clientHeight) * 0.9;
1754                    const dropdownUl = document.querySelector('.shop-dropdown > ul');
1755                    dropdownUl.style.maxHeight =  totalMaxHeight + 'px';
1756
1757                    //Set submenu height to match
1758                    document.querySelector('.submenu-container').style.height =  dropdownUl.clientHeight + 'px';
1759
1760                    //Show first menu open
1761                    if(!activeSub) {
1762                        const firstChildSubmenu = dropdownUl.querySelector('li:first-child').querySelector('.submenu').cloneNode(true);
1763                        document.querySelector('.submenu-container').append(firstChildSubmenu);
1764                    }
1765                });
1766                $topmenu.addEventListener( 'mouseout', function() {
1767                    clearTimeout(timerTop);
1768                    timerTop = setTimeout(function() {
1769                        $topmenu.classList.remove(topMenuOpenClass);
1770                        document.querySelector(".page-header").classList.remove('fixed-header-on-hover');
1771                        const open = document.querySelector('.' + subMenuOpenClass);
1772                        if(open) open.classList.remove(subMenuOpenClass);
1773                        //reset menu
1774                        const submenuContainer = document.querySelector('.submenu-container');
1775                        self.emptyElement(submenuContainer);
1776                        activeSub = false;
1777                    }, delay);
1778                });
1779
1780                $submenu.forEach(function (sub)
1781                { sub.addEventListener( 'mouseover', function(e) {
1782                    var $thisSubmenu = this;
1783                    if (!activeSub) { //no menus open
1784                        //reset menu
1785                        self.emptyElement(submenuContainer);
1786                        const $subMenuClone = $thisSubmenu.querySelector('.submenu').cloneNode(true);
1787                        document.querySelector('.submenu-container').append($subMenuClone);
1788                        activeSub = true;
1789                    } else { //at least one menu open
1790                        clearTimeout(timerSub);
1791                        timerSub = setTimeout(function() { //hold for time
1792                            self.emptyElement(submenuContainer);
1793                            const $subMenuClone = $thisSubmenu.querySelector('.submenu').cloneNode(true);
1794                            document.querySelector('.submenu-container').append($subMenuClone);
1795                            activeSub = true;
1796                        }, delay);
1797                    }
1798                });
1799                });
1800
1801                $submenu.forEach(function (sub)
1802                { sub.addEventListener( 'mouseout', function(e) {
1803                    var $thisSubmenu = this;
1804                    clearTimeout(timerSub);
1805                    timerSub = setTimeout(function() { //hold for time
1806                        if (e.relatedTarget && !e.relatedTarget.closest('.submenu-container')) {
1807                            self.emptyElement(submenuContainer);
1808                            $thisSubmenu.classList.toggle(subMenuOpenClass);
1809                            activeSub = false;
1810                        }
1811                    }, delay);
1812                });
1813                });
1814
1815            }
1816        }
1817    }
1818
1819</script>
1819
1820
1821
1822    <div class="sections nav-sections order-3 h-full" x-data="initMenuSections()" @private-content-loaded.window="setIsLoggedIn($event.detail.data)">
1823        <div class="clearfix">
1824            <div class="section-item-title nav-sections-item-title md:hidden" :class="{ 'active': openedIndex === 'menu' }" @click="openedIndex = 'menu'">
1825                <a class="nav-sections-item-switch" href="#store.menu">Menu</a>
1826            </div>
1827
1828            <div class="section-item-title nav-sections-item-title md:hidden" :class="{ 'active': openedIndex === 'account' }" @click="openedIndex = 'account'">
1829                <a class="nav-sections-item-switch" href="#store.links">Account</a>
1830            </div>
1831        </div>
1832
1833        <div class="section-item-content nav-sections-item-content" x-show="openedIndex === 'menu'">
1834            <nav class="kadro-navigation" role="navigation" >
1835                <ul x-data="initKadroMegaMenu()">
1836                    <li @private-content-loaded.window="setMediaQuery()" data-level="level0" class="nav-item level0 level-top shop-dropdown">
1837                        <a class="level-top hover:decoration-white hover:underline hover:decoration-solid" tabindex="-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="inline text-white" width="20" height="20" role="img">
1838  <path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"/>
1839<title>menu</title></svg>
1840<span>Shop</span></a>
1841                        <ul><li data-level="level0"class="nav-item level0   level-top "><a href="/nativity-sets" class="level-top"   tabindex="-1"><span>Nativity Sets</span><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="chevron" width="20" height="20" role="img">
1842  <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/>
1843<title>chevron-down</title></svg>
1844</a></li></ul>
1845                        <div class="submenu-container"></div>
1846                    </li>
1847                                    </ul>
1848            </nav>
1849        </div>
1850
1851        <div class="section-item-content nav-sections-item-content md:hidden" x-show="openedIndex === 'account'">
1852            <ul class="header links">
1853                <li class="link wishlist" x-show="isLoggedIn">
1854                    <a href="https://www.outdoornativitysets.com/wishlist/">Wishlist</a>
1855                </li>
1856                <li class="link authorization-link" x-show="isLoggedIn">
1857                    <a href="https://www.outdoornativitysets.com/customer/account/logout/">Sign Out</a>
1858                </li>
1859                <li class="link authorization-link" x-show="!isLoggedIn">
1860                    <a href="https://www.outdoornativitysets.com/customer/account/login/">Sign In</a>
1861                </li>
1862                <li class="link create-account" x-show="!isLoggedIn">
1863                    <a href="https://www.outdoornativitysets.com/customer/account/create/">Create an Account</a>
1864                </li>
1865            </ul>
1866        </div>
1867    </div>
1868
1869
1870
1871            <div class="flex items-center justify-between max-md:justify-end gap-2 md:gap-1 order-2 md:-mr-1">
1872
1873                <!--Search-->
1874                <div  class="search-wrapper md:relative md:w-3/4">
1875                    <div class="z-10 rounded-lg shadow-sm bg-container-lighter border-container-lighter"
1876                         id="search-content"
1877                         x-cloak
1878                         @resize.debounce.100.window="checkMobile()"
1879                         x-init="checkMobile()"
1880                         x-show="searchOpen || !isMobile"
1881                         @keydown.escape="
1882            $refs.searchButton.focus();
1883         "
1884                    >
1885                        
1885<script>
1886    'use strict';
1887
1888    function initMiniSearch() {
1889        return {
1890            minSearchLength: 1,
1891                        suggestions: [],
1892            suggest() {
1893                const search = this.$refs.searchInput;
1894                if (search.value.length >= this.minSearchLength) {
1895                    search.setCustomValidity('');
1896                    search.reportValidity();
1897                    this.fetchSuggestions(search.value);
1898                } else {
1899                    this.suggestions = [];
1900                }
1901            },
1902            fetchSuggestions(term) {
1903                fetch(
1904                    window.BASE_URL + 'search/ajax/suggest?' + new URLSearchParams({q: term}),
1905                    {
1906                        headers: {
1907                            'X-Requested-With': 'XMLHttpRequest'
1908                        }
1909                    }
1910                )
1911                .then(response => response.json())
1912                .then(result => this.suggestions = result);
1913            },
1914                        search(term) {
1915                const search = this.$refs.searchInput;
1916                term = term || search.value;
1917                if (term.length < this.minSearchLength) {
1918                    search.setCustomValidity('Minimum\u0020Search\u0020query\u0020length\u0020is\u00201');
1919                    search.reportValidity();
1920                } else {
1921                    search.setCustomValidity('');
1922                    search.value = term;
1923                    this.$refs.form.submit();
1924                }
1925            },
1926            focusElement(element) {
1927                if (element && element.nodeName === "DIV") {
1928                    element.focus();
1929                    return true;
1930                } else {
1931                    return false;
1932                }
1933            }
1934        }
1935    }
1936</script>
1936
1937<div class="container py-2 mx-auto text-black" x-data="initMiniSearch()">
1938    <search title="Store" role="search">
1939        <form
1940            id="search_mini_form"
1941            class="form minisearch flex"
1942            action="https://www.outdoornativitysets.com/catalogsearch/result/"
1943            method="get"
1944            @submit.prevent="search()"
1945            x-ref="form"
1946        >
1947            <label class="sr-only" for="search">
1948                Search            </label>
1949            <input
1950                id="search"
1951                x-ref="searchInput"
1952                type="search"
1953                autocomplete="off"
1954                name="q"
1955                value=""
1956                placeholder="Search&#x20;entire&#x20;store&#x20;here..."
1957                maxlength="128"
1958                class="w-full text-lg lg:text-xl text-grey-800 focus:border-transparent focus:outline-none rounded-l"
1959                @search-open.window.debounce.10="$el.focus(); $el.select()"
1960                                    @focus.once="suggest"
1961                    @input.debounce.300="suggest"
1962                    @keydown.arrow-down.prevent="focusElement($root.querySelector('[tabindex]'))"
1963                            >
1964            <button
1965                type="submit"
1966                class="action search btn btn-primary rounded-l-none rounded-r shrink-0 p-3 shadow-none"
1967                title="Search"
1968                aria-label="Search"
1969            >
1970                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true">
1971  <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>
1972</svg>
1973            </button>
1974        </form>
1975    </search>
1976            <template x-if="suggestions.length > 0">
1977            <nav
1978                aria-label="Search&#x20;Suggestions"
1979                class="flex flex-col mt-1 text-grey-800 gap-1"
1980            >
1981                <template x-for="suggestion in suggestions">
1982                    <button
1983                        type="button"
1984                        class="flex justify-between p-2 bg-container-lighter even:bg-container border border-container hover:bg-container-darker"
1985                        @click="search(suggestion.title)"
1986                        @keydown.enter="search(suggestion.title)"
1987                        @keydown.arrow-up.prevent="focusElement($event.target.previousElementSibling) || $refs.searchInput.focus()"
1988                        @keydown.arrow-down.prevent="focusElement($event.target.nextElementSibling)"
1989                    >
1990                        <span x-text="suggestion.title"></span>
1991                        <span x-text="suggestion.num_results"></span>
1992                    </button>
1993                </template>
1994            </nav>
1995        </template>
1996    </div>
1997
1998                    </div>
1999                    <button
2000                        id="menu-search-icon"
2001                        class="rounded p-1 outline-offset-2 md:right-1.5 max-md:left-[-2.5rem] max-md:top-1 md:absolute md:bottom-1/4 relative"
2002                        aria-label="Toggle&#x20;search&#x20;form"
2003                        aria-haspopup="true"
2004                        @click.prevent="
2005                            searchOpen = !searchOpen;
2006                            $dispatch('search-open');
2007                            "
2008                        :aria-expanded="searchOpen"
2009                        x-ref="searchButton"
2010                    >
2011                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="search-toggle-icon text-white max-md:stroke-3" width="24" height="24" aria-hidden="true">
2012  <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>
2013</svg>
2014                        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="search-close-icon text-primary max-md:stroke-3" width="24" height="24" aria-hidden="true">
2015  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
2016</svg>
2017                    </button>
2018                </div>
2019
2020
2021
2022                <style>
2023input[type=text], input[type=password], input[type=url], input[type=tel], input[type=search], input[type=number], input[type=datetime], input[type=email], select { font-size: 16px; }
2024
2025.page-header .contact-message { margin: 0; }
2026
2027@media only screen and (max-width: 767px) {
2028  .page-header .contact-message div { text-align: center !important; margin: 1rem 0 !important; } 
2029  .page-header .header.content .contact-message { margin: 0 !important; }
2030}
2031</style>
2032<div class="hidden-xs contact-message row">
2033<div class="col-sm-2 hidden-xs" style="padding: 0; width: auto;"><i class="fa fa-mobile fa-lg" style="color: #a32c28; font-size: 55px;"></i></div>
2034<div class="col-sm-10 col-xs-6"><span style="font-weight: bold;" class="hidden-xs">NEED HELP?</span> <a style="color: #005581; text-decoration: none;" href="tel:+1855553-4946">(855)-553-4946</a></div>
2035<div class="col-sm-10 col-xs-6"><a href="https://www.outdoornativitysets.com/contact-us"><u>See our holiday hours</u></div>
2036</div>
2037                <!-- Additional Header Elements -->
2038                
2039
2040            </div>
2041        </div>
2042
2043    </div>
2044
2045    <div x-show="searchOpen && isMobile" class="invisible md:hidden py-5 text-lg" style="display:none;">search</div>
2046
2047    <!--Cart Drawer-->
2048    
2048<script>
2049    function initCartDrawer() {
2050        return {
2051            open: false,
2052            isLoading: false,
2053            canCheckout: false,
2054            cart: {},
2055            maxItemsToDisplay: 10,
2056            itemsCount: 0,
2057            qtyCount: 0,
2058            getData(data) {
2059                if (data.cart) {
2060                    this.cart = data.cart;
2061                    this.itemsCount = data.cart.items && data.cart.items.length || 0;
2062                    this.qtyCount = data.cart.summary_count || 0;
2063                    this.setCartItems();
2064                    this.canCheckout = data.cart.possible_onepage_checkout;
2065                }
2066                this.isLoading = false;
2067            },
2068            cartItems: [],
2069            getItemCountTitle() {
2070                return hyva.strf('\u00250\u0020of\u0020\u00251\u0020products\u0020in\u0020cart\u0020displayed', this.maxItemsToDisplay, this.itemsCount)
2071            },
2072            setCartItems() {
2073                this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || [];
2074
2075                if (this.maxItemsToDisplay > 0) {
2076                    this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10));
2077                }
2078            },
2079            buildExtraParamStr(params) {
2080                let i, extraParamStr = '', keys = Object.keys(params);
2081                for(i = 0; i < keys.length; i++) {
2082                    extraParamStr += `&${keys[i]}=${params[keys[i]]}`;
2083                }
2084                return extraParamStr;
2085            },
2086            updateCart(url, params){
2087                this.isLoading = true;
2088
2089                const formKey = hyva.getFormKey();
2090
2091                const paramStr = this.buildExtraParamStr(params);
2092
2093                return fetch(url, {
2094                    "headers": {
2095                        "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
2096                    },
2097                    "body": "form_key=" + formKey + paramStr,
2098                    "method": "POST",
2099                    "mode": "cors",
2100                    "credentials": "include"
2101                });
2102            },
2103            updateQtyOnItemInCart(itemId, qty) {
2104                this.updateCart(
2105                    BASE_URL + 'checkout/sidebar/updateItemQty/',
2106                    {'item_id': itemId, 'item_qty': qty }
2107                ).then(response => {
2108                    if (response.redirected) {
2109                        window.location.href = response.url;
2110                    } else if (response.ok) {
2111                        return response.json();
2112                    } else {
2113                        window.dispatchMessages && window.dispatchMessages([{
2114                            type: 'warning',
2115                            text: 'Could\u0020not\u0020update\u0020item\u0020qty.'
2116                        }]);
2117                        this.isLoading = false;
2118                    }
2119                }).then(result => {
2120                    window.dispatchMessages && window.dispatchMessages([{
2121                        type: result.success ? 'success' : 'error',
2122                        text: result.success
2123                            ? 'You\u0020updated\u0020the\u0020Qty\u0020of\u0020this\u0020item.'
2124                            : result.error_message
2125                    }], result.success ? 5000 : 0)
2126                    window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
2127                });
2128            },
2129            deleteItemFromCart(itemId) {
2130                this.updateCart(
2131                    BASE_URL + 'checkout/sidebar/removeItem/',
2132                    {'item_id': itemId }
2133                ).then(response => {
2134                    if (response.redirected) {
2135                        window.location.href = response.url;
2136                    } else if (response.ok) {
2137                        return response.json();
2138                    } else {
2139                        window.dispatchMessages && window.dispatchMessages([{
2140                            type: 'warning',
2141                            text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.'
2142                        }]);
2143                        this.isLoading = false;
2144                    }
2145                }).then(result => {
2146                    window.dispatchMessages && window.dispatchMessages([{
2147                        type: result.success ? 'success' : 'error',
2148                        text: result.success
2149                            ? 'You\u0020removed\u0020the\u0020item.'
2150                            : result.error_message
2151                    }], result.success ? 5000 : 0)
2152                    window.dispatchEvent(new CustomEvent('reload-customer-section-data'));
2153                });
2154            },
2155            scrollLock(use = true) {
2156                document.body.style.overflow = use ? "hidden" : "";
2157            },
2158            toggleCartDrawer(event) {
2159                if (event.detail && event.detail.isOpen !== undefined) {
2160                    if (event.detail.isOpen) {
2161                        this.openCartDrawer();
2162                    } else {
2163                        this.open = false;
2164                        this.scrollLock(false);
2165                        this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent);
2166                    }
2167                } else {
2168                                        this.openCartDrawer()
2169                }
2170            },
2171            openCartDrawer() {
2172                this.open = true;
2173                this.scrollLock(true);
2174                this.$nextTick(() => {
2175                    this.$refs && this.$refs.cartDialogContent && hyva.trapFocus(this.$refs.cartDialogContent)
2176                })
2177            },
2178            closeCartDrawer() {
2179                this.$dispatch('toggle-cart', { isOpen: false })
2180            },
2181            getSectionDataExtraActions() {
2182                if (!this.cart.extra_actions) {
2183                    return '';
2184                }
2185
2186                const contentNode = document.createElement('div');
2187                contentNode.innerHTML = this.cart.extra_actions;
2188
2189                hyva.activateScripts(contentNode);
2190
2191                return contentNode.innerHTML;
2192            }
2193        }
2194    }
2195</script>
2195
2196<section x-cloak
2197         x-show="cart"
2198         id="cart-drawer"
2199         x-data="initCartDrawer()"
2200         @private-content-loaded.window="getData($event.detail.data)"
2201         @toggle-cart.window="toggleCartDrawer($event)"
2202         @keydown.escape="closeCartDrawer"
2203>
2204    <div role="dialog"
2205         aria-labelledby="cart-drawer-title"
2206         aria-modal="true"
2207         :aria-hidden="!open"
2208         class="fixed inset-y-0 right-0 z-30 flex max-w-full">
2209        <div class="backdrop"
2210             x-show="open"
2211             x-transition:enter="ease-in-out duration-500"
2212             x-transition:enter-start="opacity-0"
2213             x-transition:enter-end="opacity-100"
2214             x-transition:leave="ease-in-out duration-500"
2215             x-transition:leave-start="opacity-100"
2216             x-transition:leave-end="opacity-0"
2217             role="button"
2218             @click="closeCartDrawer"
2219             aria-label="Close&#x20;minicart"></div>
2220        <div class="relative w-screen max-w-lg shadow-2xl"
2221             x-show="open"
2222             x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700"
2223             x-transition:enter-start="translate-x-full"
2224             x-transition:enter-end="translate-x-0"
2225             x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700"
2226             x-transition:leave-start="translate-x-0"
2227             x-transition:leave-end="translate-x-full"
2228             x-ref="cartDialogContent"
2229             role="region"
2230             :tabindex="open ? 0 : -1"
2231             aria-label="My&#x20;Cart"
2232
2233        >
2234            <div class="flex flex-col h-full max-h-screen bg-white shadow-xl">
2235                
2235<script>
2236    function initializeOpenCartEvent(event) {
2237        let oldCart = event.detail.data.oldCart;
2238        let newCart = event.detail.data.privateData.cart;
2239
2240        if(
2241            (!oldCart && newCart) ||
2242            (newCart && (oldCart.summary_count < newCart.summary_count))
2243        ) {
2244            window.dispatchEvent(new CustomEvent('toggle-cart', {detail: {isOpen: true}}));
2245        }
2246    }
2247
2248    window.addEventListener('cart-change', initializeOpenCartEvent)
2249
2250</script>
2250
2251
2252                <header class="relative px-4 py-6 sm:px-6">
2253                    <p id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900">
2254                        <span class="items-total text-xs"
2255                              x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount"
2256                              x-text="getItemCountTitle()">
2257                        </span>
2258                    </p>
2259                </header>
2260
2261                <template x-if="itemsCount">
2262                    <div>
2263                        
2264                        <div class="minicart-summary relative grid gap-6 sm:gap-8 py-3 px-9 bg-white">
2265                            <div class="minicart-details flex">
2266                                <div class="items-total p-3 w-1/2">
2267                                    <span class="count font-bold" x-text="qtyCount"></span>
2268                                    <template x-if="itemsCount > 1">
2269                                        <span>Items in Cart</span>
2270                                    </template>
2271                                    <template x-if="itemsCount == 1">
2272                                        <span>Item in Cart</span>
2273                                    </template>
2274                                </div>
2275                                <div class="minicart-subtotal text-right w-1/2 p-3 space-x-4 transition duration-150 ease-in-out rounded-lg hover:bg-gray-100">
2276                                    <p>Cart Subtotal: <span x-html="cart.subtotal" class="font-bold"></span></p>
2277                                </div>
2278                            </div>
2279
2280                            <template x-if="canCheckout">
2281                                <div class="minicart-actions w-full space-x-4 transition duration-150 ease-in-out font-semibold text-xl hover:bg-gray-100">
2282                                    <a @click.prevent.stop="closeCartDrawer; $dispatch('toggle-authentication',
2283                                    {url: 'https://www.outdoornativitysets.com/checkout/'});"
2284                                       href="https://www.outdoornativitysets.com/checkout/"
2285                                       class="inline-flex p-6 rounded-md w-full leading-8 justify-center btn-primary"
2286                                    >
2287                                        Go to Checkout                                    </a>
2288                                </div>
2289                            </template>
2290                            <div class="minicart-actions" x-html="getSectionDataExtraActions()"></div>
2291                                                    </div>
2292                    </div>
2293                </template>
2294
2295                <!--    custom kadro block -->
2296                <div id="minicart-promo-block">
2297                                    </div>
2298
2299                
2300                <template x-if="!itemsCount">
2301                    <div class="relative px-4 py-6 bg-white border-bs sm:px-6 border-container font-bold">
2302                        You have no items in your shopping cart.                    </div>
2303                </template>
2304
2305                <template x-if="itemsCount">
2306                    <div class="relative gap-6 sm:gap-8 px-1 py-3 sm:px-3 bg-white border-b border-container overflow-y-auto overscroll-y-contain">
2307                        <template x-for="item in cartItems">
2308                            <div class="flex items-start p-3 space-x-4 transition border-t duration-150 ease-in-out rounded-lg hover:bg-gray-100"
2309                                 x-data = "{ currentQty: item.qty }">
2310                                <a :href="item.product_url"
2311                                   class="w-1/4"
2312                                   :aria-label="hyva.strf('Product\u0020\u0022\u00250\u0022', item.product_name)"
2313                                >
2314                                    <img
2315                                        :src="item.product_image.src"
2316                                        :width="item.product_image.width"
2317                                        :height="item.product_image.height"
2318                                        loading="lazy"
2319                                        alt=""
2320                                    />
2321                                </a>
2322                                <div class="w-3/4 space-y-2">
2323                                    <div>
2324                                        <template x-if="item.promo_product || item.promo_product_free_product">
2325                                            <div>
2326                                                <span class="leading-none text-lg">
2327                                                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="inline" width="18" height="18" role="img">
2328  <path fill-rule="evenodd" d="M5 5a3 3 0 015-2.236A3 3 0 0114.83 6H16a2 2 0 110 4h-5V9a1 1 0 10-2 0v1H4a2 2 0 110-4h1.17C5.06 5.687 5 5.35 5 5zm4 1V5a1 1 0 10-1 1h1zm3 0a1 1 0 10-1-1v1h1z" clip-rule="evenodd"/>
2329  <path d="M9 11H3v5a2 2 0 002 2h4v-7zM11 18h4a2 2 0 002-2v-5h-6v7z"/>
2330<title>gift</title></svg>
2331                                                </span>
2332                                                <span>
2333                                                    FREE GIFT                                                </span>
2334                                            </div>
2335                                        </template>
2336                                        <a :href="item.product_url" class="text-xl">
2337                                            <span x-html="item.product_name"></span>
2338                                        </a>
2339                                        <template x-if="!(item.promo_product || item.promo_product_free_product)">
2340                                            <p
2341                                                class="text-sm"
2342                                                :class="{'hidden': item.product_type === 'bundle'}"
2343                                            >
2344                                                <span x-html="item.product_sku"></span>
2345                                            </p>
2346                                        </template>
2347                                    </div>
2348                                    <template x-if="item.options.length > 0">
2349                                        <div class="item-options-container" x-data="{ opened: false }">
2350                                            <span class="toggle cursor-pointer" @click="opened = !opened">
2351                                                See Details                                                 <template x-if="opened">
2352                                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6 inline text-[#8f8f8f]" width="32" height="32" role="img">
2353  <path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"/>
2354<title>chevron-up</title></svg>
2355                                                </template>
2356                                                <template x-if="!opened">
2357                                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6 inline text-[#8f8f8f]" width="32" height="32" role="img">
2358  <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/>
2359<title>chevron-down</title></svg>
2360                                                </template>
2361                                            </span>
2362                                            <template x-if="opened">
2363                                                <div class="item-options-wrapper mb-[20px]">
2364                                                    <template x-for="option in item.options">
2365                                                        <div class="pt-2">
2366                                                            <p class="font-semibold inline mr-[10px]" x-text="option.label + ':'"></p>
2367                                                            <p class="text-secondary inline" x-html="option.value"></p>
2368                                                        </div>
2369                                                    </template>
2370                                                </div>
2371                                            </template>
2372                                        </div>
2373                                    </template>
2374                                    <p>
2375                                        <span x-html="item.product_price"></span>
2376                                        <template x-if="item.promo_product || item.promo_product_free_product">
2377                                            <span class="line-through pl-4 inline-block" x-html="item.promo_original_price"></span>
2378                                        </template>
2379                                                                                <template x-if="item.upsell_original_price > item.product_price_value">
2380                                            <span class="line-through pl-4 inline-block" x-html="hyva.formatPrice(item.upsell_original_price)"></span>
2381                                        </template>
2382                                    </p>
2383                                    <div itemclass="pt-4" class="flex flex-wrap justify-between">
2384                                        <template x-if="!(item.promo_product || item.promo_product_free_product)">
2385                                            <div class="w-3/4 flex gap-4 justify-right items-center">
2386                                                <label class="w-1/6 inline-flex" for="'qty-input-' + item.product_sku">
2387                                                    <span>Qty:</span>
2388                                                </label>
2389
2390                                                    <input class="inline-flex w-2/6 leading-normal" type="text" :name="'qty-input-' + item.product_sku" id="'qty-input-' + item.product_sku" x-model="currentQty" :value="item.qty"/>
2391                                                    <button class="py-1 inline-flex w-3/6 justify-center rounded-md bg-new-blue text-white font-semibold" :class="currentQty != item.qty ? '' : 'invisible'" @click="updateQtyOnItemInCart(item.item_id, currentQty)">Update</button>
2392
2393                                            </div>
2394                                        </template>
2395                                        <template x-if="!(item.promo_product || item.promo_product_free_product)">
2396                                            <div class="w-1/4 flex justify-right items-center">
2397                                                <button type="button"
2398                                                        class="inline-flex p-1 w-1/2"
2399                                                        @click="deleteItemFromCart(item.item_id)"
2400                                                        :aria-label="hyva.strf('Remove\u0020product\u0020\u0022\u00250\u0022\u0020from\u0020cart', item.product_name)"
2401                                                >
2402                                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true">
2403  <path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/>
2404</svg>
2405                                                </button>
2406                                            </div>
2407                                        </template>
2408                                    </div>
2409
2410                                </div>
2411                            </div>
2412                        </template>
2413                    </div>
2414                </template>
2415
2416                <template x-if="itemsCount">
2417                    <div class="p-4 text-center">
2418                        <a href="https://www.outdoornativitysets.com/checkout/cart/"
2419                        >
2420                            View and Edit Cart                        </a>
2421                    </div>
2422                </template>
2423
2424                
2424<script>
2425    function prepareMollieApplePayMinicart() {
2426        const objectToFormData = (object, prefix = null, formDataObject = null) => {
2427            const formData = formDataObject || new FormData();
2428            Object.keys(object).forEach(key => {
2429                const value = object[key];
2430                const name = prefix ? `${prefix}[${key}]` : key;
2431                if (value instanceof Object) {
2432                    objectToFormData(value, name, formData);
2433                } else {
2434                    formData.append(name, value);
2435                }
2436            });
2437
2438            return new URLSearchParams(formData).toString();
2439        };
2440
2441        return {
2442            totalAmount: 0,
2443
2444            init: () => {
2445                // Normally we would use private-content-loaded to get this information, but this component is
2446                // rendered after this event has been dispatched. So get the information from the browser storage.
2447                const browserStorage = hyva.getBrowserStorage();
2448                if (browserStorage) {
2449                    const cacheStorage = browserStorage.getItem('mage-cache-storage');
2450                    const cart = JSON.parse(cacheStorage).cart;
2451
2452                    this.totalAmount = cart.subtotalAmount;
2453                }
2454
2455                window.addEventListener('private-content-loaded', event => {
2456                    this.totalAmount = event.detail.data.cart.subtotalAmount
2457                })
2458            },
2459
2460            pay: () => {
2461                // The $block total is more reliable as it holds shipping costs and discounts, but due to some setups
2462                // it is sometimes empty. In that case, use the totalAmount from the browser storage.
2463                // The correct total amount is retrieved and set during the shipping step.
2464                const amount = "" || this.totalAmount;
2465                let countryCode, postalCode, shippingMethods, selectedShippingMethod, quoteTotals;
2466
2467                const request = {
2468                    countryCode: "US",
2469                    currencyCode: "USD",
2470                    supportedNetworks: ["amex","masterCard","visa","maestro","vPay"],
2471                    merchantCapabilities: ['supports3DS'],
2472                    total: {
2473                        label: "English\u0020\u0028ONS\u0029",
2474                        amount: amount
2475                    },
2476                    shippingType: 'shipping',
2477                    requiredBillingContactFields: [
2478                        'postalAddress',
2479                        'name',
2480                        'email',
2481                        'phone'
2482                    ],
2483                    requiredShippingContactFields: [
2484                        'postalAddress',
2485                        'name',
2486                        'email',
2487                        'phone'
2488                    ]
2489                }
2490
2491                let session = new ApplePaySession(3, request);
2492
2493                const getTotal = () => {
2494                    let totals = [...quoteTotals];
2495                    let total = totals.pop();
2496
2497                    total.label = "English\u0020\u0028ONS\u0029";
2498
2499                    return total;
2500                };
2501
2502                const getLineItems = () => {
2503                    let totals = [...quoteTotals];
2504                    totals.pop();
2505
2506                    return totals;
2507                };
2508
2509                const handleAjaxError = (message) => {
2510                    session.abort();
2511
2512                    dispatchMessages([
2513                        {
2514                            text: message,
2515                            type: 'error'
2516                        }
2517                    ]);
2518                };
2519
2520                session.onpaymentmethodselected = () => {
2521                    session.completePaymentMethodSelection(getTotal(), []);
2522                };
2523
2524                session.onshippingcontactselected = (event) => {
2525                    countryCode = event.shippingContact.countryCode;
2526                    postalCode = event.shippingContact.postalCode;
2527
2528                    fetch(`${BASE_URL}mollie/applePay/shippingMethods?form_key=${hyva.getFormKey()}`, {
2529                        method: 'POST',
2530                        headers: {
2531                            'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
2532                        },
2533                        body: 'countryCode=' + event.shippingContact.countryCode +
2534                            '&postalCode=' + event.shippingContact.postalCode
2535                    })
2536                        .then(response => {
2537                            if (!response.ok) {
2538                                throw new Error('Network response was not ok');
2539                            }
2540                            return response.json();
2541                        })
2542                        .then(result => {
2543                            shippingMethods = result.shipping_methods;
2544                            selectedShippingMethod = result.shipping_methods[0];
2545                            quoteTotals = result.totals;
2546
2547                            session.completeShippingContactSelection(
2548                                ApplePaySession.STATUS_SUCCESS,
2549                                result.shipping_methods,
2550                                getTotal(),
2551                                getLineItems()
2552                            );
2553                        })
2554                        .catch(error => handleAjaxError(error));
2555                };
2556
2557                session.onshippingmethodselected = (event) => {
2558                    selectedShippingMethod = event.shippingMethod;
2559
2560                    fetch(`${BASE_URL}mollie/applePay/shippingMethods?form_key=${hyva.getFormKey()}`, {
2561                        method: 'POST',
2562                        headers: {
2563                            'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
2564                        },
2565                        body: objectToFormData({
2566                            shippingMethod: selectedShippingMethod,
2567                            countryCode: countryCode,
2568                            postalCode: postalCode
2569                        })
2570                    })
2571                        .then(response => {
2572                            if (!response.ok) {
2573                                throw new Error('Network response was not ok');
2574                            }
2575                            return response.json();
2576                        })
2577                        .then(result => {
2578                            quoteTotals = result.totals;
2579
2580                            session.completeShippingMethodSelection(
2581                                ApplePaySession.STATUS_SUCCESS,
2582                                getTotal(),
2583                                getLineItems()
2584                            );
2585                        })
2586                        .catch(error => handleAjaxError(error));
2587                };
2588
2589                session.onpaymentauthorized = (event) => {
2590                    fetch(`${BASE_URL}mollie/applePay/placeOrder?form_key=${hyva.getFormKey()}`, {
2591                        method: 'POST',
2592                        headers: {
2593                            'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
2594                        },
2595                        body: objectToFormData({
2596                            shippingMethod: selectedShippingMethod,
2597                            billingAddress: event.payment.billingContact,
2598                            shippingAddress: event.payment.shippingContact,
2599                            applePayPaymentToken: JSON.stringify(event.payment.token)
2600                        })
2601                    })
2602                        .then(response => {
2603                            if (!response.ok) {
2604                                throw new Error('Network response was not ok');
2605                            }
2606                            return response.json();
2607                        })
2608                        .then(result => {
2609                            if (!session) {
2610                                console.warn('Payment canceled');
2611                                return;
2612                            }
2613
2614                            if (result.error) {
2615                                handleAjaxError(result.error_message);
2616                                return;
2617                            }
2618
2619                            if (!result.url) {
2620                                handleAjaxError('Something went wrong, please try again later.');
2621                                return;
2622                            }
2623
2624                            session.completePayment(ApplePaySession.STATUS_SUCCESS);
2625
2626                            window.dispatchEvent(new CustomEvent("reload-customer-section-data"));
2627
2628                            setTimeout(() => {
2629                                location.href = result.url;
2630                            }, 1000);
2631                        })
2632                        .catch(error => handleAjaxError(error));
2633                };
2634
2635                session.onvalidatemerchant = (event) => {
2636                    fetch(
2637                        `${BASE_URL}mollie/checkout/applePayValidation?form_key=${hyva.getFormKey()}`,
2638                        {
2639                            method: 'POST',
2640                            headers: {
2641                                'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
2642                            },
2643                            body: objectToFormData({validationURL: event.validationURL}),
2644                        }
2645                    )
2646                        .then((response) => {
2647                            if (!response.ok) {
2648                                throw new Error('Merchant validation failed');
2649                            }
2650
2651                            return response.json()
2652                        })
2653                        .then((result) => session.completeMerchantValidation(result))
2654                        .catch(error => handleAjaxError(error));
2655                };
2656
2657                session.oncancel = () => {
2658                    session = null;
2659                }
2660
2661                session.begin();
2662            }
2663        }
2664    }
2665
2666    window.addEventListener(
2667        'alpine:init',
2668        () => Alpine.data('prepareMollieApplePayMinicart', prepareMollieApplePayMinicart),
2669        {once: true}
2670    )
2671</script>
2671
2672            </div>
2673
2674            <button
2675                type="button"
2676                @click="closeCartDrawer"
2677                aria-label="Close&#x20;minicart"
2678                class="absolute top-0 right-2 p-4 mt-2 text-gray-300 transition-colors hover:text-black"
2679            >
2680                <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
2681  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
2682</svg>
2683            </button>
2684        </div>
2685        <div
2686    class="z-50 fixed inset-0 grid place-items-center bg-white/70 text-primary"
2687    x-cloak
2688    x-show="isLoading"
2689    x-transition.opacity.duration.200ms
2690>
2691    <div class="flex gap-10 items-center p-4">
2692        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" width="57" height="57" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
2693    <style>
2694        @keyframes spinner-ball-triangle1 {
2695            0% { transform: translate(0%, 0%); }
2696            33% { transform: translate(38%, -79%); }
2697            66% { transform: translate(77%, 0%); }
2698            100% { transform: translate(0%, 0%); }
2699        }
2700
2701        @keyframes spinner-ball-triangle2 {
2702            0% { transform: translate(0%, 0%); }
2703            33% { transform: translate(38%, 79%); }
2704            66% { transform: translate(-38%, 79%); }
2705            100% { transform: translate(0%, 0%); }
2706        }
2707
2708        @keyframes spinner-ball-triangle3 {
2709            0% { transform: translate(0%, 0%); }
2710            33% { transform: translate(-77%, 0%); }
2711            66% { transform: translate(-38%, -79%); }
2712            100% { transform: translate(0%, 0%); }
2713        }
2714    </style>
2715    <circle cx="5" cy="50" r="5" style="animation: spinner-ball-triangle1 2.2s linear infinite"/>
2716    <circle cx="27" cy="5" r="5" style="animation: spinner-ball-triangle2 2.2s linear infinite"/>
2717    <circle cx="49" cy="50" r="5" style="animation: spinner-ball-triangle3 2.2s linear infinite"/>
2718</svg>
2719        <span class="text-xl select-none">
2720            Loading...        </span>
2721    </div>
2722</div>
2723    </div>
2724
2725</section>
2726
2727    <!--Authentication Pop-Up-->
2728    
2728<script>
2729    function initAuthentication() {
2730        return {
2731            open: false,
2732            close() {
2733                this.open = false;
2734            },
2735            forceAuthentication: false,
2736            checkoutUrl: 'https://www.outdoornativitysets.com/checkout/index/',
2737            errors: 0,
2738            hasCaptchaToken: 0,
2739            displayErrorMessage: false,
2740            errorMessages: [],
2741            setErrorMessages(message) {
2742                this.errorMessages = [message];
2743                this.displayErrorMessage = true;
2744            },
2745            submitForm() {
2746                // Do not rename $form, the variable is expected to be declared in the recaptcha output
2747                const $form = document.querySelector('#login-form');
2748                    if (!this.hasCaptchaToken) {
2749        this.errors = 1;
2750
2751
2752        const executeGreCaptcha = () => {
2753            grecaptcha.ready(() => {
2754                grecaptcha.execute(
2755                    '6Lf7qRkjAAAAAP0lyuri41_9EGRTkVEkzoJvVxbE',
2756                    {action: 'submit'}
2757                ).then((token) => {
2758                    const tokenElement = $form['g\u002Drecaptcha\u002Dresponse'];
2759
2760                    if (tokenElement && token && token.length > 0) {
2761                        $form['g\u002Drecaptcha\u002Dresponse'].value = token;
2762                        this.errors = 0;
2763                        this.hasCaptchaToken = 1;
2764                        (this.submitForm || $form.submit).call(this);
2765                    } else {
2766                        this.errors = 1;
2767                        const error = tokenElement
2768                            ? 'ReCaptcha\u0020validation\u0020failed,\u0020please\u0020try\u0020again'
2769                            : 'ReCaptcha\u0020token\u0020element\u0020is\u0020missing.\u0020Please\u0020refresh\u0020the\u0020page\u0020and\u0020trying\u0020again.';
2770                        if (this.setErrorMessages) {
2771                            this.setErrorMessages([error])
2772                            this.displayErrorMessage = true;
2773                        } else {
2774                            window.dispatchMessages && window.dispatchMessages([{type: "error", text: error}], 5000);
2775                        }
2776                    }
2777                }).catch(exception => {
2778                    console.error(exception || `An unknown error occurred during ReCaptcha validation. Are the tokens and the domain correctly set up in the Google console?`)
2779                });
2780            })
2781        }
2782
2783        if (window.grecaptcha) {
2784            executeGreCaptcha();
2785        } else {
2786            const recaptchaUrl = "https://www.google.com/recaptcha/api.js?render=6Lf7qRkjAAAAAP0lyuri41_9EGRTkVEkzoJvVxbE";
2787            const script = document.createElement('script');
2788            script.setAttribute('type', 'text/javascript');
2789            script.setAttribute('src', recaptchaUrl);
2790            document.head.appendChild(script);
2791
2792            script.addEventListener("load", executeGreCaptcha, false);
2793        }
2794    }
2795
2796                if (this.errors === 0) {
2797                    this.dispatchLoginRequest($form);
2798                }
2799            },
2800            onPrivateContentLoaded() {
2801                const data = this.$event.detail.data;
2802                const isLoggedIn = data.customer && data.customer.firstname;
2803                if (data.cart && !isLoggedIn) {
2804                    this.forceAuthentication = !data.cart.isGuestCheckoutAllowed;
2805                }
2806            },
2807            redirectIfAuthenticated() {
2808                const event = this.$event;
2809                this.open = this.forceAuthentication;
2810
2811                if (event.detail && event.detail.url) {
2812                    this.checkoutUrl = event.detail.url;
2813                }
2814                if (!this.forceAuthentication) {
2815                    window.location.href = this.checkoutUrl;
2816                }
2817            },
2818            resetErrors() {
2819                this.errors = 0;
2820            },
2821            dispatchLoginRequest(form) {
2822                this.isLoading = true;
2823                const username = this.$refs['customer-email'].value;
2824                const password = this.$refs['customer-password'].value;
2825                const formKey = hyva.getFormKey();
2826                const bodyFields = {
2827                    'username': username,
2828                    'password': password,
2829                    'formKey': formKey
2830                };
2831                                const fieldName = 'g\u002Drecaptcha\u002Dresponse';
2832                const recaptchaField = fieldName && form[fieldName];
2833                if (recaptchaField) {
2834                    bodyFields[fieldName] = recaptchaField.value;
2835                }
2836                fetch('https://www.outdoornativitysets.com/customer/ajax/login/', {
2837                        method: 'POST',
2838                        headers: {
2839                            'Content-Type': 'application/json',
2840                            'X-Requested-With': 'XMLHttpRequest'
2841                        },
2842                        body: JSON.stringify(bodyFields)
2843                    }
2844                ).then(response => {
2845                        return response.json()
2846                    }
2847                ).then(data => {
2848                    this.isLoading = false;
2849                    if (data.errors) {
2850                        this.setErrorMessages(data.message);
2851                        this.errors = 1;
2852                        this.hasCaptchaToken = 0;
2853                    } else {
2854                        window.location.href = this.checkoutUrl;
2855                    }
2856                });
2857            }
2858        }
2859    }
2860
2861    window.addEventListener('alpine:init', () => Alpine.data('initAuthentication', initAuthentication), {once: true})
2862</script>
2862
2863<section id="authentication-popup"
2864         x-data="initAuthentication"
2865         @private-content-loaded.window="onPrivateContentLoaded"
2866         @toggle-authentication.window="redirectIfAuthenticated"
2867         @keydown.window.escape="close"
2868>
2869    <div
2870        class="backdrop"
2871        aria-hidden="true"
2872        x-cloak
2873        x-show="open"
2874        x-transition:enter="ease-in-out duration-500"
2875        x-transition:enter-start="opacity-0"
2876        x-transition:enter-end="opacity-100"
2877        x-transition:leave="ease-in-out duration-500"
2878        x-transition:leave-start="opacity-100"
2879        x-transition:leave-end="opacity-0"
2880        @click="close"
2881    ></div>
2882    <div role="dialog"
2883         aria-modal="true"
2884         @click.outside="close"
2885         class="inset-y-0 right-0 z-30 flex max-w-full fixed"
2886         x-cloak
2887         x-show="open"
2888    >
2889        <div class="relative w-screen max-w-md pt-16 bg-container-lighter"
2890             x-show="open"
2891             x-cloak
2892             x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700"
2893             x-transition:enter-start="translate-x-full"
2894             x-transition:enter-end="translate-x-0"
2895             x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700"
2896             x-transition:leave-start="translate-x-0"
2897             x-transition:leave-end="translate-x-full"
2898        >
2899            <div
2900                x-show="open"
2901                x-cloak
2902                x-transition:enter="ease-in-out duration-500"
2903                x-transition:enter-start="opacity-0"
2904                x-transition:enter-end="opacity-100"
2905                x-transition:leave="ease-in-out duration-500"
2906                x-transition:leave-start="opacity-100"
2907                x-transition:leave-end="opacity-0" class="absolute top-0 right-2 flex p-2 mt-2">
2908                <button
2909                    type="button"
2910                    @click="close"
2911                    aria-label="Close&#x20;panel"
2912                    class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"
2913                >
2914                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true">
2915  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
2916</svg>
2917                </button>
2918            </div>
2919            <template x-if="open">
2920                <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto">
2921                    <div class="mx-4">
2922                        <div class="message error mb-0" x-show="errors" x-cloak>
2923                            <template x-for="(message, index) in errorMessages" :key="index">
2924                                <div>
2925                                    <template x-if="message">
2926                                        <span x-html="message"></span>
2927                                    </template>
2928                                </div>
2929                            </template>
2930                        </div>
2931                    </div>
2932                    <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm">
2933                        <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900">
2934                            <strong class="font-medium">Checkout using your account</strong>
2935                        </p>
2936
2937                        <form class="form form-login"
2938                              method="post"
2939                              @submit.prevent="submitForm"
2940                              id="login-form"
2941                        >
2942                            <div class="control">
2943    <input type="hidden"
2944           value=""
2945           name="g-recaptcha-response"
2946    />
2947</div>
2948                            <div class="fieldset login">
2949                                <div class="field email required">
2950                                    <label class="label" for="form-login-username" form="login-form" >
2951                                        <span>Email Address</span>
2952                                    </label>
2953                                    <div class="control">
2954                                        <input name="username"
2955                                               id="form-login-username"
2956                                               x-ref="customer-email"
2957                                               @change="resetErrors"
2958                                               type="email"
2959                                               required
2960                                               autocomplete="off"
2961                                               class="form-input"
2962                                        >
2963                                    </div>
2964                                </div>
2965                                <div class="field password required">
2966                                    <label for="form-login-password" class="label" form="login-form">
2967                                        <span>Password</span>
2968                                    </label>
2969                                    <div class="control">
2970                                        <input name="password"
2971                                               id="form-login-password"
2972                                               type="password"
2973                                               class="form-input"
2974                                               required
2975                                               x-ref="customer-password"
2976                                               autocomplete="off"
2977                                               @change="resetErrors"
2978                                        >
2979                                    </div>
2980                                </div>
2981
2982                                <input name="context" type="hidden" value="checkout" />
2983                                <div class="actions-toolbar pt-6 pb-2">
2984                                    <button type="submit"                                            class="inline-flex btn btn-primary disabled:opacity-75"
2985                                    >
2986                                        Sign In                                    </button>
2987                                    <a href="https://www.outdoornativitysets.com/customer/account/forgotpassword/"
2988                                    >
2989                                        Forgot Your Password?                                    </a>
2990                                </div>
2991
2992                            </div>
2993                        </form>
2994                    </div>
2995                    <div class="mx-4">
2996                        <p class="my-4 text-sm text-gray-900">
2997    This form is protected by reCAPTCHA.</p>
2998                    </div>
2999                    <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm">
3000                        <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900">
3001                            <strong class="font-medium">Checkout as a new customer</strong>
3002                        </p>
3003
3004                        <div class="block-content">
3005                            <p class="mb-1">
3006                                Creating an account has many benefits:                            </p>
3007                            <ul class="list-disc pl-5">
3008                                <li> See order and shipping status</li>
3009                                <li> Track order history</li>
3010                                <li> Check out faster</li>
3011                            </ul>
3012                            <div class="actions-toolbar mt-6 mb-2">
3013                                <a href="https://www.outdoornativitysets.com/customer/account/create/"
3014                                   class="inline-flex btn btn-primary">
3015                                    Create an Account                                </a>
3016                            </div>
3017                        </div>
3018                    </div>
3019                </div>
3020            </template>
3021        </div>
3022    </div>
3023</section>
3024</div>
3025
3026
3027<script>
3028    function initProPage() {
3029        return {
3030            visible: false,
3031            initHtml: function(data, elem) {
3032                if(data.company
3033                    && data.company.has_customer_company
3034                    && data.company.pro_page_link
3035                ) {
3036                    const link = elem.querySelector('a');
3037                    if(link) {
3038                        link.setAttribute('href', this.prepareLink(data.company.pro_page_link));
3039                        this.visible = true;
3040                    } else {
3041                        console.debug('company block missing anchor tag')
3042                    }
3043
3044                }
3045            },
3046            prepareLink: function(link) {
3047                return link.charAt(0) !== '/' ? ('/' + link) : link;
3048            }
3049        }
3050    }
3051</script>
3051
3052
3053
3054</header><main id="maincontent" class="page-main">    <nav class="breadcrumbs bg-container-lighter md:block hidden" aria-label="Breadcrumb">
3055        <div class="container">
3056            <ol class="items list-reset py-4 rounded flex flex-wrap text-grey text-md">
3057                                    <li class="item flex home">
3058                                                                            <a href="https://www.outdoornativitysets.com/"
3059                               class=""
3060                               title="Go&#x20;to&#x20;Home&#x20;Page"
3061                            >Home</a>
3062                                            </li>
3063                                    <li class="item flex cms_page">
3064                                                    <span aria-hidden="true" class="separator text-primary-lighter px-2">/</span>
3065                                                                            <span
3066                                class="text-primary font-bold"
3067                                aria-current="page"
3068                            >About Us</span>
3069                                            </li>
3070                            </ol>
3071        </div>
3072    </nav>
3073<div id="contentarea" tabindex="-1"></div>
3074<div class="page messages">
3074<script>
3075        function initMessages() {
3076        "use strict";
3077        return {
3078            messages: window.mageMessages || [],
3079            isEmpty() {
3080                return this.messages.reduce(
3081                    function (isEmpty, message) {
3082                        return isEmpty && message === undefined
3083                    }, true
3084                )
3085            },
3086            hasMessages() {
3087                return !this.isEmpty();
3088            },
3089            hasMessage() {
3090                return !!this.message;
3091            },
3092            removeMessage() {
3093                this.messages[this.index] = undefined;
3094            },
3095            addMessages(messages, hideAfter) {
3096                messages.map((message) => {
3097                    this.messages = this.messages.concat(message);
3098                    if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) {
3099                        hideAfter = window.defaultSuccessMessageTimeout;
3100                    }
3101                    if (hideAfter) {
3102                        this.setHideTimeOut(this.messages.length -1, hideAfter);
3103                    }
3104                });
3105            },
3106            setHideTimeOut(messageIndex, hideAfter) {
3107                setTimeout((messageIndex) => {
3108                    this.messages[messageIndex] = undefined;
3109                }, hideAfter, messageIndex);
3110            },
3111            eventListeners: {
3112                ['@messages-loaded.window'](event) {
3113                    this.addMessages(event.detail.messages, event.detail.hideAfter)
3114                },
3115                ['@private-content-loaded.window'](event) {
3116                    const data = event.detail.data;
3117                    if (
3118                        data.messages &&
3119                        data.messages.messages &&
3120                        data.messages.messages.length
3121                    ) {
3122                        this.addMessages(data.messages.messages);
3123                    }
3124                },
3125                ['@clear-messages.window']() {
3126                    this.messages = [];
3127                }
3128            },
3129            getMessageUiId() {
3130                return 'message-' + this.message.type;
3131            }
3132        }
3133    }
3134
3135    window.addEventListener('alpine:init', () => Alpine.data('initMessages', initMessages), {once: true})
3136</script>
3136
3137<section id="messages"
3138         x-data="initMessages"
3139         x-bind="eventListeners"
3140         aria-live="assertive"
3141         role="alert"
3142>
3143    <template x-if="hasMessages">
3144        <div class="w-full">
3145            <div class="messages container mx-auto py-3">
3146                <template x-for="(message, index) in messages" :key="index">
3147                    <div>
3148                        <template x-if="hasMessage">
3149                            <div class="message"
3150                                 :class="message.type"
3151                                 :ui-id="getMessageUiId"
3152                            >
3153                                <span x-html="message.text"></span>
3154                                <button
3155                                    type="button"
3156                                    class="text-gray-600 hover:text-black"
3157                                    aria-label="Close message"
3158                                    @click.prevent="removeMessage"
3159                                >
3160                                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-current" width="18" height="18" aria-hidden="true">
3161  <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
3162</svg>
3163                                </button>
3164                            </div>
3165                        </template>
3166                    </div>
3167                </template>
3168            </div>
3169        </div>
3170    </template>
3171</section>
3172</div><div class="container&#x20;flex&#x20;flex-col&#x20;md&#x3A;flex-row&#x20;flex-wrap&#x20;my-6&#x20;font-bold&#x20;lg&#x3A;mt-8&#x20;text-3xl">
3173    <h1 class="text-gray-900 page-title title-font"
3174        >
3175        <span class="base" data-ui-id="page-title-wrapper" >About Us</span>    </h1>
3176    </div>
3177<div class="columns"><div class="column main">
3177<script>
3178    window.boldFlowConfig = {
3179        shopId: "3e913d263509257ceef6952f2d5307bf",
3180        apiUrl: "https://api.boldcommerce.com/",
3181        meta: {
3182            isEnabled: "1"
3183        },
3184        continueUrl: "https://www.outdoornativitysets.com/",
3185        checkoutUrl: "https://www.outdoornativitysets.com/checkout/",
3186        contactUsUrl: "https://www.outdoornativitysets.com/contact/",
3187        headerColor: "#FFFFFF",
3188        logoData: {"src":"https:\/\/www.outdoornativitysets.com\/media\/logo\/stores\/7\/outdoor-nativity-sets-logo.png","alt":"OutdoorNativitySets","width":203,"height":60},
3189        loaderIcon: "https://www.outdoornativitysets.com/static/version1789694905/frontend/Kadro/outdoor_nativity_sets_hyva/en_US/images/loader-2.gif",
3190    };
3191</script>
3191
3192
3193<script type="text/x-magento-init">
3194    {
3195                    "[href='https://www.outdoornativitysets.com/checkout']": {
3196                    "proceedToMetaCheckout":{"checkoutUrl":"https://www.outdoornativitysets.com/checkout/"}
3197                },                    "[href='https://www.outdoornativitysets.com/checkout/']": {
3198                    "proceedToMetaCheckout":{"checkoutUrl":"https://www.outdoornativitysets.com/checkout/"}
3199                }        }
3200</script>
3200
3201<style>#html-body [data-pb-style=M2N2QAE],#html-body [data-pb-style=XA16V03]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=M2N2QAE]{border-style:none;border-width:1px;border-radius:0;margin:0;padding:0}#html-body [data-pb-style=XA16V03]{width:66.6667%;align-self:stretch}#html-body [data-pb-style=KU0OX50],#html-body [data-pb-style=PU3IRHX],#html-body [data-pb-style=XA16V03]{border-style:none;border-width:1px;border-radius:0;margin:0;padding:0}#html-body [data-pb-style=KU0OX50]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:33.3333%;padding:10px;align-self:stretch}#html-body [data-pb-style=P66GQBB],#html-body [data-pb-style=Y2D62RW]{border-style:none;border-width:1px;border-radius:0;margin:0;padding:0}#html-body [data-pb-style=P66GQBB]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;margin:0 0 10px;padding:10px}</style><div data-content-type="row" data-appearance="full-width" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-video-fallback-src="" data-element="main" data-pb-style="M2N2QAE"><div class="row-full-width-inner" data-element="inner"><div class="pagebuilder-column-group" style="display: flex;" data-content-type="column-group" data-grid-size="12" data-element="main"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="XA16V03"><div data-content-type="text" data-appearance="default" data-element="main" data-pb-style="PU3IRHX"><p>OutdoorNativitySets.com was launched in late 2010. With the challenges of the economy, our parent company Teak Isle Manufacturing, a 30 year supplier to the marine industry, was faced with cutting its workforce during the holidays. The hard fact was that fewer people were buying boats and the holiday months were going to be extremely slow. Toward the end of last year we were brainstorming of ways to increase our business. As we were talking, one of our employees reminded us that we had built some nativity sets in the past and maybe we could do this again during the holiday season.</p>
3202<p>Years ago one of the owners of Teak Isle saw a silhouette nativity set at a Christmas tree stand that was made of plywood and painted white. He was taken by the simplicity of the part and loved the message that it conveyed. He bought the set and proudly displayed it in his yard. Later that year, he decided to work with his designers to build a set that was similar to the one he had purchased, but designed and cut from marine grade plastic to withstand the weather conditions for years to come. Teak Isle built some of these nativities for friends and family members and eventually supplied some to local Christmas tree stands. At the time, this was done more for the satisfaction of seeing the nativities around the neighborhood and the joy of being able to offer such a meaningful keepsake.</p>
3203<p>In October 2010, the decision was made to redesign our nativity sets so that they could be shipped UPS and broken down for easy storage for the rest of the year. We stayed true to the simple, white and non-commercial style and continued to make them from marine grade plastic. Our feeling was that if we offered a high quality AMERICAN MADE product at an affordable price that people would be happy to support us. We were excited by the fact that we were able to keep all of our employees working through the holidays and found peace in the thought of our nativities sitting in neighborhoods all around the country reminding people of the true reason for the season.</p>
3204<p>This year we are excited to introduce a new line of nativity figures to add to your set including angels, wise men, shepherds and a variety of animals. You can purchase a new figure each year or buy a whole set to complete your nativity scene. Also new this year is a larger, six foot tall version of the nativity for churches or homes with larger yards.</p>
3205<p>We are proud to report that, in this struggling economy, we were able to hire additional people to work on our nativities this year. Thank y
3205ou for your business and we wish you all of the peace and joy that comes with the Christmas season.</p>
3206<p>&nbsp;</p>
3207<p>God Bless,</p>
3208<p><strong>OutdoorNativitySets.com</strong>&nbsp;<em>(formerly holynightnativitysets.com)</em></p>
3209<p>450 Maguire Road<br>Ocoee FL 34761<br>855-553-4946</p></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="KU0OX50"><div data-content-type="html" data-appearance="default" data-element="main" data-pb-style="Y2D62RW" data-decoded="true"><div style="width: 100%;"><div class="scalemedia"><iframe src="https://www.youtube.com/embed/L3Hm2FDPs5g?showinfo=0&autoplay=1&mute=1" frameborder="0" allowfullscreen="" style="border: 5px solid #000;"></iframe></div></div></div></div></div></div></div><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-video-fallback-src="" data-element="inner" data-pb-style="P66GQBB"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style>
3210/* Kill the header search bar */
3211.block-search,
3212#search_mini_form {
3213  display: none !important;
3214}
3215</style>
3216</div></div></div></div></div>
3216<script>
3217    function initFooter () {
3218        return {
3219            cart: {},
3220            isCartOpen: false,
3221            getData(data) {
3222                if (data.cart) { this.cart = data.cart }
3223            },
3224            isCartEmpty() {
3225                return !this.cart.summary_count
3226            },
3227            toggleCart(event) {
3228                if (event.detail && event.detail.isOpen !== undefined) {
3229                    this.isCartOpen = event.detail.isOpen
3230                    if (!this.isCartOpen && this.$refs && this.$refs.cartButton) {
3231                        this.$refs.cartButton.focus()
3232                    }
3233                } else {
3234                                        this.isCartOpen = true
3235                }
3236            }
3237        }
3238    }
3239</script>
3239
3240<div class="sticky-footer fixed bottom-0 left-0 right-0 bg-new-blue md:hidden z-9 flex items-center"
3241     x-data="initFooter()"
3242     @private-content-loaded.window="getData(event.detail.data)"
3243>
3244    <a class="telephone block w-1/3 p-4 float-left text-left pl-8" href="tel://8666337961">
3245        <span class="text-[0] block">Call</span>
3246        <div class="phone-inner text-white">
3247            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="30" height="30" aria-hidden="true">
3248  <path d="M2 3a1 1 0 011-1h2.153a1 1 0 01.986.836l.74 4.435a1 1 0 01-.54 1.06l-1.548.773a11.037 11.037 0 006.105 6.105l.774-1.548a1 1 0 011.059-.54l4.435.74a1 1 0 01.836.986V17a1 1 0 01-1 1h-2C7.82 18 2 12.18 2 5V3z"/>
3249</svg>
3250        </div>
3251    </a>
3252    <a class="minicart action showcart block float-left w-1/3 p-4 text-center"
3253       href="https://www.outdoornativitysets.com/checkout/cart/"
3254       x-ref="cartButton"
3255       @click.prevent.stop="() => {
3256                        $dispatch('toggle-cart', { isOpen: !isCartOpen })
3257                    }"
3258       @toggle-cart.window="toggleCart($event)"
3259       :aria-expanded="isCartOpen"
3260       aria-haspopup="dialog"
3261    >
3262        <div class="minicart-inner text-white flex justify-center items-center text-2.5xl">
3263            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="32" height="32" aria-hidden="true">
3264  <path d="M3 1a1 1 0 000 2h1.22l.305 1.222a.997.997 0 00.01.042l1.358 5.43-.893.892C3.74 11.846 4.632 14 6.414 14H15a1 1 0 000-2H6.414l1-1H14a1 1 0 00.894-.553l3-6A1 1 0 0017 3H6.28l-.31-1.243A1 1 0 005 1H3zM16 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM6.5 18a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"/>
3265</svg>
3266            <span class="text hidden">My Cart</span>
3267            <span class="counter qty">
3268            <span>(</span>
3269            <span class="counter-number"
3270                  x-text="isCartEmpty() ? 0 : cart.summary_count"
3271            ></span>
3272            <span>)</span>
3273        </span>
3274        </div>
3275    </a>
3276    <a href="#" class="openZendeskHelpButton help block float-left w-1/3 p-4 text-right pr-8">
3277        <span class="text-[0] block">Help</span>
3278        <div class="help-inner text-white float-right">
3279            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="36" height="36" aria-hidden="true">
3280  <path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd"/>
3281</svg>
3282        </div>
3283    </a>
3284
3285
3286    
3286<script type="text/javascript">
3287        document.addEventListener('DOMContentLoaded', function() {
3288            // lifts up the regular page footer the height of the sticky footer so all footer content is visible.
3289            var stickyFooterHeight = document.querySelector('.sticky-footer').clientHeight ;
3290
3291            document.querySelector('.page-wrapper').style['margin-bottom'] = stickyFooterHeight + 'px';
3292        });
3293    </script>
3293
3294</div>
3295</main><footer class="page-footer"><div class="footer content">    <!-- Block: footer_content -->
3296<style>
3297.page-footer {
3298    padding-bottom: 0 !important;
3299    background: #111;
3300}
3301.page-footer .copyright { background-color: #111; }
3302.page-footer .footer-row a {
3303    color: #fff;
3304}
3305.page-layout-checkout .footer-lite { display: none; }
3306
3307.contactfooter_row {
3308  display: flex;
3309  padding-top: 30px;
3310}
3311.contactfooter_column {
3312    flex: 50%;
3313    padding: 3%;
3314    border-radius: 8px;
3315    min-height: 300px;
3316    margin: 3% 1.5%;
3317}
3318.contactfooter_column h2 {
3319    margin-top: 0;
3320    font-size: 23px;
3321    margin-bottom: 6px !important;
3322}
3323.contactfooter_column p span {
3324    font-size: 13px;
3325}
3326.page-footer .block.newsletter .content p {
3327    color: white;
3328}
3329#Footer_email_signup button#btnsubmit {
3330    background-color: white;
3331    color: #a32c28;
3332    height: 32px;
3333}
3334.page-footer .block.newsletter input[type="email"] {
3335    border: 1px solid #fff;
3336    color: #a32c28;
3337    border-radius: 4px;
3338    background: white;
3339}
3340.page-footer .fa-pinterest,
3341.page-footer .fa-facebook  {
3342    color: #fff;
3343}
3344.page-footer { padding-bottom: 0 !important; }
3345.page-footer .footer-links>div { width: 33%; }
3346.footer.content { border-top: 0; padding-top: 0; }
3347.footer.content .h3 { color: #fff; border-bottom: 1px solid #fff; padding-bottom: .5rem; font-weight: 600; line-height: 1.1; font-size: 1.8rem; margin-bottom: 1rem; display: block; }
3348.page-footer .footer.content .social-links { clear: both; }
3349
3350@media (max-width: 768px), print {
3351  .footer.content .h3 { margin-top: 2rem; }
3352  .page-footer .footer-links>div { padding: 0; }
3353}
3354</style>
3355
3356<div class="footer-lite hidden-xs">
3357<div class="contactfooter_row">
3358  <div class="contactfooter_column" style="background-color:#fff;">
3359    <h2>Send us a Message</h2>
3360    <p>After hours or prefer to schedule a call? No problem.
3361Send us a message and we’ll jump right on it.</p>
3362<iframe class="contactForm" src="" data-srcuri="https://contact.outdoornativitysets.com/?FormKey=ons&type=zdonly" title="OutdoorNativitySets Contact Form" width="100%" height="420px" frameborder="0"></iframe>
3363  </div>
3364  <div class="contactfooter_column" style="background-color: #999; background-image: url('https://www.outdoornativitysets.com/media//wysiwyg/outdoor-nativity-sets/page-content/contact/footer_contact_bg_ons.jpg'); background-position: center center;background-size: cover;background-blend-mode: multiply;">
3365    <h2 style="color: white;">How can we help?</h2>
3366    <p style="color: white;line-height: 24px;">Let us help bring your family the peace and joy that comes with the Christmas season.<br>
3367<a style="font-size: 17px;color: white;margin-top: 15px;font-weight: bold;display: block;" href="tel:+1-855-553-4946">(855)-553-4946</a>
3368<span><a href="https://www.outdoornativitysets.com/contact-us" target="_blank" rel="noopener">
3369  <u>See our holiday hours</u>
3370</a>
3371</span></p>
3372  </div>
3373</div>
3374</div>
3375
3376<div class="footer-lite">
3377  
3378</div>
3379<div class="footer-links footer-lite">
3380  <div id="footer-row-1" class="footer-row">
3381<div class="h3">Account</div>
3382<div class="col-sm-12 col-xs-6 no-pad"><a href="/customer/account/create">REGISTER</a></div>
3383<div class="col-sm-12 col-xs-6 no-pad"><a href="/customer/account/login">LOGIN</a></div>
3384<div class="col-sm-12 col-xs-6 no-pad"><a href="/sales/order/history">ORDER HISTORY</a></div>
3385</div><div id="footer-row-2" class="footer-row">
3386<div class="h3">Company</div>
3387<div class="col-sm-12 col-xs-6 no-pad"><a href="/about-us">ABOUT US</a></div>
3388<div class="col-sm-12 col-xs-6 no-pad"><a href="/testimonials">TESTIMONIALS</a></div>
3389<div class="col-sm-12 col-xs-6 no-pad"><a href="/contact-us">CONTACT US</a></div>
3390<div class="col-sm-12 col-xs-6 no-pad"><a id="accessibilityWidget" tabindex="0" onclick="javascript:void(0);" style="cursor:pointer;">ACCESSIBILITY MENU</a></div>
3391<div class="col-sm-12 col-xs-6 no-pad"><a href="#" onclick="Osano.cm.showDrawer('osano-cm-dom-info-dialog-open')">COOKIE PREFERENCES</a></div>
3392</div><div id="footer-row-3" class="footer-row">
3393<div class="h3">Services</div>
3394<div class="col-sm-12 col-xs-6 no-pad"><a href="/shipping-policy">SHIPPING POLICY</a></div>
3395<div class="col-sm-12 col-xs-6 no-pad"><a href="/return-policy">RETURN POLICY</a></div>
3396<div class="col-sm-12 col-xs-6 no-pad"><a href="/privacy-policy">PRIVACY POLICY</a></div>
3397<div class="col-sm-12 col-xs-6 no-pad"><a href="/terms-of-use">TERMS OF USE</a></div>
3398</div>
3399</div>
3400<style>
3401#utility-navigation .social-links { display: none; }
3402.footer.content .free-shipping-nav { display: none; }
3403.page-footer .social-links { text-align: center; }
3404.page-footer .social-links .top-social { display: inline-block; margin: 0 10px; }
3405</style>
3406<div class="free-shipping-nav">
3407  <div class="hidden-sm" style="font-weight: normal; padding: 0px 15px 0px 5px; line-height: 42px;"><I class="fa fa-truck" style="color:#333;"></I> <a href="/shipping-policy">Free Shipping</a> on orders over $150!</div>
3408  <div class="visible-sm" style="font-weight: normal; padding: 0px 5px 0px 2px; font-size: 10px; line-height: 42px;"><I class="fa fa-truck" style="color:#333;"></I> <a href="/shipping-policy">Free Shipping</a> on orders over $150!</div>
3409</div>
3410
3411<div class="social-links">
3412<div class="social-nav"> 
3413
3414		
3415	<div class="f-right top-social"><a href="https://www.facebook.com/OutdoorNativitySets" target="_blank"><span class="fa fa-facebook"> </span></a></div>  	
3416	
3417	<div class="f-right top-social"><a href="https://www.pinterest.com/OutdoorNativity" target="_blank"><span class="fa fa-pinterest"> </span></a></div>  
3418	
3419
3420</div>
3421</div>
3422
3423<div style="display: block; clear: both; padding-top: 2rem;">
3424<div style="text-align: center; color:white;">Display the <i>True Meaning of Christmas</i></div>
3425<div style="text-align: center;"><img src="https://www.outdoornativitysets.com/media/wysiwyg/outdoor-nativity-sets/icons/made-in-the-usa-icon-white.png" alt="Made in the USA" style="max-width: 220px; margin-bottom: 25px; display:inline-block;" loading="lazy"/></div>
3426</div>            <small class="copyright text-sm text-gray-800 sm:ml-6 sm:mt-0 mt-4">
3427    <span>Copyright © 2026 OutdoorNativitySets. All rights reserved.</span>
3428</small>
3429</div></footer>
3430    
3430<script async type="text/javascript" src="https://dguqe.outdoornativitysets.com/load"></script>
3430
3431    
3431<script>
3432        /**
3433         * **********
3434         * **********
3435         * Always duplicate edits made in app/code/Kadro/BlotoutEdgetag/view/frontend/web/js/
3436         * with the applicable files in   app/design/frontend/Kadro/boat_outfitters_hyva/Kadro_BlotoutEdgetag/templates
3437         * (The Boat Outfitters Hyva theme files are there)
3438         * **********
3439         * **********
3440         */
3441
3442        const edgeUrl = "https://dguqe.outdoornativitysets.com";
3443        const checkoutUrl = "https://www.outdoornativitysets.com/checkout";
3444        const truIdCookieUrl = "https://www.outdoornativitysets.com/blotoutedgetag/index/cookie";
3445        const footerEmailButton = document.querySelector('form#Footer_email_signup button#btnsubmit');
3446        let cart = null;
3447
3448        /**
3449         * sends a POST request to the server, which sets the tru id cookie
3450         */
3451        function requestTruIdCookie() {
3452            fetch(
3453                truIdCookieUrl,
3454                {
3455                    method: 'POST',
3456                    headers: {
3457                        'X-Requested-With': 'XMLHttpRequest',
3458                    }
3459                }
3460            ).then(response => {
3461                if (!response.ok) {
3462                    console.error("[Blotout] An error occurred when setting truid cookie.");
3463                }
3464            }).catch(err => console.error('[Blotout] TruID cookie request failed:', err));
3465        }
3466
3467        /**
3468         * set up a handler on click of the footer newsletter email form
3469         */
3470        function initFooterEmail() {
3471            if (!footerEmailButton) {
3472                return;
3473            }
3474
3475            footerEmailButton.addEventListener('click', function() {
3476                const userEmailInput = document.querySelector('form#Footer_email_signup input#Footer_id_email');
3477                const userEmail = userEmailInput ? userEmailInput.value : '';
3478                if (userEmail !== '') {
3479                    edgetag('user', 'email', userEmail);
3480                }
3481            });
3482        }
3483
3484        /**
3485         * set up a handler to listen for when the Klaviyo HTTP request is made
3486         */
3487        function initKlaviyoEmail() {
3488            const originalOpen = XMLHttpRequest.prototype.open;
3489            const originalSend = XMLHttpRequest.prototype.send;
3490
3491            XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
3492                this._method = method;
3493                this._url = url;
3494                return originalOpen.call(this, method, url, async, user, password);
3495            };
3496
3497            XMLHttpRequest.prototype.send = function(body) {
3498                const url = this._url || '';
3499                console.log(`[Blotout] [KlaviyoHook] XMLHttpRequest sent to URL: ${url}`);
3500                // Only continue if this is a Klaviyo Subscriptions request
3501                if (this._method === 'POST' && url.includes('klaviyo.com/client/subscriptions/')) {
3502                    console.log(`[Blotout] [KlaviyoHook] This is a Klaviyo request`);
3503                    if (typeof body === 'string') {
3504                        console.log(`[Blotout] [KlaviyoHook] Format is approved`);
3505                        try {
3506                            const json = JSON.parse(body);
3507                            const email = json?.data?.attributes?.profile?.data?.attributes?.email;
3508                            console.log(`[Blotout] [KlaviyoHook] email: ${email}`);
3509                            if (email && !klaviyoEdgetagEmailSent) {
3510                                edgetag('user', 'email', email);
3511                                edgetag('tag', 'Lead');
3512                                klaviyoEdgetagEmailSent = true;
3513                                console.log(`[Blotout] [KlaviyoHook] tagged email: ${email}`);
3514                            }
3515                        } catch (err) {
3516                            console.warn('[Blotout] [KlaviyoHook] couldn\'t parse body, skipping tag', err);
3517                        }
3518                    }
3519                }
3520
3521                try {
3522                    return originalSend.call(this, body);
3523                } catch (err) {
3524                    console.error('[Blotout] [KlaviyoHook] Error sending data to blotout:', err);
3525                }
3526            };
3527        }
3528
3529        let klaviyoEdgetagEmailSent = false;
3530
3531        function escapeCategoryString(category) {
3532            return category.trim().replace(/[^a-zA-Z0-9 ]/g, '');
3533        }
3534
3535        function buildProductCategoryData() {
3536            // Fire ViewContent tag to send product info to Edgetag
3537            const productCategoryArray = document.querySelectorAll('nav.breadcrumbs ol.items li');
3538            let transformedProductCategoryArray = [];
3539            for (let i = 1; i < productCategoryArray.length; i++) {
3540                transformedProductCategoryArray.push(escapeCategoryString(productCategoryArray[i].innerText));
3541            }
3542            return transformedProductCategoryArray.join(', ');
3543        }
3544
3545        /**
3546         * fires edge tag containing product data
3547         * @param oldCart
3548         * @param newCart
3549         */
3550        function addToCartEdgeTag(newCart, oldCart) {
3551            // find the item that changed or appeared
3552            const newItem = newCart.items.filter(item => !oldCart.items.includes(item))[0];
3553            if (!newItem) return;
3554
3555            // locate that item in the old cart
3556            let oldItem = oldCart.items.find(item => item.item_id === newItem.item_id);
3557            // subtract the qtys, should they exist, to get the qty added
3558            let qtyAdded = newItem.qty - (oldItem?.qty || 0);
3559
3560            if (qtyAdded > 0) {
3561                // no other way to grab category info, so getting from breadcrumbs
3562                const product_category = buildProductCategoryData();
3563
3564                // trigger edgetag using item data
3565                edgetag('tag', 'AddToCart', {
3566                    currency: 'USD',
3567                    value: newItem.product_price_value * qtyAdded,
3568                    contents: [{
3569                        id: newItem.parent_product_sku,
3570                        variantId: newItem.product_type === 'configurable' ? newItem.product_sku : '',
3571                        quantity: qtyAdded,
3572                        item_price: newItem.product_price_value,
3573                        title: newItem.product_name.replace(/&quot;/g, '"'),
3574                        category: product_category,
3575                        url: newItem.product_url,
3576                        image: newItem.product_image.src
3577                    }],
3578                    checkoutUrl: checkoutUrl
3579                });
3580            }
3581        }
3582
3583        /**
3584         * sets up a handler for on click of add to cart. Compares cart state before and after and fires based on the diff
3585         */
3586        function cartChangeCheck(event) {
3587            const oldCart = event.detail.data.oldCart;
3588            const newCart = event.detail.data.privateData.cart;
3589
3590            if (newCart && (!oldCart.items || oldCart.summary_count !== newCart.summary_count)) {
3591                addToCartEdgeTag(newCart, oldCart);
3592            }
3593        }
3594
3595        /**
3596         * prepares a listener for the Attentive marketing popup, and captures info from it
3597         */
3598        function initAttentivePopup() {
3599            window.addEventListener('message', event => {
3600                if (event.origin !== 'https://creatives.attn.tv' || !event.data?.__attentive) return;
3601                try {
3602                    const data = event.data.__attentive;
3603                    if (!data.action?.includes('LEAD')) return;
3604
3605                    const user = {};
3606                    if (data.email) user.email = data.email;
3607
3608                    let user_telephone = data.phone || '';
3609                    // Properly format the number (if it's not already):
3610                    //  -- proper E.164 format (e.g. 7045551212), plus a prepended "+1" (assumes US telephone numbers) --
3611                    if (!/^\+1\d{10}$/.test(user_telephone)) {
3612                        user_telephone = '+1' + user_telephone.replace(/[^0-9]/g, '');
3613                    }
3614                    if (user_telephone) user.phone = user_telephone;
3615
3616                    if (user.email || user.phone) {
3617                        edgetag('data', user);
3618                        edgetag('tag', 'Lead');
3619                    }
3620                } catch (e) {
3621                    console.error('[Edgetag]', e);
3622                }
3623            }, { once: true });
3624        }
3625
3626        function initializeBlotout() {
3627            edgetag('tag', 'PageView');
3628            initFooterEmail();
3629            initAttentivePopup();
3630            // Do not initiate Klaviyo in checkout, but DO allow it in the cart
3631            if (!window.location.pathname.includes('/checkout/') || window.location.pathname.includes('/checkout/cart')) {
3632                initKlaviyoEmail();
3633            }
3634            window.dispatchEvent(new CustomEvent('blotout-initialized'));
3635        }
3636
3637        // initialize before document ready
3638        window.edgetag = window.edgetag || function() {(edgetag.stubs = edgetag.stubs || []).push(arguments)};
3639        edgetag('init', {
3640            edgeURL: edgeUrl,
3641            disableConsentCheck: true
3642        });
3643
3644        // POST to magento to set up cookie
3645        requestTruIdCookie();
3646
3647        window.addEventListener('cart-change', cartChangeCheck);
3648        hyva.alpineInitialized(initializeBlotout);
3649    </script>
3649
3650<span style="display:none;">
3651    <span id="klevu_sessionId"></span>
3652    <span id="klevu_loginCustomerGroup"></span>
3653    <span id="klevu_loginCustomerEmail"></span>
3654    <span id="klevu_shopperIP"></span>
3655</span>
3656
3657<script type="text&#x2F;javascript">
3658
3659    var updateKlevuSessionDataElementsFromLocalStorage = function() {
3660        var klevuLocalStorage = JSON.parse(window.localStorage.getItem(
3661            'klv_mage'
3662        ) || '{}');
3663        var klevuMagentoCustomerDataKey = 'customerData';
3664        var klevuLocalStorageCustomerData = klevuLocalStorage.hasOwnProperty(klevuMagentoCustomerDataKey)
3665            ? klevuLocalStorage[klevuMagentoCustomerDataKey]
3666            : {};
3667        document.getElementById('klevu_sessionId').innerText = klevuLocalStorageCustomerData.hasOwnProperty('session_id')
3668            ? klevuLocalStorageCustomerData.session_id
3669            : '';
3670        document.getElementById('klevu_loginCustomerGroup').innerText = klevuLocalStorageCustomerData.hasOwnProperty('customer_group_id')
3671            ? klevuLocalStorageCustomerData.customer_group_id
3672            : '';
3673        document.getElementById('klevu_loginCustomerEmail').innerText = klevuLocalStorageCustomerData.hasOwnProperty('id_code')
3674            ? klevuLocalStorageCustomerData.id_code
3675            : '';
3676        document.getElementById('klevu_shopperIP').innerText = klevuLocalStorageCustomerData.hasOwnProperty('shopper_ip')
3677            ? klevuLocalStorageCustomerData.shopper_ip
3678            : '';
3679    };
3680    updateKlevuSessionDataElementsFromLocalStorage();
3681
3682    document.addEventListener(
3683        'klevu.customerData.loaded',
3684        updateKlevuSessionDataElementsFromLocalStorage
3685    );
3686    </script>
3686<div style="display: none;" id="attentiveMagentoPage"></div>
3687<script type="text/javascript">
3688    document.addEventListener("DOMContentLoaded", function () {
3689        'use strict';
3690
3691        let categoryHoverImageUrl = "https://www.outdoornativitysets.com/categoryhoverimage/image/image/";
3692
3693        const klevuQuickSearchBlockSelector = '#maincontent .klevuQuickSearchingArea .klevuProduct:not([hover-events-added])';
3694        const magentoProductBlockSelector = '#maincontent .product-items .product-item:not([hover-events-added])';
3695        const klevuProductBlockSelector = '#maincontent .kuResultsListing .klevuProduct .klevuImgWrap:not([hover-events-added])';
3696
3697        async function createHoverImage(productId, originalImage) {
3698            const response = await fetch(categoryHoverImageUrl + '?' + new URLSearchParams({
3699                product_id: productId
3700            }));
3701
3702            if (response.ok) {
3703                const responseData = await response.json();
3704                if (responseData.success) {
3705                    const hoverImage = document.createElement('img');
3706                    hoverImage.classList.add('hover-image');
3707                    hoverImage.style.opacity = 0;
3708                    hoverImage.style.transition = 'opacity 0.5s';
3709                    hoverImage.src = responseData.image_src;
3710
3711                    originalImage.insertAdjacentElement('afterend', hoverImage);
3712
3713                    showHoverImage(hoverImage);
3714                    return;
3715                }
3716            }
3717
3718            originalImage.setAttribute("no-category-hover", true);
3719        }
3720
3721        function showHoverImage(hoverImage) {
3722            if (hoverImage) {
3723                hoverImage.style.opacity = 1;
3724            }
3725        }
3726        function hideHoverImage(hoverImage) {
3727            if (hoverImage) {
3728                hoverImage.style.opacity = 0;
3729            }
3730        }
3731
3732        function initMouseEvents() {
3733            // handlers for quicksearch area
3734            document.querySelectorAll(klevuQuickSearchBlockSelector).forEach(item => {
3735                item.setAttribute('hover-events-added', true);
3736
3737                item.addEventListener('mouseenter', function (e) {
3738                    const originalImage = e.target.querySelector('.klevuQuickImgWrap img');
3739                    const hoverImage = e.target.querySelector('img.hover-image');
3740                    if (!originalImage.getAttribute('no-category-hover')) {
3741                        if (!hoverImage) {
3742                            const productIds = e.target.querySelector('a').getAttribute("data-id").split("-");
3743                            createHoverImage(productIds[0], originalImage);
3744                        } else {
3745                            showHoverImage(hoverImage);
3746                        }
3747                    }
3748                });
3749
3750                item.addEventListener('mouseleave', function (e) {
3751                    let hoverImage = e.target.querySelector('img.hover-image');
3752                    const that = this;
3753                    if (!hoverImage) {
3754                        setTimeout(function () {
3755                            hoverImage = that.querySelector('img.hover-image');
3756                            hideHoverImage(hoverImage);
3757                        }, 1000);
3758                    } else {
3759                        hideHoverImage(hoverImage);
3760                    }
3761                });
3762            });
3763
3764
3765            // handlers for product sliders area
3766            document.querySelectorAll(magentoProductBlockSelector).forEach(item => {
3767                item.setAttribute('hover-events-added', true);
3768
3769                item.addEventListener('mouseenter', function (e) {
3770                    const originalImage = e.target.querySelector('img.product-image-photo');
3771                    const hoverImage = e.target.querySelector('img.hover-image');
3772                    if (!originalImage.getAttribute('no-category-hover')) {
3773                        if (!hoverImage && !originalImage.getAttribute('no-category-hover')) {
3774                            const productIdInput = e.target.querySelector('input[name="product"]');
3775                            if (productIdInput && productIdInput.value) {
3776                                createHoverImage(productIdInput.value, originalImage);
3777                            } else {
3778                                originalImage.setAttribute("no-category-hover", true);
3779                            }
3780                        } else {
3781                            showHoverImage(hoverImage);
3782                        }
3783                    }
3784                });
3785
3786                item.addEventListener('mouseleave', function (e) {
3787                    let hoverImage = e.target.querySelector('img.hover-image');
3788                    const that = this
3789                    if (!hoverImage) {
3790                        setTimeout(function () {
3791                            hoverImage = that.querySelector('img.hover-image');
3792                            hideHoverImage(hoverImage);
3793                        }, 1000);
3794                    } else {
3795                        hideHoverImage(hoverImage);
3796                    }
3797                });
3798            });
3799
3800
3801            // handler for klevu products grid area
3802            document.querySelectorAll(klevuProductBlockSelector).forEach(item => {
3803                item.setAttribute('hover-events-added', true);
3804
3805                item.addEventListener('mouseenter', function (e) {
3806                    const originalImage = e.target.querySelector('img.kuProdImg');
3807                    const hoverImage = e.target.querySelector('img.hover-image');
3808                    if (!originalImage.getAttribute('no-category-hover')) {
3809                        if (!hoverImage && !originalImage.getAttribute('no-category-hover')) {
3810                            const productIds = e.target.querySelector('.klevuProductClick').getAttribute("data-id").split("-");
3811                            createHoverImage(productIds[0], originalImage);
3812                        } else {
3813                            showHoverImage(hoverImage);
3814                        }
3815                    }
3816                });
3817
3818                item.addEventListener('mouseleave', function (e) {
3819                    let hoverImage = e.target.querySelector('img.hover-image');
3820                    const that = this;
3821                    if (!hoverImage) {
3822                        setTimeout(function () {
3823                            hoverImage = that.querySelector('img.hover-image');
3824                            hideHoverImage(hoverImage);
3825                        }, 1000);
3826                    } else {
3827                        hideHoverImage(hoverImage);
3828                    }
3829                });
3830            });
3831        }
3832
3833        document.addEventListener("klevuLoaded", function () {
3834            initMouseEvents();
3835        });
3836    });
3837</script>
3837
3838
3839
3840<script type="text&#x2F;javascript">
3841    var klevu_cmsSearchEnabled = false;
3842</script>
3842
3843
3844
3845<script>
3846    (() => {
3847        function src_default(Alpine) {
3848            Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
3849                let evaluate = evaluateLater(expression);
3850                let options = {
3851                    rootMargin: getRootMargin(modifiers),
3852                    threshold: getThreshold(modifiers)
3853                };
3854                let observer = new IntersectionObserver((entries) => {
3855                    entries.forEach((entry) => {
3856                        if (entry.isIntersecting === (value === "leave"))
3857                            return;
3858                        evaluate();
3859                        modifiers.includes("once") && observer.disconnect();
3860                    });
3861                }, options);
3862                observer.observe(el);
3863                cleanup(() => {
3864                    observer.disconnect();
3865                });
3866            }));
3867        }
3868        function getThreshold(modifiers) {
3869            if (modifiers.includes("full"))
3870                return 0.99;
3871            if (modifiers.includes("half"))
3872                return 0.5;
3873            if (!modifiers.includes("threshold"))
3874                return 0;
3875            let threshold = modifiers[modifiers.indexOf("threshold") + 1];
3876            if (threshold === "100")
3877                return 1;
3878            if (threshold === "0")
3879                return 0;
3880            return Number(`.${threshold}`);
3881        }
3882        function getLengthValue(rawValue) {
3883            let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/);
3884            return match ? match[1] + (match[2] || "px") : void 0;
3885        }
3886        function getRootMargin(modifiers) {
3887            const key = "margin";
3888            const fallback = "0px 0px 0px 0px";
3889            const index = modifiers.indexOf(key);
3890            if (index === -1)
3891                return fallback;
3892            let values = [];
3893            for (let i = 1; i < 5; i++) {
3894                values.push(getLengthValue(modifiers[index + i] || ""));
3895            }
3896            values = values.filter((v) => v !== void 0);
3897            return values.length ? values.join(" ").trim() : fallback;
3898        }
3899
3900        document.addEventListener("alpine:init", () => {
3901            window.Alpine.plugin(src_default);
3902        });
3903    })();
3904</script>
vendor: 1 bytes, line 3904
3904
3905<script>
3906    for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]":"intersect",".product-info [x-data]":"intersect","#filters-content [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]":"intersect","#notice-cookie-block":"idle"})) {
3907        document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`));
3908    }
3909</script>
vendor: 1 bytes, line 3909
3909
3910<script>
3911    (function () {
3912        "use strict";
3913
3914        const hasAlpine = new Promise(resolve => {
3915            window.addEventListener('alpine:initialized', resolve, {once: true, passive: true});
3916        });
3917
3918        const hasInteract = new Promise(resolve => {
3919            (events => {
3920                const onInteract = () => {
3921                    resolve();
3922                    events.forEach(type => window.removeEventListener(type, onInteract));
3923                }
3924                events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true}))
3925            })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown'])
3926        });
3927
3928        const onIntersect = (el) => {
3929            return new Promise(resolve => {
3930                const observer = new IntersectionObserver(entries => {
3931                    for (const entry of entries) {
3932                        if (entry.isIntersecting) {
3933                            observer.disconnect()
3934                            resolve();
3935                        }
3936                    }
3937                }, {});
3938                observer.observe(el);
3939            });
3940        }
3941
3942        function runComponent(el) {
3943            hasAlpine.then(() => {
3944                el.removeAttribute('x-ignore');
3945                queueMicrotask(() => Alpine.initTree(el));
3946            });
3947        }
3948
3949        function initDeferredComponents() {
3950            document.querySelectorAll('[x-data][x-defer]').forEach(el => {
3951                el.setAttribute('x-ignore', '');
3952                const deferUntil = (el.getAttribute('x-defer') || '').trim();
3953                switch (deferUntil) {
3954                    case 'interact':
3955                        hasInteract.then(() => runComponent(el));
3956                        break;
3957                    case 'intersect':
3958                        onIntersect(el).then(() => runComponent(el))
3959                        break;
3960                    case 'idle':
3961                        window.requestIdleCallback
3962                            ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000})
3963                            : setTimeout(() => runComponent(el), 4000);
3964                        break;
3965                    case 'eager':
3966                        runComponent(el);
3967                        break;
3968                    default:
3969                        if (deferUntil.startsWith('event:') && deferUntil.length > 6) {
3970                            window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true});
3971                        }
3972                }
3973            });
3974        }
3975
3976        window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true});
3977    })()
3978</script>
3978
3979
3980<script type="module"
3981        src="https://www.outdoornativitysets.com/static/version1789694905/frontend/Kadro/outdoor_nativity_sets_hyva/en_US/Hyva_Theme/js/alpine3.min.js"
3982        defer
3983        crossorigin
3984></script>
vendor: 1 bytes, line 3984
3984
3985<script>
3986    'use strict';
3987    function dispatchMessages(messages, hideAfter) {
3988        const messagesEvent = new CustomEvent("messages-loaded", {
3989            detail: {
3990                messages: messages,
3991                hideAfter: hideAfter
3992            }
3993        });
3994        window.dispatchEvent(messagesEvent);
3995    }
3996
3997    if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
3998        console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
3999    }
4000
4001    (function( hyva, undefined ) {
4002
4003        hyva.initFormKey = () => {
4004            const inputSelector = 'input[name="form_key"]',
4005                formKey = hyva.getFormKey();
4006
4007            Array.from(document.querySelectorAll(inputSelector)).map(function (input) {
4008                input.value = formKey
4009            });
4010        }
4011
4012        hyva.initMessages = () => {
4013            try {
4014                const messages = hyva.getCookie('mage-messages');
4015                window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : [];
4016
4017                dispatchMessages(window.mageMessages);
4018
4019                                // empty `mage-messages` cookie
4020                const skipSetDomain = true;
4021                hyva.setCookie('mage-messages','', -1, skipSetDomain);
4022
4023            } catch (error) {
4024                console.warn('Error parsing Cookie Messages:', error);
4025            }
4026        }
4027
4028        window.addEventListener('DOMContentLoaded', hyva.initFormKey);
4029        hyva.alpineInitialized(hyva.initMessages)
4030
4031    }( window.hyva = window.hyva || {} ));
4032</script>
vendor: 1 bytes, line 4032
4032
4033<script>
4034    'use strict';
4035    {
4036        const private_content_key = 'mage-cache-storage';
4037        const private_content_expire_key = 'mage-cache-timeout';
4038        const private_content_version_key = 'private_content_version';
4039        const section_data_ids_key = 'section_data_ids';
4040        const mage_cache_session_id_key = 'mage-cache-sessid';
4041        const last_visited_store_key = 'last_visited_store';
4042
4043        const ttl = 3600;
4044
4045        if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) {
4046            console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script");
4047        }
4048
4049        function loadSectionData () {
4050            const browserStorage = hyva.getBrowserStorage();
4051            if (!browserStorage) {
4052                typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
4053                    [{
4054                        type: "warning",
4055                        text: "Please enable LocalStorage in your browser."
4056                    }]
4057                );
4058                return;
4059            }
4060            try {
4061                let isInvalid = false;
4062
4063                if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) {
4064                    isInvalid = true;
4065                }
4066                hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false);
4067
4068                if (!hyva.getCookie(mage_cache_session_id_key)) {
4069                    isInvalid = true;
4070                    browserStorage.removeItem(private_content_key);
4071                    const skipSetDomain = true;
4072                    const days = false;
4073                    hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain)
4074                }
4075
4076                const cookieVersion = hyva.getCookie(private_content_version_key);
4077                const storageVersion = browserStorage.getItem(private_content_version_key);
4078
4079                if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) {
4080                    isInvalid = true;
4081                }
4082
4083                const privateContentExpires = browserStorage.getItem(private_content_expire_key);
4084                if (privateContentExpires && new Date(privateContentExpires) < new Date()) {
4085                    browserStorage.removeItem(private_content_key);
4086                }
4087
4088                if (isInvalid && cookieVersion) {
4089                    fetchPrivateContent([]);
4090                } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) {
4091                    const privateContent = JSON.parse(browserStorage.getItem(private_content_key));
4092                    if (
4093                        privateContent &&
4094                        privateContentExpires &&
4095                        privateContent.cart &&
4096                        privateContent.customer
4097                    ) {
4098                        dispatchPrivateContent(privateContent);
4099                    } else {
4100                        fetchPrivateContent([]);
4101                    }
4102                } else {
4103                    if (document.getElementById('default-section-data')) {
4104                        const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim());
4105                        dispatchPrivateContent(privateContent);
4106                    } else {
4107                        dispatchPrivateContent({});
4108                    }
4109                }
4110
4111            } catch (error) {
4112                console.warn('Error retrieving Private Content:', error);
4113            }
4114        }
4115
4116        hyva.alpineInitialized(loadSectionData)
4117        window.addEventListener('reload-customer-section-data', loadSectionData);
4118
4119        window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data);
4120
4121        function dispatchPrivateContent(data) {
4122
4123            const privateContentEvent = new CustomEvent("private-content-loaded", {
4124                detail: {
4125                    data: window.processSectionDataBeforeDispatch(data)
4126                }
4127            });
4128            window.dispatchEvent(privateContentEvent);
4129        }
4130
4131        function fetchPrivateContent(sections) {
4132            fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, {
4133                method: 'GET',
4134                headers: {
4135                    'Content-Type': 'application/json',
4136                    'X-Requested-With': 'XMLHttpRequest'
4137                }
4138            })
4139                .then(response => response.ok && response.json())
4140                .then(
4141                    data => {
4142                        if (data) {
4143                            try {
4144                                const browserStorage = hyva.getBrowserStorage();
4145
4146                                // merge new data preserving non-invalidated sections
4147                                const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {};
4148
4149                                if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) {
4150                                    delete oldSectionData['checkout-data'];
4151                                }
4152                                const newSectionData = Object.assign(oldSectionData, data);
4153
4154                                dispatchPrivateContent(newSectionData);
4155
4156                                // don't persist messages, they've been dispatched already
4157                                if (newSectionData.messages && newSectionData.messages.messages ) {
4158                                    newSectionData.messages.messages = [];
4159                                }
4160
4161                                browserStorage.setItem(private_content_key, JSON.stringify(newSectionData));
4162
4163                                const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString();
4164                                browserStorage.setItem(private_content_expire_key, expiresAt);
4165
4166                                const newCookieVersion = hyva.getCookie(private_content_version_key);
4167                                browserStorage.setItem(private_content_version_key, newCookieVersion);
4168
4169                                // We don't need the section_data_ids in Hyvä, but we store them for compatibility
4170                                // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout
4171                                hyva.setCookie(
4172                                    section_data_ids_key,
4173                                    JSON.stringify(
4174                                        Object.keys(data).reduce((sectionDataIds, sectionKey) => {
4175                                            sectionDataIds[sectionKey] = data[sectionKey]['data_id'];
4176                                            return sectionDataIds;
4177                                        }, {})
4178                                    ),
4179                                    false,
4180                                    true
4181                                );
4182                            } catch (error) {
4183                                console.warn("Couldn't store privateContent", error);
4184                            }
4185                        }
4186                    }
4187                );
4188        }
4189    }
4190</script>
vendor: 1 bytes, line 4190
4190
4191<script>
4192    (() => {
4193        document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc()));
4194    })()
4195</script>
vendor: 1 bytes, line 4195
4195
4196<script>
4197    (events => {
4198        const dispatchUserInteractionEvent = () => {
4199            events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent))
4200            window.dispatchEvent(new Event('init-external-scripts'))
4201        };
4202        events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true}))
4203    })(['touchstart', 'mousemove', 'wheel', 'scroll', 'keydown'])
4204</script>
4204
4205<!-- Account type: 'Google Tag Manager' is not supported  -->
4206<script>
4207    function initConfigurableOptions(productId, optionConfig, cascadingOptions = false) {
4208
4209        function findPathParam(key) {
4210                        const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL;
4211            const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/');
4212            const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3);
4213            for (let i = 0; i < pathParts.length; i += 2) {
4214                if (pathParts[i] === key && pathParts.length > i) {
4215                    return pathParts[i + 1];
4216                }
4217            }
4218        }
4219
4220        return {
4221            optionConfig,
4222            productId,
4223            cascadingOptions,
4224            itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'),
4225            allowedAttributeOptions: [],
4226            selectedValues: [],
4227            init() {
4228                this.findAllowedAttributeOptions();
4229                this.$nextTick(() => {
4230                    if (typeof this.optionConfig.defaultValues === 'object') {
4231                        for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) {
4232                            this.changeOption(attributeId, value + '');
4233                        }
4234                    }
4235                });
4236
4237                // Set up child settings if cascading options
4238                if (this.cascadingOptions) {
4239                    this.setChildSettings();
4240                }
4241
4242                // When pivot options are updated, trigger event to be listened to
4243                this.$watch('allowedAttributeOptions', value => this.optionsUpdated());
4244            },
4245            optionsUpdated() {
4246                window.dispatchEvent(
4247                    new CustomEvent(
4248                        'configurableUpdated',
4249                        {
4250                            detail: ''
4251                        }
4252                    )
4253                );
4254            },
4255            /**
4256             * Set each option's child settings, and next/prev option setting. Fill (initialize)
4257             * an option's list of selections as needed or disable an option's setting.
4258             * @private
4259             */
4260            setChildSettings: function () {
4261                const allAttributes = this.optionConfig.attributes;
4262                const allAttributesSorted = Object.values(allAttributes).sort((a,b)=>{
4263                        return a.position - b.position
4264                    }
4265                );
4266
4267                let childSettings = [],
4268                    settings = allAttributesSorted,
4269                    index = settings.length,
4270                    option;
4271
4272                while (index--) {
4273                    option = settings[index];
4274
4275                    if (index) {
4276                        option.disabled = true;
4277                    } else {
4278                        option.disabled = false;
4279                    }
4280
4281                    option.childSettings = childSettings.slice();
4282                    option.prevSetting = settings[index - 1];
4283                    option.nextSetting = settings[index + 1];
4284
4285                    childSettings.push(option);
4286                }
4287            },
4288            /**
4289             * For a given option element, reset all of its selectable options. Clear any selected
4290             * index, disable the option choice, and reset the option's state if necessary.
4291             * @private
4292             * @param {*} element - The element associated with a configurable option.
4293             */
4294            resetChildren: function (element) {
4295                if (element.childSettings) {
4296                    let self = this;
4297
4298                    element.childSettings.forEach(function (set) {
4299                        set.disabled = true;
4300
4301                        if (typeof self.selectedValues[set.id] !== 'undefined') {
4302                            self.changeOption(set.id, '');
4303                        }
4304                    });
4305                }
4306            },
4307            /**
4308             * Based on current allowed attributes, remove any currently selected attributes that are considered invali
4308d
4309             * @param selectedValues
4310             */
4311            unsetInvalidOptions: function(selectedValues) {
4312                let allowedAttributeOptions = this.calculateAllowedAttributeOptions(selectedValues);
4313                let allAttributes = Object.values(this.optionConfig.attributes);
4314
4315                allAttributes.forEach(attribute => {
4316                    if (typeof selectedValues[attribute.id] !== 'undefined' &&
4317                        typeof allowedAttributeOptions[attribute.id] !== 'undefined') {
4318                        let selectedOptionId = selectedValues[attribute.id];
4319                        let selectedOption = allowedAttributeOptions[attribute.id].find(function(option) {
4320                            return option.id === selectedOptionId;
4321                        });
4322
4323                        if (typeof selectedOption === 'undefined') {
4324                            this.changeOption(attribute.id, '');
4325                        }
4326                    }
4327                });
4328            },
4329            getAttributeDisabled: function(attributeId) {
4330                let attribute = this.optionConfig.attributes[attributeId];
4331                if (typeof attribute !== 'undefined' && typeof attribute.disabled !== 'undefined') {
4332                    return attribute.disabled;
4333                } else {
4334                    return false;
4335                }
4336            },
4337            findSimpleIndex() {
4338                                this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues);
4339            },
4340            calculateSimpleIndexForPartialSelection(selectedValues) {
4341                if (selectedValues.length === 0) return 0;
4342                let productIndexIds = Object.keys(this.optionConfig.index);
4343                Object.keys(this.optionConfig.attributes).forEach((attribute) => {
4344                                        const productsWithAttributeMatch = selectedValues[attribute]
4345                        ? productIndexIds.filter((productIndex) => {
4346                            return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute]
4347                        })
4348                        : [];
4349
4350                                        productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds
4351                })
4352
4353                return productIndexIds[0];
4354            },
4355            calculateSimpleIndexForFullSelection(selectedValues) {
4356                const productIndexes = this.optionConfig.index;
4357                return Object.keys(productIndexes).find(productIndex => {
4358                    const productCandidateOptions = productIndexes[productIndex];
4359
4360                    for (const productOption in productCandidateOptions) {
4361                        if (
4362                            ! selectedValues[productOption] ||
4363                            selectedValues[productOption] !== productCandidateOptions[productOption]
4364                        ) {
4365                            return false;
4366                        }
4367                    }
4368                    return productIndex;
4369                });
4370            },
4371            productIndex: 0,
4372            findAllowedAttributeOptions() {
4373                                this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues);
4374            },
4375            calculateAllowedAttributeOptions(selectedValues) {
4376                const allAttributes = this.optionConfig.attributes;
4377                const allAttributesSorted = Object.values(allAttributes).sort((a,b) => {
4378                    return a.position - b.position
4379                });
4380
4381                const newAllowedAttributeOptions = [];
4382
4383                allAttributesSorted.forEach(attribute => {
4384                    let selectionWithoutAttr = selectedValues;
4385
4386                    // If using cascading options, limit available options in cascading order
4387                    if (this.cascadingOptions) {
4388                        let curAttribute = attribute;
4389
4390                        // Remove current attribute and each of its children from selection, such that only the parent options are factored 
4390into available product options
4391                        while (typeof curAttribute !== 'undefined') {
4392                            selectionWithoutAttr = this.removeAttrFromSelection(selectionWithoutAttr, curAttribute.id);
4393                            curAttribute = curAttribute.nextSetting;
4394                        }
4395                    } else {
4396                        selectionWithoutAttr = this.removeAttrFromSelection(selectedValues, attribute.id);
4397                    }
4398
4399                    selectionWithoutAttr = Object.assign({}, selectionWithoutAttr);
4400                    const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr);
4401                    newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => {
4402                        return !!option.products.find(product => {
4403                            return availableIndexes.includes(product);
4404                        })
4405                    });
4406                });
4407                return newAllowedAttributeOptions;
4408            },
4409            calculateAvailableProductIndexes(selectedOptions) {
4410                if (Object.keys(selectedOptions).length === 0) {
4411                                        if (Object.values(this.optionConfig.salable || {}).length) {
4412                                                return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i)
4413                    }
4414                                        return Object.keys(this.optionConfig.index);
4415                }
4416
4417                                const selectedIds = Object.keys(selectedOptions);
4418                if (Object.values(this.optionConfig.salable || {}).length) {
4419                                        const selectedOptionIndexes = selectedIds.map(attrId => {
4420                        const optionValue = selectedOptions[attrId];
4421                        return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || []
4422                    })
4423                                        return selectedOptionIndexes.reduce((acc, optionIndexes) => {
4424                        return acc.filter(index => optionIndexes.includes(index));
4425                    });
4426                } else {
4427                                        const productIndexes = this.optionConfig.index;
4428                    return Object.keys(productIndexes).filter(index => {
4429                                                for (const attrId of selectedIds) {
4430                            if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false
4431                        }
4432                        return true
4433                    });
4434                }
4435            },
4436            findAttributeByOptionId(optionId) {
4437                for (const attributeId in this.optionConfig.attributes) {
4438                    const attributeOptions = this.optionConfig.attributes[attributeId].options || [];
4439                    if (attributeOptions.find(option => option.id === optionId)) {
4440                        return attributeId;
4441                    }
4442                }
4443            },
4444            getAllowedAttributeOptions(attributeId) {
4445                return this.allowedAttributeOptions[attributeId] || []
4446            },
4447            getProductIdsForOption(option) {
4448                const attributeId = this.findAttributeByOptionId(option.id);
4449                const allOptions = this.optionConfig.attributes[attributeId];
4450                const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id);
4451                return opt && opt.products
4452                    ? opt.products
4453                    : [];
4454            },
4455            findProductIdsForPartialSelection(optionSelection) {
4456                const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => {
4457                    const newCandidates = this.getProductIdsForOption({id: optionId});
4458                    return candidates === null
4459                        ? newCandidates
4460                        : candidates.filter(productId => newCandidates.includes(productId));
4461                }, null);
4462                return candidateProducts || [];
4463            },
4464            findCheapestProductForPartialSelection(optionSelection) {
4465                const candidateProducts = this.findProductIdsForPartialSelection(optionSelection);
4466                return candidateProducts.reduce((cheapest, simpleIdx) => {
4467                    // in the first iteration we start with simpleIdx as the currently cheapest product
4468                    if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx;
4469                    const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount;
4470                    return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount
4471                        ? simpleIdx
4472                        : cheapest;
4473                }, 0)
4474            },
4475            findProductIdToUseForOptionPrice(option) {
4476                // try to find a product for a complete selection
4477                const attributeId = this.findAttributeByOptionId(option.id);
4478                const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id});
4479                const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection);
4480                // if there is no complete selection, use the cheapest product for the option
4481                return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection);
4482            },
4483            getAttributeOptionLabel(option) {
4484                // Overrides original to exclude the price change from the option labels
4485                return option.label;
4486            },
4487            getOptionPriceAdjustmentBasePrice() {
4488                if (this.optionConfig.optionPrices[this.productIndex]) {
4489                    return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount
4490                }
4491                const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues);
4492                return this.optionConfig.optionPrices[cheapestForSelection]
4493                    ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount
4494                    : this.optionConfig.prices.finalPrice.amount; // default price if no option selection
4495            },
4496            clearOptionIfActive(optionId, value) {
4497                if (this.selectedValues[optionId] === value) {
4498                    this.blurLabel()
4499                    this.changeOption(optionId, '')
4500                }
4501            },
4502            removeAttrFromSelection(selectedValues, attributeId) {
4503                                attributeId = parseInt(attributeId);
4504                return selectedValues.reduce((newSelection, val, attr) => {
4505                    if (attr !== attributeId) {
4506                        newSelection[attr] = val;
4507                    }
4508                    return newSelection;
4509                }, []);
4510            },
4511            changeOption(attributeId, value) {
4512                if (value === '') {
4513                    this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId)
4514                } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) {
4515                                        this.selectedValues[attributeId] = value;
4516                }
4517                this.findSimpleIndex();
4518                this.findAllowedAttributeOptions();
4519                this.updatePrices();
4520                this.updateGallery();
4521
4522                // If using cascading options, reset options or enable options depending on what is selected
4523                if (this.cascadingOptions) {
4524                    let element = this.optionConfig.attributes[attributeId];
4525                    if (value && element.nextSetting) {
4526                        element.nextSetting.disabled = false;
4527                    } else if (!value) {
4528                        this.resetChildren(element);
4529                    }
4530
4531                    // Remove any invalid options depending on what was selected
4532                    this.unsetInvalidOptions(this.selectedValues);
4533                }
4534
4535                window.dispatchEvent(
4536                    new CustomEvent(
4537                        'configurable-selection-changed',
4538                        {
4539                            detail: {
4540                                productId: this.productId,
4541                                optionId: attributeId,
4542                                value: value,
4543                                productIndex: this.productIndex,
4544                                selectedValues: this.selectedValues,
4545                                candidates: this.findProductIdsForPartialSelection(this.selectedValues),
4546                            }
4547                        }
4548                    )
4549                );
4550
4551                // Add new custom events when option selected is changed
4552                let productSelected = typeof this.calculateSimpleIndexF
4552orFullSelection(this.selectedValues) !== 'undefined';
4553                let sku = productSelected ? this.optionConfig.skus[this.productIndex] : this.optionConfig.parentSku;
4554                window.dispatchEvent(
4555                    new CustomEvent(
4556                        "update-sku-" + this.productId,
4557                        {
4558                            detail: sku
4559                        }
4560                    )
4561                );
4562
4563                if (productSelected) {
4564                    window.dispatchEvent(
4565                        new CustomEvent(
4566                            "update-attention-" + this.productId,
4567                            {
4568                                detail: this.optionConfig.attention[this.productIndex]
4569                            }
4570                        )
4571                    );
4572                }
4573
4574                let stock = productSelected ? this.optionConfig.stock[this.productIndex] : this.optionConfig.stock['cp-avail'];
4575                window.dispatchEvent(
4576                    new CustomEvent(
4577                        "update-stock-" + this.productId,
4578                        {
4579                            detail: stock
4580                        }
4581                    )
4582                );
4583            },
4584            calculateIsMinimalPrice() {
4585                return (
4586                    this.selectedValues.filter(value => !!value).length <
4587                    Object.keys(this.optionConfig.attributes).length
4588                );
4589            },
4590            updatePrices() {
4591                const value = this.productIndex ?
4592                    this.optionConfig.optionPrices[this.productIndex] :
4593                    this.optionConfig.prices;
4594                window.dispatchEvent(
4595                    new CustomEvent(
4596                        "update-prices-" + this.productId,
4597                        {
4598                            detail: Object.assign(
4599                                value,
4600                                { isMinimalPrice: this.calculateIsMinimalPrice() }
4601                            )
4602                        }
4603                    )
4604                );
4605            },
4606            updateGallery () {
4607                if (this.productIndex) {
4608                    const images = this.optionConfig.images[this.productIndex];
4609                    images && window.dispatchEvent(new CustomEvent(
4610                        "update-gallery",
4611                        { detail: {
4612                                "images": this.sortImagesByPosition(images),
4613                                "productId": this.productId
4614                            }
4615                        }
4616                    ));
4617                } else {
4618                    window.dispatchEvent(new CustomEvent("reset-gallery", {
4619                        detail: { "productId": this.productId }
4620                    }));
4621                }
4622            },
4623            sortImagesByPosition(images) {
4624                return images.sort((x, y) => {
4625                    return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1)
4626                });
4627            },
4628            onGetCartData(data) {
4629                            },
4630            preselectCartItems(data) {
4631                // pre-select options based on cart data for current (quote) itemId
4632                const cart = data && data.cart;
4633                if (cart && cart.items) {
4634                    const cartItem = cart.items.find((item) => {
4635                        return (
4636                            item.item_id === this.itemId
4637                            && item.product_id === this.productId
4638                        )
4639                    });
4640                    if (cartItem && cartItem.options && cartItem.options.length) {
4641                        cartItem.options.map(option => {
4642                            this.changeOption(option.option_id, option.option_value);
4643                        })
4644                    }
4645                }
4646            },
4647            preselectQuerystringItems() {
4648                // pre-select option like ?size=167
4649                const urlQueryParams = new URLSearchParams(window.location.search.replace('?',''));
4650                this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code));
4651            },
4652            preselectLocationHashItems() {
4653                // pre-select option like #144=167
4654                const urlHashParams = new URLSearchParams(window.location.hash.replace('#',''));
4655                this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id));
4656            },
4657            preselectItemsBasedOnLocation(getLocationValue) {
4658                Object.values(this.optionConfig.attributes).map(attribute => {
4659                    this.changeOption(attribute.id, getLocationValue(attribute))
4660                });
4661            }
4662        }
4663    }
4664
4665</script>
vendor: 1 bytes, line 4665
4665
4666<script>
4667    function initSwatchOptions(swatchConfig) {
4668        return {
4669            swatchConfig,
4670            getAttributeSwatchData(attributeId) {
4671                const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]);
4672                swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']);
4673
4674                return swatchConfig;
4675            },
4676            getAllAttributeOptions(attributeId) {
4677                return (
4678                    this.optionConfig.attributes[attributeId] &&
4679                    this.optionConfig.attributes[attributeId].options
4680                ) || []
4681            },
4682            optionIsActive(attributeId, optionId) {
4683                // return true if a product with this option is in stock
4684                return !!this.getAllowedAttributeOptions(attributeId).find(
4685                    option => option.id === optionId
4686                )
4687            },
4688            optionIsEnabled(attributeId, optionId) {
4689                // return true if a product with this option is enabled
4690                for (const productId in this.optionConfig.index) {
4691                    if (this.optionConfig.index[productId][attributeId] === optionId) {
4692                        return true;
4693                    }
4694                }
4695                return false;
4696            },
4697            mapSwatchTypeNumberToTypeCode(typeNumber) {
4698                switch ("" + typeNumber) {
4699                    case "1":
4700                        return "color"
4701                    case "2":
4702                        return "image"
4703                    case "3":
4704                        return "empty"
4705                    case "0":
4706                    default:
4707                        return "text"
4708                }
4709            },
4710            getTypeOfFirstOption(attributeId) {
4711                for (const optionId in this.swatchConfig[attributeId]) {
4712                    const option = this.swatchConfig[attributeId][optionId];
4713                    if (typeof option.type !== 'undefined') {
4714                        return this.mapSwatchTypeNumberToTypeCode(option.type);
4715                    }
4716                }
4717            },
4718            getVisualSwatchType(attributeId, targetOptionId) {
4719                // If a type configuration is present for the given option id, use it
4720                const config = this.swatchConfig[attributeId];
4721                if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') {
4722                    return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type);
4723                }
4724
4725                // Otherwise - if no config is present for the target option - use the type of the first option
4726                // with a type property from the attribute, thus assuming its the same type as the target option.
4727                // (This edge case condition can occur on single swatch products if some options are not salable)
4728                return this.getTypeOfFirstOption(attributeId);
4729            },
4730            getSwatchType(attributeId, optionId) {
4731                // Deserialize the attribute details the first time they are used
4732                if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) {
4733                    this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId);
4734                }
4735                const type =  this.swatchConfig[attributeId] &&
4736                    this.swatchConfig[attributeId].details &&
4737                    this.swatchConfig[attributeId].details.swatch_input_type ||
4738                    "empty";
4739                return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type;
4740            },
4741            isTextSwatch(attributeId, optionId) {
4742                return this.getSwatchType(attributeId, optionId) === 'text';
4743            },
4744            isVisualSwatch(attributeId, optionId) {
4745                const type = this.getSwatchType(attributeId, optionId);
4746
4747                return ['image', 'color'].includes(type);
4748            },
4749            getSwatchBackgroundStyle(attributeId, optionId) {
4750                const config = this.getSwatchConfig(attributeId, optionId);
4751                const type = this.getSwatchType(attributeId, optionId);
4752
4753                if (type === "color") {
4754                    return 'background-color:' + config.value;
4755                } else if (type === "image") {
4756                    return "background: #ffffff url('" + config.value + "') no-repeat center";
4757                } else {
4758                    return '';
4759                }
4760            },
4761            getSwatchText(attributeId, optionId) {
4762                const config = this.getSwatchConfig(attributeId, optionId);
4763                return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId);
4764            },
4765            getSelectedSwatchText(attributeId, optionId) {
4766                let tooltipText = this.isTooltipVisible() && this.activeTooltipItem.attribute == attributeId ? this.getTooltipLabel() : '';
4767                return tooltipText || this.getSwatchText(attributeId, optionId);
4768            },
4769            getOptionLabelFromOptionConfig(attributeId, optionId) {
4770                // Fallback if no value is present in swatchConfig data
4771                // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190
4772                const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId);
4773                return option && option[0] && option[0].label ||'';
4774            },
4775            getSwatchConfig(attributeId, optionId) {
4776                return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId]
4777                    ? this.swatchConfig[attributeId][optionId]
4778                    : false;
4779            },
4780            activeTooltipItem: false,
4781            tooltipPositionElement: false,
4782            isTooltipVisible() {
4783                return this.activeTooltipItem &&
4784                    this.getSwatchConfig(
4785                        this.activeTooltipItem.attribute,
4786                        this.activeTooltipItem.item
4787                    );
4788            },
4789            isFirstItemCol() {
4790                return this.activeTooltipItem.index === 0;
4791            },
4792            getTooltipImageStyle(attributeId, optionId) {
4793                const config = this.getSwatchConfig(attributeId, optionId);
4794                const type = this.getSwatchType(attributeId, optionId);
4795
4796                if (type === "color") {
4797                    return 'background-color:' + config.value + '; width: 110px; height: 90px;';
4798                } else if (type === "image") {
4799                    return "background: #ffffff url('" + config.thumb +
4800                        "') center center no-repeat; width: 110px; height: 90px;";
4801                } else {
4802                    return 'display:none';
4803                }
4804            },
4805            getTooltipPosition() {
4806                return this.tooltipPositionElement ?
4807                    `top: ${this.tooltipPositionElement.offsetTop}px;` +
4808                    `left: ${
4809                        this.tooltipPositionElement.offsetLeft - (
4810                            this.tooltipPositionElement.closest('.snap') &&
4811                            this.tooltipPositionElement.closest('.snap').scrollLeft ||
4812                            0
4813                        )
4814                    }px;` : ''
4815            },
4816            getTooltipLabel() {
4817                return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label
4818            },
4819            focusedLabel: false,
4820            focusLabel(optionId) {
4821                this.focusedLabel = optionId;
4822            },
4823            blurLabel() {
4824                this.focusedLabel = false;
4825            },
4826            showSwatches: false,
4827            initShowSwatchesIntersect() {
4828                if ('IntersectionObserver' in window && !window.scrollY) {
4829                    let io = new IntersectionObserver(
4830                        entries => {
4831                            entries.map(entry => {
4832                                if (entry.isIntersecting) {
4833                                    this.showSwatches = true;
4834                                    io.unobserve(this.$root);
4835                                }
4836                            })
4837                        }
4838                    );
4839                    io.observe(this.$root);
4840                } else {
4841                    this.showSwatches = true
4842                }
4843            }
4844        }
4845    }
4846</script>
vendor: 1 bytes, line 4846
4846
4847<script>
4848    'use strict';
4849
4850    const grecaptchaV2LoadCallbacks = [];
4851
4852    function executeRecaptchaLoadCallbacks () {
4853        while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) {
4854            const callback = grecaptchaV2LoadCallbacks.pop();
4855            typeof callback === 'string' ? window[callback]() : callback();
4856        }
4857    }
4858
4859    (function() {
4860        const loadRecaptchaScript = (event) => {
4861
4862            if (window.grecaptcha || !event.target.form) {
4863                return;
4864            }
4865
4866            const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks';
4867            const siteKey = '6Lf7qRkjAAAAAP0lyuri41_9EGRTkVEkzoJvVxbE';
4868            const script = document.createElement('script');
4869            script.type = 'text/javascript';
4870            script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`;
4871            script.async = true;
4872            document.head.appendChild(script);
4873
4874            script.addEventListener('load', () => {
4875                Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled'));
4876            });
4877        }
4878
4879        window.forceLoadRecaptchaScript = (form) => {
4880            loadRecaptchaScript({target: {form: form || 'dummy'}});
4881            executeRecaptchaLoadCallbacks();
4882        };
4883
4884        document.body.addEventListener('input', loadRecaptchaScript, { once: true });
4885        document.body.addEventListener('focus', loadRecaptchaScript, { once: true });
4886
4887    }());
4888
4889</script>
vendor: 1 bytes, line 4889
4889
4890<script>
4891    'use strict';
4892
4893    (function () {
4894        const modals = [];
4895        const excludedFromFocusTrapping = new Set();
4896
4897        function trapFocusInNextModalWithOverlay() {
4898            for (let idx = modals.length -1; idx >= 0; idx--) {
4899                const nextOnStack = modals[idx];
4900                const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name];
4901                if (! isOverlayDisabled(nextDialogElement)) {
4902                    hyva.trapFocus(nextDialogElement);
4903                    break;
4904                }
4905            }
4906        }
4907
4908        function focusables(dialogElement) {
4909            const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])';
4910            return Array.from(dialogElement.querySelectorAll(selector))
4911                .filter(el => !el.hasAttribute('disabled'));
4912        }
4913
4914        function firstVisible(elements) {
4915            const a = Array.from(elements);
4916            for (let i = 0; i < a.length; i++) {
4917                if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i];
4918            }
4919            return null;
4920        }
4921
4922        function isInViewport(element) {
4923            const rect = element && element.getBoundingClientRect();
4924            return rect &&
4925                rect.top >= 0 &&
4926                rect.left >= 0 &&
4927                rect.right <= window.innerWidth &&
4928                rect.bottom <= window.innerHeight;
4929        }
4930
4931        function setFocusAfterTransition(dialogElement, duration) {
4932                        const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]'));
4933            const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]'));
4934            next: for (let candidate of candidates) {
4935                for (let child of nested) {
4936                    if (child.contains(candidate)) continue next;
4937                }
4938                setTimeout(() => candidate.focus(), 50);
4939                break;
4940            }
4941            window.setTimeout(() => {
4942                const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) ||
4943                    focusables(dialogElement)[0] ||
4944                    null;
4945                focusElement && isInViewport(focusElement) && focusElement.focus();
4946            }, Math.max(1, duration));
4947        }
4948
4949        function determineTrigger($refs, dialog, trigger) {
4950                        if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) {
4951                return dialog.target;
4952            }
4953                        if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) {
4954                return trigger.target;
4955            }
4956                        if (typeof trigger === 'string') {
4957                try {
4958                    return $refs[trigger] || document.querySelector(trigger)
4959                } catch (e) {}
4960            }
4961                        if (trigger instanceof Element) {
4962                return trigger;
4963            }
4964
4965                        return null;
4966        }
4967
4968        function isOverlayDisabled(dialog) {
4969            return dialog && dialog.hasAttribute('x-no-overlay')
4970        }
4971
4972        function areRemainingModalsWithoutOverlay(modals)
4973        {
4974            const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled);
4975
4976            return overflowDisabled.length === modals.length;
4977        }
4978
4979        window.hyva.modal = function(options = {}) {
4980                        if (this.$el && this.$el.dataset && this.$el.dataset.options) {
4981                try {
4982                    options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}'));
4983                } catch (e) {
4984                    throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON');
4985                }
4986            }
4987
4988            const config = Object.assign({
4989                dialog: 'dialog',                 duration: 300,                 transitionEnter: 'transition ease-out duration-300',
4990                transitionEnterStart: 'opacity-0',
4991                transitionEnterEnd: 'opacity-100',
4992                transitionLeave: 'transition ease-in duration-300',
4993                transitionLeaveStart: 'opacity-100',
4994                transitionLeaveEnd: 'opacity-0',
4995            }, options);
4996            let lastHide = 0;
4997
4998            return {
4999                opened: {},
5000                show(dialog, trigger) {
5001                    const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger);
5002                    const name = typeof dialog === 'string' ? dialog : config.dialog;
5003                    const dialogElement = this.$refs[name];
5004                    if (! dialogElement) {
5005                                                return;
5006                    }
5007                    const useOverlay = ! dialogElement.hasAttribute('x-no-overlay');
5008
5009                    dialogElement.scrollTop = 0;
5010
5011                                        if (this.opened[name]) {
5012                        return;
5013                    }
5014
5015                    if (focusTargetAfterHide) {
5016                        focusTargetAfterHide.setAttribute('aria-expanded', 'true');
5017                    }
5018
5019                    this.opened[name] = true;
5020                    useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement));
5021                    setFocusAfterTransition(dialogElement, config.duration);
5022
5023                    const frame = {name, instance: this, focusTarget: focu
5023sTargetAfterHide, time: Date.now()};
5024
5025                    modals.push(frame);
5026                    if (useOverlay) {
5027                        document.body.classList.add('overflow-hidden');
5028                    }
5029                    return new Promise(resolve => frame.resolve = resolve);
5030                },
5031                cancel() {
5032                    this.hide(false);
5033                },
5034                ok() {
5035                    this.hide(true);
5036                },
5037                hide(value) {
5038                                        if (Date.now() - lastHide < config.duration) {
5039                        return;
5040                    }
5041                    lastHide = Date.now();
5042
5043                    const modal = modals.pop() || {};
5044                    if (! modal.instance) {
5045                        return;
5046                    }
5047
5048                    const name = modal.name;
5049                    this.opened[name] = false;
5050                    hyva.releaseFocus(modal.instance.$refs[modal.name])
5051                    trapFocusInNextModalWithOverlay();
5052
5053                    const nextFocusAfterHide = modal.focusTarget;
5054                    nextFocusAfterHide && setTimeout(() => {
5055                        nextFocusAfterHide.setAttribute('aria-expanded', 'false');
5056                        nextFocusAfterHide.focus()
5057                    }, config.duration);
5058
5059                    if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) {
5060                        document.body.classList.remove('overflow-hidden');
5061                    }
5062
5063                    modal.resolve(value);
5064                },
5065                overlay(dialog) {
5066                    dialog = this.$el.dataset.dialogRefName || dialog;
5067                    const name = typeof dialog === 'string' ? dialog : config.dialog;
5068                    return {
5069                        ['x-show']() {
5070                            return this.opened[name]
5071                        },
5072                        ['x-transition:enter']: config.transitionEnter,
5073                        ['x-transition:enter-start']: config.transitionEnterStart,
5074                        ['x-transition:enter-end']: config.transitionEnterEnd,
5075                        ['x-transition:leave']: config.transitionLeave,
5076                        ['x-transition:leave-start']: config.transitionLeaveStart,
5077                        ['x-transition:leave-end']: config.transitionLeaveEnd,
5078                        ['@hyva-modal-show.window'](event) {
5079                            event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide)
5080                        }
5081                    };
5082                },
5083                showDialogOnInit() {
5084                    const parent = this.$el.closest('[data-dialog-ref-name]');
5085                    if (parent && parent.dataset.dialogRefName) {
5086                        this.$dispatch('hyva-modal-show', {dialog: parent.dataset.dialogRefName})
5087                    }
5088                }
5089            };
5090        }
5091
5092        window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1]
5093
5094        window.hyva.modal.pop = function () {
5095            if (modals.length > 0) {
5096                const modal = modals[modals.length -1];
5097                modal.instance.hide();
5098            }
5099        }
5100
5101        window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) {
5102            typeof selectors === 'string' || selectors instanceof String
5103                ? excludedFromFocusTrapping.add(selectors)
5104                : selectors.map(selector => excludedFromFocusTrapping.add(selector));
5105        }
5106
5107        window.hyva.modal.eventListeners = {
5108            keydown: event => {
5109                if (event.key === 'Escape') {
5110                    window.hyva.modal.pop();
5111                }
5112            },
5113                        click: event => {
5114                if (modals.length > 0) {
5115                    const modal = modals[modals.length -1];
5116                    const dialog = modal.instance.$refs[modal.name];
5117                    if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago
5118                        ! isOverlayDisabled(dialog) && // if dialog has overlay
5119                        ! dialog.contains(event.target)) { // if click is outside of dialog
5120                        modal.instance.hide();
5121                    }
5122                }
5123            }
5124        };
5125
5126        document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown);
5127
5128        document.addEventListener('click', window.hyva.modal.eventListeners.click);
5129    })();
5130    window.addEventListener('alpine:init', () => {
5131        Alpine.data('hyvaModal', window.hyva.modal);
5132    }, {once: true});
5133</script>
5133
5134<div id="mobile-contact-block"><div class="contact-popup">
5135   <div class="contact-toolbar">
5136      <button id="contact-popup-close">
5137      </button>
5138      <span>Contact Us</span>
5139   </div>
5140   <iframe id="MobileContactPopup" src="" data-srcuri="https://contact.outdoornativitysets.com/?FormKey=ons&type=zdonly" title="OutdoorNativitySets Contact Form" width="100%" height="400px" frameborder="1"></iframe>
5141</div>
5142
5143<style>
5144   #mobile-contact-block {
5145      position: fixed;
5146      top: 30px !important;
5147      bottom: 30px !important;
5148      right: 30px !important;
5149      bottom: 30px !important;
5150      background-color: white;
5151      z-index: 999999;
5152      margin: 16px;
5153      border-radius: 10px;
5154      transition: all linear .3s;
5155   }
5156
5157   .contact-popup {
5158      border-radius: 10px;
5159      box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 6px 0px;
5160   }
5161
5162   .contact-toolbar {
5163      border-radius: 10px 10px 0 0;
5164      background-color: #a32c28;
5165      width: 100%;
5166      display: flex;
5167      justify-content: center;
5168      padding: .75rem 0;
5169      position: relative;
5170   }
5171
5172   .contact-toolbar span {
5173      color: white;
5174      font-weight: 700;
5175   }
5176
5177   #contact-popup-close {
5178      border-bottom: 0px solid white;
5179      min-width: 10px;
5180      min-height: 10px;
5181      position: absolute;
5182      right: 0;
5183      top: 0;
5184      border-radius: 0;
5185      padding: 0;
5186      height: 50%;
5187      margin-top: 2px;
5188      margin-right: 3rem;
5189   }
5190  #contact-popup-close::before { content: 'X'; color: #fff; }
5191
5192   #contact-popup-close:hover {
5193      background: #a32c28 !important;
5194   }
5195
5196   #launcher,
5197   #webWidget {
5198       display: none;
5199   }
5200
5201    @media (max-width: 768px) {
5202
5203         #mobile-contact-block {
5204         top: 0;
5205         left: 0;
5206         margin: 0;
5207         border-radius: 0;
5208      }
5209
5210      .contact-toolbar {
5211         border-radius: 0 0 0 0;
5212         padding: 1.5rem 0;
5213      }
5214   }
5215
5216</style></div>
5216<script>
5217    // Functionality directly ported from original uiComponent, with minor modifications to work with Alpine
5218    function initBraintreePayPalExpress(clientToken, currency)
5219    {
5220        return {
5221            clientToken: clientToken,
5222            currency: currency,
5223            cart: null,
5224            customer: null,
5225            isGuestCheckoutAllowed: null,
5226            init()
5227            {
5228                // don't do anything
5229            },
5230            custom_init()
5231            {
5232                
5233                // called by nextTick
5234                this.loadScript('https://js.braintreegateway.com/web/3.88.1/js/client.min.js', function() {
5235                    this.setupButton(this.$root);
5236                }.bind(this));
5237            },
5238            receiveCustomerData(event)
5239            {
5240                if(event.detail && event.detail.data){
5241                    this.cart = event.detail.data.cart;
5242                    if(this.cart){
5243                        this.isGuestCheckoutAllowed = this.cart.isGuestCheckoutAllowed;
5244                    }
5245                    this.customer = event.detail.data.customer;
5246                }
5247            },
5248            loadScript(url, callback)
5249            {
5250                const script = document.createElement('script');
5251                script.type = 'text/javascript';
5252                script.src = url;
5253                script.addEventListener('load', callback);
5254                document.head.appendChild(script);
5255            },
5256            buildForm(actionUrl, fields)
5257            {
5258                const form = document.createElement('form');
5259                form.action = actionUrl;
5260                form.method = 'POST';
5261                form.hidden = true;
5262                form.enctype = 'application/x-www-form-urlencoded';
5263
5264                Object.entries(fields).forEach(field => {
5265                    const [key, value] = field;
5266                    let fieldElement;
5267
5268                    fieldElement = document.createElement('input');
5269                    fieldElement.type = 'hidden';
5270                    fieldElement.name = key;
5271                    fieldElement.value = value;
5272                    form.appendChild(fieldElement);
5273                });
5274
5275                document.body.appendChild(form);
5276                form.submit();
5277            },
5278            payPalButton(element, paypalCheckoutInstance)
5279            {
5280                let self = this,
5281                    style = {
5282                        color: element.dataset.color,
5283                        shape: element.dataset.shape,
5284                        size: element.dataset.size,
5285                    };
5286
5287                if (element.dataset.fundingicons) {
5288                    style.fundingicons = element.dataset.fundingicons;
5289                }
5290
5291                // Render
5292                let paypalActions;
5293                let button = paypal.Buttons({
5294                    fundingSource: element.dataset.funding,
5295                    style: style,
5296
5297                    createOrder: function ()
5298                    {
5299                        return paypalCheckoutInstance.createPayment({
5300                            amount: element.dataset.amount,
5301                            locale: element.dataset.locale,
5302                            currency: element.dataset.currency,
5303                            flow: 'checkout',
5304                            enableShippingAddress: true,
5305                            displayName: element.dataset.displayname,
5306                        });
5307                    },
5308
5309                    validate: function(actions)
5310                    {
5311                        if (!self.customer.firstname && !self.isGuestCheckoutAllowed) {
5312                            actions.disable();
5313                        }
5314
5315                        paypalActions = actions;
5316                    },
5317
5318                    onCancel: function (data)
5319                    {
5320                        console.warn('paypalCheckout\u0020has\u0020been\u0020cancelled', data);
5321                    },
5322
5323                    onError: function (err)
5324                    {
5325                        console.error('paypalCheckout\u0020button\u0020render\u0020error', err);
5326                    },
5327
5328                    onClick: function(data)
5329                    {
5330                        if (!self.customer.firstname && !self.isGuestCheckoutAllowed) {
5331                            alert('To\u0020check\u0020out,\u0020please\u0020sign\u0020in\u0020with\u0020your\u0020email\u0020address.');
5332                        }
5333                    },
5334
5335                    onApprove: function (data1)
5336                    {
5337                        return paypalCheckoutInstance.tokenizePayment(data1, function(err, payload) {
5338                            // Map the shipping address correctly
5339                            var address = payload.details.shippingAddress,
5340                                recipientFirstName,
5341                                recipientLastName;
5342
5343                            if (typeof address.recipientName !== 'undefined') {
5344                                var recipientName = address.recipientName.split(" ");
5345
5346                                recipientFirstName = recipientName[0].replace(/'/g, "&apos;");
5347                                recipientLastName = recipientName[1].replace(/'/g, "&apos;");
5348                            } else {
5349                                recipientFirstName = payload.details.firstName.replace(/'/g, "&apos;");
5350                                recipientLastName = payload.details.lastName.replace(/'/g, "&apos;");
5351                            }
5352
5353                            payload.details.shippingAddress = {
5354                                streetAddress: typeof address.line2 !== 'undefined'
5355                                    ? address.line1.replace(/'/g, '&apos;') + ' ' + address.line2.replace(/'/g, '&apos;')
5356                                    : address.line1.replace(/'/g, '&apos;'),
5357                                locality: address.city.replace(/'/g, '&apos;'),
5358                                postalCode: address.postalCode,
5359                                countryCodeAlpha2: address.countryCode,
5360                                email: payload.details.email.replace(/'/g, '&apos;'),
5361                                recipientFirstName: recipientFirstName,
5362                                recipientLastName: recipientLastName,
5363                                telephone: typeof payload.details.phone !== 'undefined'
5364                                    ? payload.details.phone
5365                                    : '',
5366                                region: typeof address.state !== 'undefined'
5367                                    ? address.state.replace(/'/g, '&apos;')
5368                                    : '',
5369                            };
5370
5371                            if(element.dataset.location === 'productpage') {
5372                                var form = document.getElementById('product_addtocart_form');
5373
5374                                if (!form.checkValidity()) {
5375                                    return false;
5376                                }
5377
5378                                payload.additionalData = form.serialize();
5379                            }
5380
5381                            var actionSuccess = element.dataset.actionsuccess;
5382
5383                            self.buildForm(
5384                                actionSuccess,
5385                                {
5386                                    result: JSON.stringify(payload),
5387                                    form_key: hyva.getFormKey(),
5388                                }
5389                            );
5390                        });
5391                    }
5392                });
5393
5394                if (!button.isEligible()) {
5395                    element.parentNode.remove();
5396
5397                    return;
5398                }
5399
5400                // Clear element content prior to render to prevent duplicated buttons
5401                element.innerHTML = '';
5402                button.render(element);
5403            },
5404            renderpayPalMessages()
5405            {
5406                document.querySelectorAll('.action-braintree-paypal-message').forEach((container) => {
5407                    paypal.Messages({
5408                        amount: container.dataset['pp-amount'],
5409                        pageType: container.dataset['pp-type'],
5410                        style: {
5411                            layout: 'text',
5412                        },
5413                    }).render('#' + container.id);
5414                })
5415            },
5416            loadBraintreeSDK(token, currency, button)
5417            {
5418                let self = this;
5419
5420                if(!self.customer) {
5421                    const browserStorage = hyva.getBrowserStorage();
5422                    self.customer = {}; self.customer.firstname = browserStorage.getItem('paypal-customer-name');
5423                    self.isGuestCheckoutAllowed = browserStorage.getItem('paypal-guest-allowed');
5424                }
5425
5426                braintree.client.create({
5427                    authorization: token
5428                }, (clientErr, clientInstance) => {
5429                    if (clientErr) {
5430                        return console.error('paypalCheckout\u0020error', clientErr);
5431                    }
5432
5433                    self.loadScript('https://js.braintreegateway.com/web/3.88.1/js/data-collector.min.js', () => {
5434                        braintree.dataCollector.create({
5435                            client: clientInstance,
5436                            paypal: true
5437                        }, (err, dataCollectorinstance) => {
5438                            if (err) {
5439                                return console.error(err);
5440                            }
5441                        });
5442                    });
5443
5444                    self.loadScript('https://js.braintreegateway.com/web/3.88.1/js/paypal-checkout.min.js', () => {
5445                        braintree.paypalCheckout.create({
5446                            client: clientInstance
5447                        }, (err, paypalCheckoutInstance) => {
5448                            if (typeof paypal !== 'undefined' ) {
5449                                self.payPalButton(button, paypalCheckoutInstance);
5450                                self.renderpayPalMessages();
5451                            } else {
5452                                paypalCheckoutInstance.loadPayPalSDK({
5453                                    components: 'buttons,messages,funding-eligibility',
5454                                    currency: currency,
5455                                }, () => {
5456                                    self.payPalButton(button, paypalCheckoutInstance);
5457                                    self.renderpayPalMessages();
5458                                });
5459                            }
5460                        });
5461                    });
5462                });
5463            },
5464            setupButton(button)
5465            {
5466                this.loadBraintreeSDK(this.clientToken, this.currency, button);
5467            },
5468        }
5469    }
5470</script>
5470
5471
5472<script>
5473    function receiveCustomerSpecificPaypalData(event) {
5474        let browserStorage = hyva.getBrowserStorage();
5475        if(event.detail && event.detail.data){
5476            if(event.detail.data.cart){
5477                browserStorage.setItem('paypal-guest-allowed', event.detail.data.cart.isGuestCheckoutAllowed);
5478            }
5479            if(event.detail.data.customer) {
5480                browserStorage.setItem('paypal-customer-name', event.detail.data.customer.firstname);
5481            }
5482        }
5483    }
5484
5485    window.addEventListener('private-content-loaded', receiveCustomerSpecificPaypalData);
5486
5487</script>
vendor: 1 bytes, line 5487
5487
5488<script type="text/json" id="default-section-data">
5489    {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"requisition":[],"cart":[],"directory-data":{"AD":{"name":"Andorra"},"AE":{"name":"United Arab Emirates"},"AF":{"name":"Afghanistan"},"AG":{"name":"Antigua & Barbuda"},"AI":{"name":"Anguilla"},"AL":{"name":"Albania","regions":{"715":{"code":"AL-01","name":"Berat"},"718":{"code":"AL-09","name":"Dib\u00ebr"},"721":{"code":"AL-02","name":"Durr\u00ebs"},"724":{"code":"AL-03","name":"Elbasan"},"727":{"code":"AL-04","name":"Fier"},"730":{"code":"AL-05","name":"Gjirokast\u00ebr"},"733":{"code":"AL-06","name":"Kor\u00e7\u00eb"},"736":{"code":"AL-07","name":"Kuk\u00ebs"},"739":{"code":"AL-08","name":"Lezh\u00eb"},"742":{"code":"AL-10","name":"Shkod\u00ebr"},"745":{"code":"AL-11","name":"Tiran\u00eb"},"748":{"code":"AL-12","name":"Vlor\u00eb"}}},"AM":{"name":"Armenia"},"AO":{"name":"Angola"},"AQ":{"name":"Antarctica"},"AR":{"name":"Argentina","regions":{"754":{"code":"AR-B","name":"Buenos Aires"},"757":{"code":"AR-K","name":"Catamarca"},"760":{"code":"AR-H","name":"Chaco"},"763":{"code":"AR-U","name":"Chubut"},"751":{"code":"AR-C","name":"Ciudad Aut\u00f3noma de Buenos Aires"},"766":{"code":"AR-X","name":"C\u00f3rdoba"},"769":{"code":"AR-W","name":"Corrientes"},"772":{"code":"AR-E","name":"Entre R\u00edos"},"775":{"code":"AR-P","name":"Formosa"},"778":{"code":"AR-Y","name":"Jujuy"},"781":{"code":"AR-L","name":"La Pampa"},"784":{"code":"AR-F","name":"La Rioja"},"787":{"code":"AR-M","name":"Mendoza"},"790":{"code":"AR-N","name":"Misiones"},"793":{"code":"AR-Q","name":"Neuqu\u00e9n"},"796":{"code":"AR-R","name":"R\u00edo Negro"},"799":{"code":"AR-A","name":"Salta"},"802":{"code":"AR-J","name":"San Juan"},"805":{"code":"AR-D","name":"San Luis"},"808":{"code":"AR-Z","name":"Santa Cruz"},"811":{"code":"AR-S","name":"Santa Fe"},"814":{"code":"AR-G","name":"Santiago del Estero"},"817":{"code":"AR-V","name":"Tierra del Fuego"},"820":{"code":"AR-T","name":"Tucum\u00e1n"}}},"AS":{"name":"American Samoa"},"AT":{"name":"Austria","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Vorarlberg"},"95":{"code":"WI","name":"Wien"}}},"AU":{"name":"Australia","regions":{"692":{"code":"ACT","name":"Australian Capital Territory"},"695":{"code":"NSW","name":"New South Wales"},"713":{"code":"NT","name":"Northern Territory"},"701":{"code":"QLD","name":"Queensland"},"704":{"code":"SA","name":"South Australia"},"707":{"code":"TAS","name":"Tasmania"},"698":{"code":"VIC","name":"Victoria"},"710":{"code":"WA","name":"Western Australia"}}},"AW":{"name":"Aruba"},"AX":{"name":"\u00c5land Islands"},"AZ":{"name":"Azerbaijan"},"BA":{"name":"Bosnia & Herzegovina"},"BB":{"name":"Barbados"},"BD":{"name":"Bangladesh"},"BE":{"name":"Belgium","regions":{"844":{"code":"VAN","name":"Antwerpen"},"847":{"code":"WBR","name":"Brabant wallon"},"850":{"code":"BRU","name":"Brussels-Capital Region"},"853":{"code":"WHT","name":"Hainaut"},"859":{"code":"WLG","name":"Li\u00e8ge"},"856":{"code":"VLI","name":"Limburg"},"862":{"code":"WLX","name":"Luxembourg"},"865":{"code":"WNA","name":"Namur"},"868":{"code":"VOV","name":"Oost-Vlaanderen"},"871":{"code":"VBR","name":"Vlaams-Brabant"},"874":{"code":"VWV","name":"West-Vlaanderen"}}},"BF":{"name":"Burkina Faso"},"BG":{"name":"Bulgaria","regions":{"904":{"code":"BG-01","name":"Blagoevgrad"},"907":{"code":"BG-02","name":"Burgas"},"925":{"code":"BG-08","name":"Dobrich"},"922":{"code":"BG-07","name":"Gabrovo"},"979":{"code":"BG-26","name":"Haskovo"},"928":{"code":"BG-09","name":"Kardzhali"},"931":{"code":"BG-10","name":"Kyustendil"},"934":{"code":"BG-11","name":"Lovech"},"937":{"code":"BG-12","name":"Montana"},"940":{"code":"BG-13","name":"Pazardzhik"},"943":{"code":"BG-14","name":"Pernik"},"946":{"code":"BG-15","name":"Pleven"},"949":{"code":"BG-16","name":"Plovdiv"},"952":{"code":"BG-17","name":"Razgrad"},"955":{"code":"BG-18","name":"Ruse"},"982":{"code":"BG-27","name":"Shumen"},"958":{"code":"BG-19","name":"Silistra"},"961":{"code":"BG-20","name":"Sliven"},"964":{"code":"BG-21","name":"Smolyan"},"967":{"code":"BG-22","name":"Sofia City"},"970":{"code":"BG-23","name":"Sofia Province"},"973":{"code":"BG-24","name":"Stara Zagora"},"976":{"code":"BG-25","name":"Targovishte"},"910":{"code":"BG-03","name":"Varna"},"913":{"code":"BG-04","name":"Veliko Tarnovo"},"916":{"code":"BG-05","name":"Vidin"},"919":{"code":"BG-06","name":"Vratsa"},"985":{"code":"BG-28","name":"Yambol"}}},"BH":{"name":"Bahrain"},"BI":{"name":"Burundi"},"BJ":{"name":"Benin"},"BL":{"name":"St. Barth\u00e9lemy"},"BM":{"name":"Bermuda"},"BN":{"name":"Brunei"}
5489,"BO":{"name":"Bolivia","regions":{"880":{"code":"BO-H","name":"Chuquisaca"},"877":{"code":"BO-C","name":"Cochabamba"},"883":{"code":"BO-B","name":"El Beni"},"886":{"code":"BO-L","name":"La Paz"},"889":{"code":"BO-O","name":"Oruro"},"892":{"code":"BO-N","name":"Pando"},"895":{"code":"BO-P","name":"Potos\u00ed"},"898":{"code":"BO-S","name":"Santa Cruz"},"901":{"code":"BO-T","name":"Tarija"}}},"BR":{"name":"Brazil","regions":{"485":{"code":"AC","name":"Acre"},"486":{"code":"AL","name":"Alagoas"},"487":{"code":"AP","name":"Amap\u00e1"},"488":{"code":"AM","name":"Amazonas"},"489":{"code":"BA","name":"Bahia"},"490":{"code":"CE","name":"Cear\u00e1"},"511":{"code":"DF","name":"Distrito Federal"},"491":{"code":"ES","name":"Esp\u00edrito Santo"},"492":{"code":"GO","name":"Goi\u00e1s"},"493":{"code":"MA","name":"Maranh\u00e3o"},"494":{"code":"MT","name":"Mato Grosso"},"495":{"code":"MS","name":"Mato Grosso do Sul"},"496":{"code":"MG","name":"Minas Gerais"},"497":{"code":"PA","name":"Par\u00e1"},"498":{"code":"PB","name":"Para\u00edba"},"499":{"code":"PR","name":"Paran\u00e1"},"500":{"code":"PE","name":"Pernambuco"},"501":{"code":"PI","name":"Piau\u00ed"},"502":{"code":"RJ","name":"Rio de Janeiro"},"503":{"code":"RN","name":"Rio Grande do Norte"},"504":{"code":"RS","name":"Rio Grande do Sul"},"505":{"code":"RO","name":"Rond\u00f4nia"},"506":{"code":"RR","name":"Roraima"},"507":{"code":"SC","name":"Santa Catarina"},"508":{"code":"SP","name":"S\u00e3o Paulo"},"509":{"code":"SE","name":"Sergipe"},"510":{"code":"TO","name":"Tocantins"}}},"BS":{"name":"Bahamas"},"BT":{"name":"Bhutan"},"BV":{"name":"Bouvet Island"},"BW":{"name":"Botswana"},"BY":{"name":"Belarus","regions":{"823":{"code":"BY-BR","name":"Bresckaja voblas\u0107"},"826":{"code":"BY-HO","name":"Homie\u013askaja voblas\u0107"},"829":{"code":"BY-HM","name":"Horad Minsk"},"832":{"code":"BY-HR","name":"Hrodzienskaja voblas\u0107"},"835":{"code":"BY-MA","name":"Mahilio\u016dskaja voblas\u0107"},"838":{"code":"BY-MI","name":"Minskaja voblas\u0107"},"841":{"code":"BY-VI","name":"Viciebskaja voblas\u0107"}}},"BZ":{"name":"Belize"},"CA":{"name":"Canada","regions":{"66":{"code":"AB","name":"Alberta"},"67":{"code":"BC","name":"British Columbia"},"68":{"code":"MB","name":"Manitoba"},"70":{"code":"NB","name":"New Brunswick"},"69":{"code":"NL","name":"Newfoundland and Labrador"},"72":{"code":"NT","name":"Northwest Territories"},"71":{"code":"NS","name":"Nova Scotia"},"73":{"code":"NU","name":"Nunavut"},"74":{"code":"ON","name":"Ontario"},"75":{"code":"PE","name":"Prince Edward Island"},"76":{"code":"QC","name":"Quebec"},"77":{"code":"SK","name":"Saskatchewan"},"78":{"code":"YT","name":"Yukon Territory"}}},"CC":{"name":"Cocos (Keeling) Islands"},"CD":{"name":"Congo - Kinshasa"},"CF":{"name":"Central African Republic"},"CG":{"name":"Congo - Brazzaville"},"CH":{"name":"Switzerland","regions":{"104":{"code":"AG","name":"Aargau"},"106":{"code":"AR","name":"Appenzell Ausserrhoden"},"105":{"code":"AI","name":"Appenzell Innerrhoden"},"108":{"code":"BL","name":"Basel-Landschaft"},"109":{"code":"BS","name":"Basel-Stadt"},"107":{"code":"BE","name":"Bern"},"110":{"code":"FR","name":"Friburg"},"111":{"code":"GE","name":"Geneva"},"112":{"code":"GL","name":"Glarus"},"113":{"code":"GR","name":"Graub\u00fcnden"},"114":{"code":"JU","name":"Jura"},"115":{"code":"LU","name":"Lucerne"},"116":{"code":"NE","name":"Neuch\u00e2tel"},"117":{"code":"NW","name":"Nidwalden"},"118":{"code":"OW","name":"Obwalden"},"120":{"code":"SH","name":"Schaffhausen"},"122":{"code":"SZ","name":"Schwyz"},"121":{"code":"SO","name":"Solothurn"},"119":{"code":"SG","name":"St. Gallen"},"123":{"code":"TG","name":"Thurgau"},"124":{"code":"TI","name":"Ticino"},"125":{"code":"UR","name":"Uri"},"126":{"code":"VD","name":"Vaud"},"127":{"code":"VS","name":"Wallis"},"128":{"code":"ZG","name":"Zug"},"129":{"code":"ZH","name":"Z\u00fcrich"}}},"CI":{"name":"C\u00f4te d\u2019Ivoire"},"CK":{"name":"Cook Islands"},"CL":{"name":"Chile","regions":{"988":{"code":"CL-AI","name":"Ais\u00e9n del General Carlos Iba\u00f1ez del Campo"},"991":{"code":"CL-AN","name":"Antofagasta"},"994":{"code":"CL-AP","name":"Arica y Parinacota"},"1000":{"code":"CL-AT","name":"Atacama"},"1003":{"code":"CL-BI","name":"Biob\u00edo"},"1006":{"code":"CL-CO","name":"Coquimbo"},"997":{"code":"CL-AR","name":"La Araucan\u00eda"},"1009":{"code":"CL-LI","name":"Libertador General Bernardo O'Higgins"}
5489,"1012":{"code":"CL-LL","name":"Los Lagos"},"1015":{"code":"CL-LR","name":"Los R\u00edos"},"1018":{"code":"CL-MA","name":"Magallanes"},"1021":{"code":"CL-ML","name":"Maule"},"1024":{"code":"CL-NB","name":"\u00d1uble"},"1027":{"code":"CL-RM","name":"Regi\u00f3n Metropolitana de Santiago"},"1030":{"code":"CL-TA","name":"Tarapac\u00e1"},"1033":{"code":"CL-VS","name":"Valpara\u00edso"}}},"CM":{"name":"Cameroon"},"CN":{"name":"China","regions":{"1036":{"code":"CN-AH","name":"Anhui Sheng"},"1039":{"code":"CN-BJ","name":"Beijing Shi"},"1042":{"code":"CN-CQ","name":"Chongqing Shi"},"1045":{"code":"CN-FJ","name":"Fujian Sheng"},"1048":{"code":"CN-GS","name":"Gansu Sheng"},"1051":{"code":"CN-GD","name":"Guangdong Sheng"},"1054":{"code":"CN-GX","name":"Guangxi Zhuangzu Zizhiqu"},"1057":{"code":"CN-GZ","name":"Guizhou Sheng"},"1060":{"code":"CN-HI","name":"Hainan Sheng"},"1063":{"code":"CN-HE","name":"Hebei Sheng"},"1066":{"code":"CN-HL","name":"Heilongjiang Sheng"},"1069":{"code":"CN-HA","name":"Henan Sheng"},"1072":{"code":"CN-HK","name":"Hong Kong SAR"},"1075":{"code":"CN-HB","name":"Hubei Sheng"},"1078":{"code":"CN-HN","name":"Hunan Sheng"},"1081":{"code":"CN-JS","name":"Jiangsu Sheng"},"1084":{"code":"CN-JX","name":"Jiangxi Sheng"},"1087":{"code":"CN-JL","name":"Jilin Sheng"},"1090":{"code":"CN-LN","name":"Liaoning Sheng"},"1093":{"code":"CN-MO","name":"Macao SAR"},"1096":{"code":"CN-NM","name":"Nei Mongol Zizhiqu"},"1099":{"code":"CN-NX","name":"Ningxia Huizi Zizhiqu"},"1102":{"code":"CN-QH","name":"Qinghai Sheng"},"1105":{"code":"CN-SN","name":"Shaanxi Sheng"},"1108":{"code":"CN-SD","name":"Shandong Sheng"},"1111":{"code":"CN-SH","name":"Shanghai Shi"},"1114":{"code":"CN-SX","name":"Shanxi Sheng"},"1117":{"code":"CN-SC","name":"Sichuan Sheng"},"1120":{"code":"CN-TW","name":"Taiwan Sheng"},"1123":{"code":"CN-TJ","name":"Tianjin Shi"},"1126":{"code":"CN-XJ","name":"Xinjiang Uygur Zizhiqu"},"1129":{"code":"CN-XZ","name":"Xizang Zizhiqu"},"1132":{"code":"CN-YN","name":"Yunnan Sheng"},"1135":{"code":"CN-ZJ","name":"Zhejiang Sheng"}}},"CO":{"name":"Colombia","regions":{"1138":{"code":"CO-AMA","name":"Amazonas"},"1141":{"code":"CO-ANT","name":"Antioquia"},"1144":{"code":"CO-ARA","name":"Arauca"},"1147":{"code":"CO-ATL","name":"Atl\u00e1ntico"},"1150":{"code":"CO-BOL","name":"Bol\u00edvar"},"1153":{"code":"CO-BOY","name":"Boyac\u00e1"},"1156":{"code":"CO-CAL","name":"Caldas"},"1159":{"code":"CO-CAQ","name":"Caquet\u00e1"},"1162":{"code":"CO-CAS","name":"Casanare"},"1165":{"code":"CO-CAU","name":"Cauca"},"1168":{"code":"CO-CES","name":"Cesar"},"1171":{"code":"CO-CHO","name":"Choc\u00f3"},"1174":{"code":"CO-COR","name":"C\u00f3rdoba"},"1177":{"code":"CO-CUN","name":"Cundinamarca"},"1180":{"code":"CO-GUA","name":"Guain\u00eda"},"1183":{"code":"CO-GUV","name":"Guaviare"},"1186":{"code":"CO-HUL","name":"Huila"},"1189":{"code":"CO-LAG","name":"La Guajira"},"1192":{"code":"CO-MAG","name":"Magdalena"},"1195":{"code":"CO-MET","name":"Meta"},"1198":{"code":"CO-NAR","name":"Nari\u00f1o"},"1201":{"code":"CO-NSA","name":"Norte de Santander"},"1204":{"code":"CO-PUT","name":"Putumayo"},"1207":{"code":"CO-QUI","name":"Quind\u00edo"},"1210":{"code":"CO-RIS","name":"Risaralda"},"1213":{"code":"CO-SAP","name":"San Andr\u00e9s y Providencia"},"1216":{"code":"CO-SAN","name":"Santander"},"1219":{"code":"CO-SUC","name":"Sucre"},"1222":{"code":"CO-TOL","name":"Tolima"},"1225":{"code":"CO-VAC","name":"Valle del Cauca"},"1228":{"code":"CO-VAU","name":"Vaup\u00e9s"},"1231":{"code":"CO-VID","name":"Vichada"}}},"CR":{"name":"Costa Rica"},"CU":{"name":"Cuba"},"CV":{"name":"Cape Verde"},"CX":{"name":"Christmas Island"},"CY":{"name":"Cyprus"},"CZ":{"name":"Czechia"},"DE":{"name":"Germany","regions":{"80":{"code":"BAW","name":"Baden-W\u00fcrttemberg"},"81":{"code":"BAY","name":"Bayern"},"82":{"code":"BER","name":"Berlin"},"83":{"code":"BRG","name":"Brandenburg"},"84":{"code":"BRE","name":"Bremen"},"85":{"code":"HAM","name":"Hamburg"},"86":{"code":"HES","name":"Hessen"},"87":{"code":"MEC","name":"Mecklenburg-Vorpommern"},"79":{"code":"NDS","name":"Niedersachsen"},"88":{"code":"NRW","name":"Nordrhein-Westfalen"},"89":{"code":"RHE","name":"Rheinland-Pfalz"},"90":{"code":"SAR","name":"Saarland"},"91":{"code":"SAS","name":"Sachsen"},"92":{"code":"SAC","name":"Sachsen-Anhalt"},"93":{"code":"SCN","name":"Schleswig-Holstein"},"94":{"code":"THE","name":"Th\u00fcringen"}}},"DJ":{"name":"Djibouti"},"DK":{"name":"Denmark","regions":{"1234":{"code":"DK-84","name":"Hovedstaden"},"1237":{"code":"DK-82","name":"Midtjylland"},"1240":{"code":"DK-81","name":"Nordjylland"},"1243":{"code":"DK-85","name":"Sj\u00e6lland"},"1246":{"code":"DK-83","name":"Syddanmark"}}},"DM":{"name":"Dominica"}
5489,"DO":{"name":"Dominican Republic"},"DZ":{"name":"Algeria"},"EC":{"name":"Ecuador","regions":{"1249":{"code":"EC-A","name":"Azuay"},"1252":{"code":"EC-B","name":"Bol\u00edvar"},"1255":{"code":"EC-F","name":"Ca\u00f1ar"},"1258":{"code":"EC-C","name":"Carchi"},"1261":{"code":"EC-H","name":"Chimborazo"},"1264":{"code":"EC-X","name":"Cotopaxi"},"1267":{"code":"EC-O","name":"El Oro"},"1270":{"code":"EC-E","name":"Esmeraldas"},"1273":{"code":"EC-W","name":"Gal\u00e1pagos"},"1276":{"code":"EC-G","name":"Guayas"},"1279":{"code":"EC-I","name":"Imbabura"},"1282":{"code":"EC-L","name":"Loja"},"1285":{"code":"EC-R","name":"Los R\u00edos"},"1288":{"code":"EC-M","name":"Manab\u00ed"},"1291":{"code":"EC-S","name":"Morona Santiago"},"1294":{"code":"EC-N","name":"Napo"},"1297":{"code":"EC-D","name":"Orellana"},"1300":{"code":"EC-Y","name":"Pastaza"},"1303":{"code":"EC-P","name":"Pichincha"},"1306":{"code":"EC-SE","name":"Santa Elena"},"1309":{"code":"EC-SD","name":"Santo Domingo de los Ts\u00e1chilas"},"1312":{"code":"EC-U","name":"Sucumb\u00edos"},"1315":{"code":"EC-T","name":"Tungurahua"},"1318":{"code":"EC-Z","name":"Zamora Chinchipe"}}},"EE":{"name":"Estonia","regions":{"340":{"code":"EE-37","name":"Harjumaa"},"341":{"code":"EE-39","name":"Hiiumaa"},"342":{"code":"EE-44","name":"Ida-Virumaa"},"344":{"code":"EE-51","name":"J\u00e4rvamaa"},"343":{"code":"EE-49","name":"J\u00f5gevamaa"},"346":{"code":"EE-59","name":"L\u00e4\u00e4ne-Virumaa"},"345":{"code":"EE-57","name":"L\u00e4\u00e4nemaa"},"348":{"code":"EE-67","name":"P\u00e4rnumaa"},"347":{"code":"EE-65","name":"P\u00f5lvamaa"},"349":{"code":"EE-70","name":"Raplamaa"},"350":{"code":"EE-74","name":"Saaremaa"},"351":{"code":"EE-78","name":"Tartumaa"},"352":{"code":"EE-82","name":"Valgamaa"},"353":{"code":"EE-84","name":"Viljandimaa"},"354":{"code":"EE-86","name":"V\u00f5rumaa"}}},"EG":{"name":"Egypt"},"EH":{"name":"Western Sahara"},"ER":{"name":"Eritrea"},"ES":{"name":"Spain","regions":{"130":{"code":"A Coru\u0441a","name":"A Coru\u00f1a"},"131":{"code":"Alava","name":"Alava"},"132":{"code":"Albacete","name":"Albacete"},"133":{"code":"Alicante","name":"Alicante"},"134":{"code":"Almeria","name":"Almeria"},"135":{"code":"Asturias","name":"Asturias"},"136":{"code":"Avila","name":"Avila"},"137":{"code":"Badajoz","name":"Badajoz"},"138":{"code":"Baleares","name":"Baleares"},"139":{"code":"Barcelona","name":"Barcelona"},"140":{"code":"Burgos","name":"Burgos"},"141":{"code":"Caceres","name":"Caceres"},"142":{"code":"Cadiz","name":"Cadiz"},"143":{"code":"Cantabria","name":"Cantabria"},"144":{"code":"Castellon","name":"Castellon"},"145":{"code":"Ceuta","name":"Ceuta"},"146":{"code":"Ciudad Real","name":"Ciudad Real"},"147":{"code":"Cordoba","name":"Cordoba"},"148":{"code":"Cuenca","name":"Cuenca"},"149":{"code":"Girona","name":"Girona"},"150":{"code":"Granada","name":"Granada"},"151":{"code":"Guadalajara","name":"Guadalajara"},"152":{"code":"Guipuzcoa","name":"Guipuzcoa"},"153":{"code":"Huelva","name":"Huelva"},"154":{"code":"Huesca","name":"Huesca"},"155":{"code":"Jaen","name":"Jaen"},"156":{"code":"La Rioja","name":"La Rioja"},"157":{"code":"Las Palmas","name":"Las Palmas"},"158":{"code":"Leon","name":"Leon"},"159":{"code":"Lleida","name":"Lleida"},"160":{"code":"Lugo","name":"Lugo"},"161":{"code":"Madrid","name":"Madrid"},"162":{"code":"Malaga","name":"Malaga"},"163":{"code":"Melilla","name":"Melilla"},"164":{"code":"Murcia","name":"Murcia"},"165":{"code":"Navarra","name":"Navarra"},"166":{"code":"Ourense","name":"Ourense"},"167":{"code":"Palencia","name":"Palencia"},"168":{"code":"Pontevedra","name":"Pontevedra"},"169":{"code":"Salamanca","name":"Salamanca"},"170":{"code":"Santa Cruz de Tenerife","name":"Santa Cruz de Tenerife"},"171":{"code":"Segovia","name":"Segovia"},"172":{"code":"Sevilla","name":"Sevilla"},"173":{"code":"Soria","name":"Soria"},"174":{"code":"Tarragona","name":"Tarragona"},"175":{"code":"Teruel","name":"Teruel"},"176":{"code":"Toledo","name":"Toledo"},"177":{"code":"Valencia","name":"Valencia"},"178":{"code":"Valladolid","name":"Valladolid"},"179":{"code":"Vizcaya","name":"Vizcaya"},"180":{"code":"Zamora","name":"Zamora"},"181":{"code":"Zaragoza","name":"Zaragoza"}}},"ET":{"name":"Ethiopia"},"FI":{"name":"Finland","regions":{"339":{"code":"Ahvenanmaa","name":"Ahvenanmaa"},"333":{"code":"Etel\u00e4-Karjala","name":"Etel\u00e4-Karjala"},"326":{"code":"Etel\u00e4-Pohjanmaa","name":"Etel\u00e4-Pohjanmaa"},"325":{"code":"Etel\u00e4-Savo","name":"Etel\u00e4-Savo"},"337":{"code":"It\u00e4-Uusimaa","name":"It\u00e4-Uusimaa"},"322":{"code":"Kainuu","name":"Kainuu"},"335":{"code":"Kanta-H\u00e4me","name":"Kanta-H\u00e4me"},"330":{"code":"Keski-Pohjanmaa","name":"Keski-Pohjanmaa"},"331":{"code":"Keski-Suomi","name":"Keski-Suomi"},"338":{"code":"Kymenlaakso","name":"Kymenlaakso"},"320":{"code":"Lappi","name":"Lappi"},"334":{"code":"P\u00e4ij\u00e4t-H\u00e4me","name":"P\u00e4ij\u00e4t-H\u00e4me"},"328":{"code":"Pirkanmaa","name":"Pirkanmaa"},"327":{"code":"Pohjanmaa","name":"Pohjanmaa"},"323":{"code":"Pohjois-Karjala","name":"Pohjois-Karjala"},"321":{"code":"Pohjois-Pohjanmaa","name":"Pohjois-Pohjanmaa"},"324":{"code":"Pohjois-Savo","name":"Pohjois-Savo"},"329":{"code":"Satakunta","name":"Satakunta"},"336":{"code":"Uusimaa","name":"Uusimaa"},"332":{"code":"Varsinais-Suomi","name":"Varsinais-Suomi"}}},"FJ":{"name":"Fiji"},"FK":{"name":"Falkland Islands"},"FM":{"name":"Micronesia"},"FO":{"name":"Faroe Islands"},"FR":{"name":"France","regions":{"182":{"code":"1","name":"Ain"},"183":{"code":"2","name":"Aisne"},"184":{"code":"3","name":"Allier"}
5489,"185":{"code":"4","name":"Alpes-de-Haute-Provence"},"187":{"code":"6","name":"Alpes-Maritimes"},"188":{"code":"7","name":"Ard\u00e8che"},"189":{"code":"8","name":"Ardennes"},"190":{"code":"9","name":"Ari\u00e8ge"},"191":{"code":"10","name":"Aube"},"192":{"code":"11","name":"Aude"},"193":{"code":"12","name":"Aveyron"},"249":{"code":"67","name":"Bas-Rhin"},"194":{"code":"13","name":"Bouches-du-Rh\u00f4ne"},"195":{"code":"14","name":"Calvados"},"196":{"code":"15","name":"Cantal"},"197":{"code":"16","name":"Charente"},"198":{"code":"17","name":"Charente-Maritime"},"199":{"code":"18","name":"Cher"},"200":{"code":"19","name":"Corr\u00e8ze"},"201":{"code":"2A","name":"Corse-du-Sud"},"203":{"code":"21","name":"C\u00f4te-d'Or"},"204":{"code":"22","name":"C\u00f4tes-d'Armor"},"205":{"code":"23","name":"Creuse"},"261":{"code":"79","name":"Deux-S\u00e8vres"},"206":{"code":"24","name":"Dordogne"},"207":{"code":"25","name":"Doubs"},"208":{"code":"26","name":"Dr\u00f4me"},"273":{"code":"91","name":"Essonne"},"209":{"code":"27","name":"Eure"},"210":{"code":"28","name":"Eure-et-Loir"},"211":{"code":"29","name":"Finist\u00e8re"},"212":{"code":"30","name":"Gard"},"214":{"code":"32","name":"Gers"},"215":{"code":"33","name":"Gironde"},"250":{"code":"68","name":"Haut-Rhin"},"202":{"code":"2B","name":"Haute-Corse"},"213":{"code":"31","name":"Haute-Garonne"},"225":{"code":"43","name":"Haute-Loire"},"234":{"code":"52","name":"Haute-Marne"},"252":{"code":"70","name":"Haute-Sa\u00f4ne"},"256":{"code":"74","name":"Haute-Savoie"},"269":{"code":"87","name":"Haute-Vienne"},"186":{"code":"5","name":"Hautes-Alpes"},"247":{"code":"65","name":"Hautes-Pyr\u00e9n\u00e9es"},"274":{"code":"92","name":"Hauts-de-Seine"},"216":{"code":"34","name":"H\u00e9rault"},"217":{"code":"35","name":"Ille-et-Vilaine"},"218":{"code":"36","name":"Indre"},"219":{"code":"37","name":"Indre-et-Loire"},"220":{"code":"38","name":"Is\u00e8re"},"221":{"code":"39","name":"Jura"},"222":{"code":"40","name":"Landes"},"223":{"code":"41","name":"Loir-et-Cher"},"224":{"code":"42","name":"Loire"},"226":{"code":"44","name":"Loire-Atlantique"},"227":{"code":"45","name":"Loiret"},"228":{"code":"46","name":"Lot"},"229":{"code":"47","name":"Lot-et-Garonne"},"230":{"code":"48","name":"Loz\u00e8re"},"231":{"code":"49","name":"Maine-et-Loire"},"232":{"code":"50","name":"Manche"},"233":{"code":"51","name":"Marne"},"235":{"code":"53","name":"Mayenne"},"236":{"code":"54","name":"Meurthe-et-Moselle"},"237":{"code":"55","name":"Meuse"},"238":{"code":"56","name":"Morbihan"},"239":{"code":"57","name":"Moselle"},"240":{"code":"58","name":"Ni\u00e8vre"},"241":{"code":"59","name":"Nord"},"242":{"code":"60","name":"Oise"},"243":{"code":"61","name":"Orne"},"257":{"code":"75","name":"Paris"},"244":{"code":"62","name":"Pas-de-Calais"},"245":{"code":"63","name":"Puy-de-D\u00f4me"},"246":{"code":"64","name":"Pyr\u00e9n\u00e9es-Atlantiques"},"248":{"code":"66","name":"Pyr\u00e9n\u00e9es-Orientales"},"251":{"code":"69","name":"Rh\u00f4ne"},"253":{"code":"71","name":"Sa\u00f4ne-et-Loire"},"254":{"code":"72","name":"Sarthe"},"255":{"code":"73","name":"Savoie"},"259":{"code":"77","name":"Seine-et-Marne"},"258":{"code":"76","name":"Seine-Maritime"},"275":{"code":"93","name":"Seine-Saint-Denis"},"262":{"code":"80","name":"Somme"},"263":{"code":"81","name":"Tarn"},"264":{"code":"82","name":"Tarn-et-Garonne"},"272":{"code":"90","name":"Territoire-de-Belfort"},"277":{"code":"95","name":"Val-d'Oise"},"276":{"code":"94","name":"Val-de-Marne"},"265":{"code":"83","name":"Var"},"266":{"code":"84","name":"Vaucluse"},"267":{"code":"85","name":"Vend\u00e9e"},"268":{"code":"86","name":"Vienne"},"270":{"code":"88","name":"Vosges"},"271":{"code":"89","name":"Yonne"},"260":{"code":"78","name":"Yvelines"}}},"GA":{"name":"Gabon"},"GB":{"name":"United Kingdom"},"GD":{"name":"Grenada"},"GE":{"name":"Georgia"},"GF":{"name":"French Guiana"},"GG":{"name":"Guernsey"},"GH":{"name":"Ghana"},"GI":{"name":"Gibraltar"},"GL":{"name":"Greenland"},"GM":{"name":"Gambia"},"GN":{"name":"Guinea"},"GP":{"name":"Guadeloupe"},"GQ":{"name":"Equatorial Guinea"},"GR":{"name":"Greece","regions":{"1360":{"code":"GR-69","name":"\u00c1gion \u00d3ros"},"1321":{"code":"GR-A","name":"Anatolik\u00ed Makedon\u00eda kai Thr\u00e1ki"},"1324":{"code":"GR-I","name":"Attik\u00ed"},"1327":{"code":"GR-G","name":"Dytik\u00ed Ell\u00e1da"},"1330":{"code":"GR-C","name":"Dytik\u00ed Makedon\u00eda"},"1333":{"code":"GR-F","name":"Ion\u00eda N\u00edsia"},"1336":{"code":"GR-D","name":"\u00cdpeiros"},"1339":{"code":"GR-B","name":"Kentrik\u00ed Makedon\u00eda"},"1342":{"code":"GR-M","name":"Kr\u00edti"},"1345":{"code":"GR-L","name":"N\u00f3tio Aiga\u00edo"},"1348":{"code":"GR-J","name":"Pelop\u00f3nnisos"},"1351":{"code":"GR-H","name":"Stere\u00e1 Ell\u00e1da"}
5489,"1354":{"code":"GR-E","name":"Thessal\u00eda"},"1357":{"code":"GR-K","name":"V\u00f3reio Aiga\u00edo"}}},"GS":{"name":"South Georgia & South Sandwich Islands"},"GT":{"name":"Guatemala"},"GU":{"name":"Guam"},"GW":{"name":"Guinea-Bissau"},"GY":{"name":"Guyana","regions":{"1363":{"code":"GY-BA","name":"Barima-Waini"},"1366":{"code":"GY-CU","name":"Cuyuni-Mazaruni"},"1369":{"code":"GY-DE","name":"Demerara-Mahaica"},"1372":{"code":"GY-EB","name":"East Berbice-Corentyne"},"1375":{"code":"GY-ES","name":"Essequibo Islands-West Demerara"},"1378":{"code":"GY-MA","name":"Mahaica-Berbice"},"1381":{"code":"GY-PM","name":"Pomeroon-Supenaam"},"1384":{"code":"GY-PT","name":"Potaro-Siparuni"},"1387":{"code":"GY-UD","name":"Upper Demerara-Berbice"},"1390":{"code":"GY-UT","name":"Upper Takutu-Upper Essequibo"}}},"HK":{"name":"Hong Kong SAR China"},"HM":{"name":"Heard & McDonald Islands"},"HN":{"name":"Honduras"},"HR":{"name":"Croatia","regions":{"535":{"code":"HR-07","name":"Bjelovarsko-bilogorska \u017eupanija"},"550":{"code":"HR-12","name":"Brodsko-posavska \u017eupanija"},"571":{"code":"HR-19","name":"Dubrova\u010dko-neretvanska \u017eupanija"},"577":{"code":"HR-21","name":"Grad Zagreb"},"568":{"code":"HR-18","name":"Istarska \u017eupanija"},"526":{"code":"HR-04","name":"Karlova\u010dka \u017eupanija"},"532":{"code":"HR-06","name":"Koprivni\u010dko-kri\u017eeva\u010dka \u017eupanija"},"520":{"code":"HR-02","name":"Krapinsko-zagorska \u017eupanija"},"541":{"code":"HR-09","name":"Li\u010dko-senjska \u017eupanija"},"574":{"code":"HR-20","name":"Me\u0111imurska \u017eupanija"},"556":{"code":"HR-14","name":"Osje\u010dko-baranjska \u017eupanija"},"547":{"code":"HR-11","name":"Po\u017ee\u0161ko-slavonska \u017eupanija"},"538":{"code":"HR-08","name":"Primorsko-goranska \u017eupanija"},"559":{"code":"HR-15","name":"\u0160ibensko-kninska \u017eupanija"},"523":{"code":"HR-03","name":"Sisa\u010dko-moslava\u010dka \u017eupanija"},"565":{"code":"HR-17","name":"Splitsko-dalmatinska \u017eupanija"},"529":{"code":"HR-05","name":"Vara\u017edinska \u017eupanija"},"544":{"code":"HR-10","name":"Viroviti\u010dko-podravska \u017eupanija"},"562":{"code":"HR-16","name":"Vukovarsko-srijemska \u017eupanija"},"553":{"code":"HR-13","name":"Zadarska \u017eupanija"},"517":{"code":"HR-01","name":"Zagreba\u010dka \u017eupanija"}}},"HT":{"name":"Haiti"},"HU":{"name":"Hungary"},"ID":{"name":"Indonesia"},"IE":{"name":"Ireland"},"IL":{"name":"Israel"},"IM":{"name":"Isle of Man"},"IN":{"name":"India","regions":{"582":{"code":"AN","name":"Andaman and Nicobar Islands"},"585":{"code":"AP","name":"Andhra Pradesh"},"588":{"code":"AR","name":"Arunachal Pradesh"},"591":{"code":"AS","name":"Assam"},"594":{"code":"BR","name":"Bihar"},"597":{"code":"CH","name":"Chandigarh"},"600":{"code":"CT","name":"Chhattisgarh"},"603":{"code":"DN","name":"Dadra and Nagar Haveli"},"606":{"code":"DD","name":"Daman and Diu"},"609":{"code":"DL","name":"Delhi"},"612":{"code":"GA","name":"Goa"},"615":{"code":"GJ","name":"Gujarat"},"618":{"code":"HR","name":"Haryana"},"621":{"code":"HP","name":"Himachal Pradesh"},"624":{"code":"JK","name":"Jammu and Kashmir"},"627":{"code":"JH","name":"Jharkhand"},"630":{"code":"KA","name":"Karnataka"},"633":{"code":"KL","name":"Kerala"},"636":{"code":"LD","name":"Lakshadweep"},"639":{"code":"MP","name":"Madhya Pradesh"},"642":{"code":"MH","name":"Maharashtra"},"645":{"code":"MN","name":"Manipur"},"648":{"code":"ML","name":"Meghalaya"},"651":{"code":"MZ","name":"Mizoram"},"654":{"code":"NL","name":"Nagaland"},"657":{"code":"OR","name":"Odisha"},"660":{"code":"PY","name":"Puducherry"},"663":{"code":"PB","name":"Punjab"},"666":{"code":"RJ","name":"Rajasthan"},"669":{"code":"SK","name":"Sikkim"},"672":{"code":"TN","name":"Tamil Nadu"},"675":{"code":"TG","name":"Telangana"},"678":{"code":"TR","name":"Tripura"},"681":{"code":"UP","name":"Uttar Pradesh"},"684":{"code":"UT","name":"Uttarakhand"},"687":{"code":"WB","name":"West Bengal"}}},"IO":{"name":"British Indian Ocean Territory"},"IQ":{"name":"Iraq"},"IR":{"name":"Iran"},"IS":{"name":"Iceland","regions":{"1411":{"code":"IS-07","name":"Austurland"},"1393":{"code":"IS-01","name":"H\u00f6fu\u00f0borgarsv\u00e6\u00f0i"},"1408":{"code":"IS-06","name":"Nor\u00f0urland eystra"},"1405":{"code":"IS-05","name":"Nor\u00f0urland vestra"},"1414":{"code":"IS-08","name":"Su\u00f0urland"},"1396":{"code":"IS-02","name":"Su\u00f0urnes"},"1402":{"code":"IS-04","name":"Vestfir\u00f0ir"},"1399":{"code":"IS-03","name":"Vesturland"}}},"IT":{"name":"Italy","regions":{"1417":{"code":"AG","name":"Agrigento"},"1420":{"code":"AL","name":"Alessandria"},"1423":{"code":"AN","name":"Ancona"},"1426":{"code":"AO","name":"Aosta"},"1432":{"code":"AR","name":"Arezzo"},"1435":{"code":"AP","name":"Ascoli-Piceno"},"1438":{"code":"AT","name":"Asti"},"1441":{"code":"AV","name":"Avellino"},"1444":{"code":"BA","name":"Bari"},"1447":{"code":"BT","name":"Barletta-Andria-Trani"},"1450":{"code":"BL","name":"Belluno"},"1453":{"code":"BN","name":"Benevento"},"1456":{"code":"BG","name":"Bergamo"},"1459":{"code":"BI","name":"Biella"},"1462":{"code":"BO","name":"Bologna"},"1465":{"code":"BZ","name":"Bolzano"},"1468":{"code":"BS","name":"Brescia"},"1471":{"code":"BR","name":"Brindisi"},"1474":{"code":"CA","name":"Cagliari"},"1477":{"code":"CL","name":"Caltanissetta"},"1480":{"code":"CB","name":"Campobasso"},"1483":{"code":"CI","name":"Carbonia Iglesias"},"1486":{"code":"CE","name":"Caserta"},"1489":{"code":"CT","name":"Catania"},"1492":{"code":"CZ","name":"Catanzaro"},"1495":{"code":"CH","name":"Chieti"},"1498":{"code":"CO","name":"Como"},"1501":{"code":"CS","name":"Cosenza"},"1504":{"code":"CR","name":"Cremona"},"1507":{"code":"KR","name":"Crotone"},"1510":{"code":"CN","name":"Cuneo"},"1513":{"code":"EN","name":"Enna"},"1516":{"code":"FM","name":"Fermo"},"1519":{"code":"FE","name":"Ferrara"},"1522":{"code":"FI","name":"Firenze"},"1525":{"code":"FG","name":"Foggia"},"1528":{"code":"FC","name":"Forli-Cesena"},"1531":{"code":"FR","name":"Frosinone"},"1534":{"code":"GE","name":"Genova"},"1537":{"code":"GO","name":"Gorizia"},"1540":{"code":"GR","name":"Grosseto"},"1543":{"code":"IM","name":"Imperia"},"1546":{"code":"IS","name":"Isernia"},"1429":{"code":"AQ","name":"L'Aquila"},"1549":{"code":"SP","name":"La-Spezia"},"1552":{"code":"LT","name":"Latina"},"1555":{"code":"LE","name":"Lecce"},"1558":{"code":"LC","name":"Lecco"},"1561":{"code":"LI","name":"Livorno"},"1564":{"code":"LO","name":"Lodi"},"1567":{"code":"LU","name":"Lucca"},"1570":{"code":"MC","name":"Macerata"},"1573":{"code":"MN","name":"Mantova"},"1576":{"code":"MS","name":"Massa-Carrara"}
5489,"1579":{"code":"MT","name":"Matera"},"1582":{"code":"VS","name":"Medio Campidano"},"1585":{"code":"ME","name":"Messina"},"1588":{"code":"MI","name":"Milano"},"1591":{"code":"MO","name":"Modena"},"1594":{"code":"MB","name":"Monza-Brianza"},"1597":{"code":"NA","name":"Napoli"},"1600":{"code":"NO","name":"Novara"},"1603":{"code":"NU","name":"Nuoro"},"1606":{"code":"OG","name":"Ogliastra"},"1609":{"code":"OT","name":"Olbia Tempio"},"1612":{"code":"OR","name":"Oristano"},"1615":{"code":"PD","name":"Padova"},"1618":{"code":"PA","name":"Palermo"},"1621":{"code":"PR","name":"Parma"},"1624":{"code":"PV","name":"Pavia"},"1627":{"code":"PG","name":"Perugia"},"1630":{"code":"PU","name":"Pesaro-Urbino"},"1633":{"code":"PE","name":"Pescara"},"1636":{"code":"PC","name":"Piacenza"},"1639":{"code":"PI","name":"Pisa"},"1642":{"code":"PT","name":"Pistoia"},"1645":{"code":"PN","name":"Pordenone"},"1648":{"code":"PZ","name":"Potenza"},"1651":{"code":"PO","name":"Prato"},"1654":{"code":"RG","name":"Ragusa"},"1657":{"code":"RA","name":"Ravenna"},"1660":{"code":"RC","name":"Reggio-Calabria"},"1663":{"code":"RE","name":"Reggio-Emilia"},"1666":{"code":"RI","name":"Rieti"},"1669":{"code":"RN","name":"Rimini"},"1672":{"code":"RM","name":"Roma"},"1675":{"code":"RO","name":"Rovigo"},"1678":{"code":"SA","name":"Salerno"},"1681":{"code":"SS","name":"Sassari"},"1684":{"code":"SV","name":"Savona"},"1687":{"code":"SI","name":"Siena"},"1690":{"code":"SR","name":"Siracusa"},"1693":{"code":"SO","name":"Sondrio"},"1696":{"code":"TA","name":"Taranto"},"1699":{"code":"TE","name":"Teramo"},"1702":{"code":"TR","name":"Terni"},"1705":{"code":"TO","name":"Torino"},"1708":{"code":"TP","name":"Trapani"},"1711":{"code":"TN","name":"Trento"},"1714":{"code":"TV","name":"Treviso"},"1717":{"code":"TS","name":"Trieste"},"1720":{"code":"UD","name":"Udine"},"1723":{"code":"VA","name":"Varese"},"1726":{"code":"VE","name":"Venezia"},"1729":{"code":"VB","name":"Verbania"},"1732":{"code":"VC","name":"Vercelli"},"1735":{"code":"VR","name":"Verona"},"1738":{"code":"VV","name":"Vibo-Valentia"},"1741":{"code":"VI","name":"Vicenza"},"1744":{"code":"VT","name":"Viterbo"}}},"JE":{"name":"Jersey"},"JM":{"name":"Jamaica"},"JO":{"name":"Jordan"},"JP":{"name":"Japan"},"KE":{"name":"Kenya"},"KG":{"name":"Kyrgyzstan"},"KH":{"name":"Cambodia"},"KI":{"name":"Kiribati"},"KM":{"name":"Comoros"},"KN":{"name":"St. Kitts & Nevis"},"KP":{"name":"North Korea"},"KR":{"name":"South Korea"},"KW":{"name":"Kuwait"},"KY":{"name":"Cayman Islands"},"KZ":{"name":"Kazakhstan"},"LA":{"name":"Laos"},"LB":{"name":"Lebanon"},"LC":{"name":"St. Lucia"},"LI":{"name":"Liechtenstein"},"LK":{"name":"Sri Lanka"},"LR":{"name":"Liberia"},"LS":{"name":"Lesotho"},"LT":{"name":"Lithuania","regions":{"475":{"code":"LT-AL","name":"Alytaus Apskritis"},"476":{"code":"LT-KU","name":"Kauno Apskritis"},"477":{"code":"LT-KL","name":"Klaip\u0117dos Apskritis"},"478":{"code":"LT-MR","name":"Marijampol\u0117s Apskritis"},"479":{"code":"LT-PN","name":"Panev\u0117\u017eio Apskritis"},"480":{"code":"LT-SA","name":"\u0160iauli\u0173 Apskritis"},"481":{"code":"LT-TA","name":"Taurag\u0117s Apskritis"},"482":{"code":"LT-TE","name":"Tel\u0161i\u0173 Apskritis"},"483":{"code":"LT-UT","name":"Utenos Apskritis"},"484":{"code":"LT-VL","name":"Vilniaus Apskritis"}}},"LU":{"name":"Luxembourg"},"LV":{"name":"Latvia","regions":{"471":{"code":"\u0100da\u017eu novads","name":"\u0100da\u017eu novads"},"366":{"code":"Aglonas novads","name":"Aglonas novads"},"367":{"code":"LV-AI","name":"Aizkraukles novads"},"368":{"code":"Aizputes novads","name":"Aizputes novads"},"369":{"code":"Akn\u012bstes novads","name":"Akn\u012bstes novads"},"370":{"code":"Alojas novads","name":"Alojas novads"},"371":{"code":"Alsungas novads","name":"Alsungas novads"},"372":{"code":"LV-AL","name":"Al\u016bksnes novads"},"373":{"code":"Amatas novads","name":"Amatas novads"},"374":{"code":"Apes novads","name":"Apes novads"},"375":{"code":"Auces novads","name":"Auces novads"},"376":{"code":"Bab\u012btes novads","name":"Bab\u012btes novads"},"377":{"code":"Baldones novads","name":"Baldones novads"},"378":{"code":"Baltinavas novads","name":"Baltinavas novads"},"379":{"code":"LV-BL","name":"Balvu novads"},"380":{"code":"LV-BU","name":"Bauskas novads"},"381":{"code":"Bever\u012bnas novads","name":"Bever\u012bnas novads"},"382":{"code":"Broc\u0113nu novads","name":"Broc\u0113nu novads"},"383":{"code":"Burtnieku novads","name":"Burtnieku novads"},"384":{"code":"Carnikavas novads","name":"Carnikavas novads"},"387":{"code":"LV-CE","name":"C\u0113su novads"},"385":{"code":"Cesvaines novads","name":"Cesvaines novads"},"386":{"code":"Ciblas novads","name":"Ciblas novads"},"388":{"code":"Dagdas novads","name":"Dagdas novads"},"355":{"code":"LV-DGV","name":"Daugavpils"},"389":{"code":"LV-DA","name":"Daugavpils novads"},"390":{"code":"LV-DO","name":"Dobeles novads"},"391":{"code":"Dundagas novads","name":"Dundagas novads"},"392":{"code":"Durbes novads","name":"Durbes novads"},"393":{"code":"Engures novads","name":"Engures novads"},"472":{"code":"\u0112rg\u013cu novads","name":"\u0112rg\u013cu novads"},"394":{"code":"Garkalnes novads","name":"Garkalnes novads"},"395":{"code":"Grobi\u0146as novads","name":"Grobi\u0146as novads"},"396":{"code":"LV-GU","name":"Gulbenes novads"},"397":{"code":"Iecavas novads","name":"Iecavas novads"},"398":{"code":"Ik\u0161\u0137iles novads","name":"Ik\u0161\u0137iles novads"},"399":{"code":"Il\u016bkstes novads","name":"Il\u016bkstes novads"},"400":{"code":"In\u010dukalna novads","name":"In\u010dukalna novads"},"401":{"code":"Jaunjelgavas novads","name":"Jaunjelgavas novads"},"402":{"code":"Jaunpiebalgas novads","name":"Jaunpiebalgas novads"},"403":{"code":"Jaunpils novads","name":"Jaunpils novads"},"357":{"code":"J\u0113kabpils","name":"J\u0113kabpils"},"405":{"code":"LV-JK","name":"J\u0113kabpils novads"},"356":{"code":"LV-JEL","name":"Jelgava"}
5489,"404":{"code":"LV-JL","name":"Jelgavas novads"},"358":{"code":"LV-JUR","name":"J\u016brmala"},"406":{"code":"Kandavas novads","name":"Kandavas novads"},"412":{"code":"K\u0101rsavas novads","name":"K\u0101rsavas novads"},"473":{"code":"\u0136eguma novads","name":"\u0136eguma novads"},"474":{"code":"\u0136ekavas novads","name":"\u0136ekavas novads"},"407":{"code":"Kokneses novads","name":"Kokneses novads"},"410":{"code":"LV-KR","name":"Kr\u0101slavas novads"},"408":{"code":"Krimuldas novads","name":"Krimuldas novads"},"409":{"code":"Krustpils novads","name":"Krustpils novads"},"411":{"code":"LV-KU","name":"Kuld\u012bgas novads"},"413":{"code":"Lielv\u0101rdes novads","name":"Lielv\u0101rdes novads"},"359":{"code":"LV-LPX","name":"Liep\u0101ja"},"360":{"code":"LV-LE","name":"Liep\u0101jas novads"},"417":{"code":"L\u012bgatnes novads","name":"L\u012bgatnes novads"},"414":{"code":"LV-LM","name":"Limba\u017eu novads"},"418":{"code":"L\u012bv\u0101nu novads","name":"L\u012bv\u0101nu novads"},"415":{"code":"Lub\u0101nas novads","name":"Lub\u0101nas novads"},"416":{"code":"LV-LU","name":"Ludzas novads"},"419":{"code":"LV-MA","name":"Madonas novads"},"421":{"code":"M\u0101lpils novads","name":"M\u0101lpils novads"},"422":{"code":"M\u0101rupes novads","name":"M\u0101rupes novads"},"420":{"code":"Mazsalacas novads","name":"Mazsalacas novads"},"423":{"code":"Nauk\u0161\u0113nu novads","name":"Nauk\u0161\u0113nu novads"},"424":{"code":"Neretas novads","name":"Neretas novads"},"425":{"code":"N\u012bcas novads","name":"N\u012bcas novads"},"426":{"code":"LV-OG","name":"Ogres novads"},"427":{"code":"Olaines novads","name":"Olaines novads"},"428":{"code":"Ozolnieku novads","name":"Ozolnieku novads"},"432":{"code":"P\u0101rgaujas novads","name":"P\u0101rgaujas novads"},"433":{"code":"P\u0101vilostas novads","name":"P\u0101vilostas novads"},"434":{"code":"P\u013cavi\u0146u novads","name":"P\u013cavi\u0146u novads"},"429":{"code":"LV-PR","name":"Prei\u013cu novads"},"430":{"code":"Priekules novads","name":"Priekules novads"},"431":{"code":"Prieku\u013cu novads","name":"Prieku\u013cu novads"},"435":{"code":"Raunas novads","name":"Raunas novads"},"361":{"code":"LV-REZ","name":"R\u0113zekne"},"442":{"code":"LV-RE","name":"R\u0113zeknes novads"},"436":{"code":"Riebi\u0146u novads","name":"Riebi\u0146u novads"},"362":{"code":"LV-RIX","name":"R\u012bga"},"363":{"code":"LV-RI","name":"R\u012bgas novads"},"437":{"code":"Rojas novads","name":"Rojas novads"},"438":{"code":"Ropa\u017eu novads","name":"Ropa\u017eu novads"},"439":{"code":"Rucavas novads","name":"Rucavas novads"},"440":{"code":"Rug\u0101ju novads","name":"Rug\u0101ju novads"},"443":{"code":"R\u016bjienas novads","name":"R\u016bjienas novads"},"441":{"code":"Rund\u0101les novads","name":"Rund\u0101les novads"},"444":{"code":"Salacgr\u012bvas novads","name":"Salacgr\u012bvas novads"},"445":{"code":"Salas novads","name":"Salas novads"},"446":{"code":"Salaspils novads","name":"Salaspils novads"},"447":{"code":"LV-SA","name":"Saldus novads"},"448":{"code":"Saulkrastu novads","name":"Saulkrastu novads"},"455":{"code":"S\u0113jas novads","name":"S\u0113jas novads"},"449":{"code":"Siguldas novads","name":"Siguldas novads"},"451":{"code":"Skr\u012bveru novads","name":"Skr\u012bveru novads"},"450":{"code":"Skrundas novads","name":"Skrundas novads"},"452":{"code":"Smiltenes novads","name":"Smiltenes novads"},"453":{"code":"Stopi\u0146u novads","name":"Stopi\u0146u novads"},"454":{"code":"Stren\u010du novads","name":"Stren\u010du novads"},"456":{"code":"LV-TA","name":"Talsu novads"},"458":{"code":"T\u0113rvetes novads","name":"T\u0113rvetes novads"},"457":{"code":"LV-TU","name":"Tukuma novads"},"459":{"code":"Vai\u0146odes novads","name":"Vai\u0146odes novads"},"460":{"code":"LV-VK","name":"Valkas novads"},"364":{"code":"Valmiera","name":"Valmiera"},"461":{"code":"LV-VM","name":"Valmieras novads"},"462":{"code":"Varak\u013c\u0101nu novads","name":"Varak\u013c\u0101nu novads"},"469":{"code":"V\u0101rkavas novads","name":"V\u0101rkavas novads"},"463":{"code":"Vecpiebalgas novads","name":"Vecpiebalgas novads"},"464":{"code":"Vecumnieku novads","name":"Vecumnieku novads"},"365":{"code":"LV-VEN","name":"Ventspils"},"465":{"code":"LV-VE","name":"Ventspils novads"},"466":{"code":"Vies\u012btes novads","name":"Vies\u012btes novads"},"467":{"code":"Vi\u013cakas novads","name":"Vi\u013cakas novads"},"468":{"code":"Vi\u013c\u0101nu novads","name":"Vi\u013c\u0101nu novads"},"470":{"code":"Zilupes novads","name":"Zilupes novads"}}},"LY":{"name":"Libya"},"MA":{"name":"Morocco"},"MC":{"name":"Monaco"},"MD":{"name":"Moldova"},"ME":{"name":"Montenegro"},"MF":{"name":"St. Martin"},"MG":{"name":"Madagascar"},"MH":{"name":"Marshall Islands"},"MK":{"name":"North Macedonia"},"ML":{"name":"Mali"},"MM":{"name":"Myanmar (Burma)"},"MN":{"name":"Mongolia"}
5489,"MO":{"name":"Macao SAR China"},"MP":{"name":"Northern Mariana Islands"},"MQ":{"name":"Martinique"},"MR":{"name":"Mauritania"},"MS":{"name":"Montserrat"},"MT":{"name":"Malta"},"MU":{"name":"Mauritius"},"MV":{"name":"Maldives"},"MW":{"name":"Malawi"},"MX":{"name":"Mexico","regions":{"1747":{"code":"AGU","name":"Aguascalientes"},"1750":{"code":"BCN","name":"Baja California"},"1753":{"code":"BCS","name":"Baja California Sur"},"1756":{"code":"CAM","name":"Campeche"},"1759":{"code":"CHP","name":"Chiapas"},"1762":{"code":"CHH","name":"Chihuahua"},"1765":{"code":"CMX","name":"Ciudad de M\u00e9xico"},"1768":{"code":"COA","name":"Coahuila"},"1771":{"code":"COL","name":"Colima"},"1774":{"code":"DUR","name":"Durango"},"1777":{"code":"MEX","name":"Estado de M\u00e9xico"},"1780":{"code":"GUA","name":"Guanajuato"},"1783":{"code":"GRO","name":"Guerrero"},"1786":{"code":"HID","name":"Hidalgo"},"1789":{"code":"JAL","name":"Jalisco"},"1792":{"code":"MIC","name":"Michoac\u00e1n"},"1795":{"code":"MOR","name":"Morelos"},"1798":{"code":"NAY","name":"Nayarit"},"1801":{"code":"NLE","name":"Nuevo Le\u00f3n"},"1804":{"code":"OAX","name":"Oaxaca"},"1807":{"code":"PUE","name":"Puebla"},"1810":{"code":"QUE","name":"Quer\u00e9taro"},"1813":{"code":"ROO","name":"Quintana Roo"},"1816":{"code":"SLP","name":"San Luis Potos\u00ed"},"1819":{"code":"SIN","name":"Sinaloa"},"1822":{"code":"SON","name":"Sonora"},"1825":{"code":"TAB","name":"Tabasco"},"1828":{"code":"TAM","name":"Tamaulipas"},"1831":{"code":"TLA","name":"Tlaxcala"},"1834":{"code":"VER","name":"Veracruz"},"1837":{"code":"YUC","name":"Yucat\u00e1n"},"1840":{"code":"ZAC","name":"Zacatecas"}}},"MY":{"name":"Malaysia"},"MZ":{"name":"Mozambique"},"NA":{"name":"Namibia"},"NC":{"name":"New Caledonia"},"NE":{"name":"Niger"},"NF":{"name":"Norfolk Island"},"NG":{"name":"Nigeria"},"NI":{"name":"Nicaragua"},"NL":{"name":"Netherlands"},"NO":{"name":"Norway"},"NP":{"name":"Nepal"},"NR":{"name":"Nauru"},"NU":{"name":"Niue"},"NZ":{"name":"New Zealand"},"OM":{"name":"Oman"},"PA":{"name":"Panama"},"PE":{"name":"Peru","regions":{"1900":{"code":"PE-AMA","name":"Amazonas"},"1903":{"code":"PE-ANC","name":"Ancash"},"1906":{"code":"PE-APU","name":"Apur\u00edmac"},"1909":{"code":"PE-ARE","name":"Arequipa"},"1912":{"code":"PE-AYA","name":"Ayacucho"},"1915":{"code":"PE-CAJ","name":"Cajamarca"},"1918":{"code":"PE-CUS","name":"Cusco"},"1921":{"code":"PE-CAL","name":"El Callao"},"1924":{"code":"PE-HUV","name":"Huancavelica"},"1927":{"code":"PE-HUC","name":"Hu\u00e1nuco"},"1930":{"code":"PE-ICA","name":"Ica"},"1933":{"code":"PE-JUN","name":"Jun\u00edn"},"1936":{"code":"PE-LAL","name":"La Libertad"},"1939":{"code":"PE-LAM","name":"Lambayeque"},"1942":{"code":"PE-LIM","name":"Lima"},"1945":{"code":"PE-LOR","name":"Loreto"},"1948":{"code":"PE-MDD","name":"Madre de Dios"},"1951":{"code":"PE-MOQ","name":"Moquegua"},"1897":{"code":"PE-LMA","name":"Municipalidad Metropolitana de Lima"},"1954":{"code":"PE-PAS","name":"Pasco"}
5489,"1957":{"code":"PE-PIU","name":"Piura"},"1960":{"code":"PE-PUN","name":"Puno"},"1963":{"code":"PE-SAM","name":"San Mart\u00edn"},"1966":{"code":"PE-TAC","name":"Tacna"},"1969":{"code":"PE-TUM","name":"Tumbes"},"1972":{"code":"PE-UCA","name":"Ucayali"}}},"PF":{"name":"French Polynesia"},"PG":{"name":"Papua New Guinea"},"PH":{"name":"Philippines"},"PK":{"name":"Pakistan"},"PL":{"name":"Poland","regions":{"1975":{"code":"PL-02","name":"dolno\u015bl\u0105skie"},"1978":{"code":"PL-04","name":"kujawsko-pomorskie"},"1981":{"code":"PL-06","name":"lubelskie"},"1984":{"code":"PL-08","name":"lubuskie"},"1993":{"code":"PL-14","name":"mazowieckie"},"1990":{"code":"PL-12","name":"ma\u0142opolskie"},"1996":{"code":"PL-16","name":"opolskie"},"1999":{"code":"PL-18","name":"podkarpackie"},"2002":{"code":"PL-20","name":"podlaskie"},"2005":{"code":"PL-22","name":"pomorskie"},"2008":{"code":"PL-24","name":"\u015bl\u0105skie"},"2011":{"code":"PL-26","name":"\u015bwi\u0119tokrzyskie"},"2014":{"code":"PL-28","name":"warmi\u0144sko-mazurskie"},"2017":{"code":"PL-30","name":"wielkopolskie"},"2020":{"code":"PL-32","name":"zachodniopomorskie"},"1987":{"code":"PL-10","name":"\u0142\u00f3dzkie"}}},"PM":{"name":"St. Pierre & Miquelon"},"PN":{"name":"Pitcairn Islands"},"PS":{"name":"Palestinian Territories"},"PT":{"name":"Portugal","regions":{"2023":{"code":"PT-01","name":"Aveiro"},"2026":{"code":"PT-02","name":"Beja"},"2029":{"code":"PT-03","name":"Braga"},"2032":{"code":"PT-04","name":"Bragan\u00e7a"},"2035":{"code":"PT-05","name":"Castelo Branco"},"2038":{"code":"PT-06","name":"Coimbra"},"2041":{"code":"PT-07","name":"\u00c9vora"},"2044":{"code":"PT-08","name":"Faro"},"2047":{"code":"PT-09","name":"Guarda"},"2050":{"code":"PT-10","name":"Leiria"},"2053":{"code":"PT-11","name":"Lisboa"},"2056":{"code":"PT-12","name":"Portalegre"},"2059":{"code":"PT-13","name":"Porto"},"2080":{"code":"PT-30","name":"Regi\u00e3o Aut\u00f3noma da Madeira"},"2077":{"code":"PT-20","name":"Regi\u00e3o Aut\u00f3noma dos A\u00e7ores"},"2062":{"code":"PT-14","name":"Santar\u00e9m"},"2065":{"code":"PT-15","name":"Set\u00fabal"},"2068":{"code":"PT-16","name":"Viana do Castelo"},"2071":{"code":"PT-17","name":"Vila Real"},"2074":{"code":"PT-18","name":"Viseu"}}},"PW":{"name":"Palau"},"PY":{"name":"Paraguay","regions":{"1846":{"code":"PY-16","name":"Alto Paraguay"},"1849":{"code":"PY-10","name":"Alto Paran\u00e1"},"1852":{"code":"PY-13","name":"Amambay"},"1843":{"code":"PY-ASU","name":"Asunci\u00f3n"},"1855":{"code":"PY-19","name":"Boquer\u00f3n"},"1858":{"code":"PY-5","name":"Caaguaz\u00fa"},"1861":{"code":"PY-6","name":"Caazap\u00e1"},"1864":{"code":"PY-14","name":"Canindey\u00fa"},"1867":{"code":"PY-11","name":"Central"},"1870":{"code":"PY-1","name":"Concepci\u00f3n"},"1873":{"code":"PY-3","name":"Cordillera"},"1876":{"code":"PY-4","name":"Guair\u00e1"},"1879":{"code":"PY-7","name":"Itap\u00faa"},"1882":{"code":"PY-8","name":"Misiones"},"1885":{"code":"PY-12","name":"\u00d1eembuc\u00fa"},"1888":{"code":"PY-9","name":"Paraguar\u00ed"},"1891":{"code":"PY-15","name":"Presidente Hayes"},"1894":{"code":"PY-2","name":"San Pedro"}}},"QA":{"name":"Qatar"},"RE":{"name":"R\u00e9union"},"RO":{"name":"Romania","regions":{"278":{"code":"AB","name":"Alba"},"279":{"code":"AR","name":"Arad"},"280":{"code":"AG","name":"Arge\u015f"},"281":{"code":"BC","name":"Bac\u0103u"},"282":{"code":"BH","name":"Bihor"},"283":{"code":"BN","name":"Bistri\u0163a-N\u0103s\u0103ud"},"284":{"code":"BT","name":"Boto\u015fani"},"286":{"code":"BR","name":"Br\u0103ila"},"285":{"code":"BV","name":"Bra\u015fov"},"287":{"code":"B","name":"Bucure\u015fti"},"288":{"code":"BZ","name":"Buz\u0103u"},"290":{"code":"CL","name":"C\u0103l\u0103ra\u015fi"},"289":{"code":"CS","name":"Cara\u015f-Severin"},"291":{"code":"CJ","name":"Cluj"},"292":{"code":"CT","name":"Constan\u0163a"},"293":{"code":"CV","name":"Covasna"},"294":{"code":"DB","name":"D\u00e2mbovi\u0163a"},"295":{"code":"DJ","name":"Dolj"},"296":{"code":"GL","name":"Gala\u0163i"},"297":{"code":"GR","name":"Giurgiu"},"298":{"code":"GJ","name":"Gorj"},"299":{"code":"HR","name":"Harghita"},"300":{"code":"HD","name":"Hunedoara"},"301":{"code":"IL","name":"Ialomi\u0163a"},"302":{"code":"IS","name":"Ia\u015fi"},"303":{"code":"IF","name":"Ilfov"},"304":{"code":"MM","name":"Maramure\u015f"},"305":{"code":"MH","name":"Mehedin\u0163i"},"306":{"code":"MS","name":"Mure\u015f"},"307":{"code":"NT","name":"Neam\u0163"},"308":{"code":"OT","name":"Olt"},"309":{"code":"PH","name":"Prahova"},"311":{"code":"SJ","name":"S\u0103laj"},"310":{"code":"SM","name":"Satu-Mare"},"312":{"code":"SB","name":"Sibiu"},"313":{"code":"SV","name":"Suceava"},"314":{"code":"TR","name":"Teleorman"},"315":{"code":"TM","name":"Timi\u015f"},"316":{"code":"TL","name":"Tulcea"},"318":{"code":"VL","name":"V\u00e2lcea"},"317":{"code":"VS","name":"Vaslui"},"319":{"code":"VN","name":"Vrancea"}}},"RS":{"name":"Serbia"},"RU":{"name":"Russia"},"RW":{"name":"Rwanda"},"SA":{"name":"Saudi Arabia"},"SB":{"name":"Solomon Islands"},"SC":{"name":"Seychelles"},"SD":{"name":"Sudan"},"SE":{"name":"Sweden","regions":{"2113":{"code":"SE-K","name":"Blekinge l\u00e4n"}
5489,"2116":{"code":"SE-W","name":"Dalarnas l\u00e4n"},"2122":{"code":"SE-X","name":"G\u00e4vleborgs l\u00e4n"},"2119":{"code":"SE-I","name":"Gotlands l\u00e4n"},"2125":{"code":"SE-N","name":"Hallands l\u00e4n"},"2128":{"code":"SE-Z","name":"J\u00e4mtlands l\u00e4n"},"2131":{"code":"SE-F","name":"J\u00f6nk\u00f6pings l\u00e4n"},"2134":{"code":"SE-H","name":"Kalmar l\u00e4n"},"2137":{"code":"SE-G","name":"Kronobergs l\u00e4n"},"2140":{"code":"SE-BD","name":"Norrbottens l\u00e4n"},"2170":{"code":"SE-T","name":"\u00d6rebro l\u00e4n"},"2173":{"code":"SE-E","name":"\u00d6sterg\u00f6tlands l\u00e4n"},"2143":{"code":"SE-M","name":"Sk\u00e5ne l\u00e4n"},"2149":{"code":"SE-D","name":"S\u00f6dermanlands l\u00e4n"},"2146":{"code":"SE-AB","name":"Stockholms l\u00e4n"},"2152":{"code":"SE-C","name":"Uppsala l\u00e4n"},"2155":{"code":"SE-S","name":"V\u00e4rmlands l\u00e4n"},"2158":{"code":"SE-AC","name":"V\u00e4sterbottens l\u00e4n"},"2161":{"code":"SE-Y","name":"V\u00e4sternorrlands l\u00e4n"},"2164":{"code":"SE-U","name":"V\u00e4stmanlands l\u00e4n"},"2167":{"code":"SE-O","name":"V\u00e4stra G\u00f6talands l\u00e4n"}}},"SG":{"name":"Singapore"},"SH":{"name":"St. Helena"},"SI":{"name":"Slovenia"},"SJ":{"name":"Svalbard & Jan Mayen"},"SK":{"name":"Slovakia"},"SL":{"name":"Sierra Leone"},"SM":{"name":"San Marino"},"SN":{"name":"Senegal"},"SO":{"name":"Somalia"},"SR":{"name":"Suriname","regions":{"2083":{"code":"SR-BR","name":"Brokopondo"},"2086":{"code":"SR-CM","name":"Commewijne"},"2089":{"code":"SR-CR","name":"Coronie"},"2092":{"code":"SR-MA","name":"Marowijne"},"2095":{"code":"SR-NI","name":"Nickerie"},"2098":{"code":"SR-PR","name":"Para"},"2101":{"code":"SR-PM","name":"Paramaribo"},"2104":{"code":"SR-SA","name":"Saramacca"},"2107":{"code":"SR-SI","name":"Sipaliwini"},"2110":{"code":"SR-WA","name":"Wanica"}}},"ST":{"name":"S\u00e3o Tom\u00e9 & Pr\u00edncipe"},"SV":{"name":"El Salvador"},"SY":{"name":"Syria"},"SZ":{"name":"Eswatini"},"TC":{"name":"Turks & Caicos Islands"},"TD":{"name":"Chad"},"TF":{"name":"French Southern Territories"},"TG":{"name":"Togo"},"TH":{"name":"Thailand"},"TJ":{"name":"Tajikistan"},"TK":{"name":"Tokelau"},"TL":{"name":"Timor-Leste"},"TM":{"name":"Turkmenistan"},"TN":{"name":"Tunisia"},"TO":{"name":"Tonga"},"TR":{"name":"Turkey"},"TT":{"name":"Trinidad & Tobago"},"TV":{"name":"Tuvalu"},"TW":{"name":"Taiwan, Province of China"},"TZ":{"name":"Tanzania"},"UA":{"name":"Ukraine"},"UG":{"name":"Uganda"},"UM":{"name":"U.S. Outlying Islands"},"US":{"name":"United States","regions":{"1":{"code":"AL","name":"Alabama"},"2":{"code":"AK","name":"Alaska"},"3":{"code":"AS","name":"American Samoa"},"4":{"code":"AZ","name":"Arizona"},"5":{"code":"AR","name":"Arkansas"},"6":{"code":"AE","name":"Armed Forces Africa"},"7":{"code":"AA","name":"Armed Forces Americas"},"8":{"code":"AE","name":"Armed Forces Canada"},"9":{"code":"AE","name":"Armed Forces Europe"},"10":{"code":"AE","name":"Armed Forces Middle East"},"11":{"code":"AP","name":"Armed Forces Pacific"},"12":{"code":"CA","name":"California"},"13":{"code":"CO","name":"Colorado"},"14":{"code":"CT","name":"Connecticut"},"15":{"code":"DE","name":"Delaware"},"16":{"code":"DC","name":"District of Columbia"},"17":{"code":"FM","name":"Federated States Of Micronesia"},"18":{"code":"FL","name":"Florida"},"19":{"code":"GA","name":"Georgia"},"20":{"code":"GU","name":"Guam"},"21":{"code":"HI","name":"Hawaii"},"22":{"code":"ID","name":"Idaho"},"23":{"code":"IL","name":"Illinois"},"24":{"code":"IN","name":"Indiana"},"25":{"code":"IA","name":"Iowa"},"26":{"code":"KS","name":"Kansas"},"27":{"code":"KY","name":"Kentucky"},"28":{"code":"LA","name":"Louisiana"},"29":{"code":"ME","name":"Maine"},"30":{"code":"MH","name":"Marshall Islands"},"31":{"code":"MD","name":"Maryland"},"32":{"code":"MA","name":"Massachusetts"},"33":{"code":"MI","name":"Michigan"},"34":{"code":"MN","name":"Minnesota"},"35":{"code":"MS","name":"Mississippi"},"36":{"code":"MO","name":"Missouri"},"37":{"code":"MT","name":"Montana"},"38":{"code":"NE","name":"Nebraska"},"39":{"code":"NV","name":"Nevada"},"40":{"code":"NH","name":"New Hampshire"},"41":{"code":"NJ","name":"New Jersey"},"42":{"code":"NM","name":"New Mexico"},"43":{"code":"NY","name":"New York"},"44":{"code":"NC","name":"North Carolina"},"45":{"code":"ND","name":"North Dakota"},"46":{"code":"MP","name":"Northern Mariana Islands"},"47":{"code":"OH","name":"Ohio"},"48":{"code":"OK","name":"Oklahoma"},"49":{"code":"OR","name":"Oregon"},"50":{"code":"PW","name":"Palau"},"51":{"code":"PA","name":"Pennsylvania"},"52":{"code":"PR","name":"Puerto Rico"},"53":{"code":"RI","name":"Rhode Island"},"54":{"code":"SC","name":"South Carolina"},"55":{"code":"SD","name":"South Dakota"},"56":{"code":"TN","name":"Tennessee"},"57":{"code":"TX","name":"Texas"}
5489,"58":{"code":"UT","name":"Utah"},"59":{"code":"VT","name":"Vermont"},"60":{"code":"VI","name":"Virgin Islands"},"61":{"code":"VA","name":"Virginia"},"62":{"code":"WA","name":"Washington"},"63":{"code":"WV","name":"West Virginia"},"64":{"code":"WI","name":"Wisconsin"},"65":{"code":"WY","name":"Wyoming"}}},"UY":{"name":"Uruguay","regions":{"2176":{"code":"UY-AR","name":"Artigas"},"2179":{"code":"UY-CA","name":"Canelones"},"2182":{"code":"UY-CL","name":"Cerro Largo"},"2185":{"code":"UY-CO","name":"Colonia"},"2188":{"code":"UY-DU","name":"Durazno"},"2191":{"code":"UY-FS","name":"Flores"},"2194":{"code":"UY-FD","name":"Florida"},"2197":{"code":"UY-LA","name":"Lavalleja"},"2200":{"code":"UY-MA","name":"Maldonado"},"2203":{"code":"UY-MO","name":"Montevideo"},"2206":{"code":"UY-PA","name":"Paysandu"},"2209":{"code":"UY-RN","name":"R\u00edo Negro"},"2212":{"code":"UY-RV","name":"Rivera"},"2215":{"code":"UY-RO","name":"Rocha"},"2218":{"code":"UY-SA","name":"Salto"},"2221":{"code":"UY-SJ","name":"San Jos\u00e9"},"2224":{"code":"UY-SO","name":"Soriano"},"2227":{"code":"UY-TA","name":"Tacuaremb\u00f3"},"2230":{"code":"UY-TT","name":"Treinta y Tres"}}},"UZ":{"name":"Uzbekistan"},"VA":{"name":"Vatican City"},"VC":{"name":"St. Vincent & Grenadines"},"VE":{"name":"Venezuela","regions":{"2239":{"code":"VE-Z","name":"Amazonas"},"2242":{"code":"VE-B","name":"Anzo\u00e1tegui"},"2245":{"code":"VE-C","name":"Apure"},"2248":{"code":"VE-D","name":"Aragua"},"2251":{"code":"VE-E","name":"Barinas"},"2254":{"code":"VE-F","name":"Bol\u00edvar"},"2257":{"code":"VE-G","name":"Carabobo"},"2260":{"code":"VE-H","name":"Cojedes"},"2263":{"code":"VE-Y","name":"Delta Amacuro"},"2233":{"code":"VE-W","name":"Dependencias Federales"},"2236":{"code":"VE-A","name":"Distrito Capital"},"2266":{"code":"VE-I","name":"Falc\u00f3n"},"2269":{"code":"VE-J","name":"Gu\u00e1rico"},"2272":{"code":"VE-K","name":"Lara"},"2275":{"code":"VE-L","name":"M\u00e9rida"},"2278":{"code":"VE-M","name":"Miranda"},"2281":{"code":"VE-N","name":"Monagas"},"2284":{"code":"VE-O","name":"Nueva Esparta"},"2287":{"code":"VE-P","name":"Portuguesa"},"2290":{"code":"VE-R","name":"Sucre"},"2293":{"code":"VE-S","name":"T\u00e1chira"},"2296":{"code":"VE-T","name":"Trujillo"},"2299":{"code":"VE-X","name":"Vargas"},"2302":{"code":"VE-U","name":"Yaracuy"},"2305":{"code":"VE-V","name":"Zulia"}}},"VG":{"name":"British Virgin Islands"},"VI":{"name":"U.S. Virgin Islands"},"VN":{"name":"Vietnam"},"VU":{"name":"Vanuatu"},"WF":{"name":"Wallis & Futuna"},"WS":{"name":"Samoa"},"YE":{"name":"Yemen"},"YT":{"name":"Mayotte"},"ZA":{"name":"South Africa"},"ZM":{"name":"Zambia"},"ZW":{"name":"Zimbabwe"},"data_id":1790358342},"captcha":[],"wishlist":{"items":[]},"company":[],"company_authorization":[],"purchase_order":[],"negotiable_quote":[],"loggedAsCustomer":[],"multiplewishlist":[],"persistent":[],"review":[],"apptrian_facebook_pixel_matching_section":[],"side-by-side":[],"bold_checkout_meta":[],"hyva_checkout":[],"gtm-checkout":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[]}</script>
vendor: 1 bytes, line 5489
5489
5490<script>
5491    function initContentPopup() {
5492        return {
5493            init(parentIdentifier = '') {
5494                // If parent identifier is sent in, only look for children with class "contentPopupHandler" to initialize
5495                let contentPopupTriggers = parentIdentifier ? document.querySelectorAll(parentIdentifier + ' .contentPopupHandler') : document.getElementsByClassName('contentPopupHandler');
5496
5497                // Handle image popups as well
5498                let imagePopupTriggers = parentIdentifier ? document.querySelectorAll(parentIdentifier + ' .imagePopupHandler') : document.getElementsByClassName('imagePopupHandler');
5499                contentPopupTriggers =  Array.from(contentPopupTriggers).concat(Array.from(imagePopupTriggers));
5500
5501                Array.from(contentPopupTriggers).forEach((element) => {
5502                    let popupClickHandler = function(event) {
5503                        event.preventDefault();
5504                        event.stopPropagation();
5505
5506                        // Find corresponding element with same ID but "Content" appended to use for modal content
5507                        let id = element.id;
5508                        let popupContent = document.getElementById(id + 'Content');
5509
5510                        // For image popups use child HTML as content, since this will be the img tag
5511                        if (element.classList.contains('imagePopupHandler')) {
5512                            popupContent = element.cloneNode(true);
5513                            let imgLink = popupContent.href;
5514                            let imgElement = popupContent.querySelector('img');
5515
5516                            // if image doesnt exist yet, clear out content and create image
5517                            if(!imgElement) {
5518                                popupContent.innerHTML = '';
5519                                imgElement = document.createElement('img');
5520                                popupContent.appendChild(imgElement);
5521                            }
5522                            // Set src of child img tag to be href of target tag if present, as this will be the full size image to show in the popup
5523                            if (imgLink) {
5524                                imgElement.src = imgLink;
5525                                imgElement.style.maxHeight = '800px';
5526                            }
5527                        }
5528
5529                        if (popupContent) {
5530                            document.getElementById('contentPopupModal').innerHTML = popupContent.innerHTML;
5531
5532                            // Not able to directly trigger modal show from here, so trigger click on hidden button to open the modal
5533                            document.getElementById('contentPopupTrigger').dispatchEvent(new Event('click'));
5534                        }
5535                    };
5536
5537                    if(!element.getAttribute('initialized')) {
5538                        element.addEventListener('click', popupClickHandler);
5539                        element.setAttribute('initialized', 'true');
5540                    }
5541
5542                });
5543            }
5544        }
5545    }
5546</script>
5546
5547<div x-data="Object.assign({}, hyva.modal(), initContentPopup())"
5548     x-init="init()"
5549>
5550    <button @click="show('dialog', this.$event || $event)" type="button" id="contentPopupTrigger" class="btn mt-40 hidden" aria-haspopup="dialog">
5551        Show    </button>
5552    <div x-cloak    data-dialog-ref-name="dialog"
5553    x-bind="overlay"
5554    class="fixed inset-0 bg-black bg-opacity-50 z-50">
5555    <div class="fixed flex justify-center items-center text-left z-40 inset-0">
5556        <div x-ref="dialog" role="dialog" aria-modal="true"
5557                                                     aria-labelledby="content-popup-modal-label"
5558                         class="inline-block bg-white shadow-xl rounded-lg p-10 max-h-screen overflow-auto overscroll-y-contain">
5559            <label id="content-popup-modal-label" class="text-[0]"><?= $escaper->escapeHtml(__("Modal content")) ?></label><div id="contentPopupModal"></div>        </div>
5560    </div>
5561    </div>
5562</div>
5563<script type="text/javascript">
5564    document.addEventListener('DOMContentLoaded', function() {
5565        let aosNodes = document.querySelectorAll("[data-aos]");
5566        let aosList = [];
5567
5568        aosNodes.forEach(function(aosNode) {
5569            let aosEntry = {};
5570            aosNode.classList.add("aos-init");
5571
5572            aosEntry.node = aosNode;
5573            aosEntry.position = getPosition(aosNode);
5574            aosList.push(aosEntry);
5575        });
5576
5577        window.addEventListener("resize", function() {
5578            // Recalculate positions on resize
5579            aosList.forEach(function(aosEntry) {
5580                aosEntry.position = getPosition(aosEntry.node);
5581            });
5582        });
5583
5584        window.addEventListener("scroll", function() {
5585            animateScroll(aosList);
5586        });
5587
5588        function animateScroll(elements) {
5589            let pageYOffset = window.pageYOffset;
5590            let innerHeight = window.innerHeight;
5591
5592            elements.forEach(function(element) {
5593                let totalHeight = pageYOffset + innerHeight;
5594                totalHeight > element.position ? element.node.classList.add("aos-animate") : element.node.classList.remove("aos-animate");
5595            });
5596        }
5597
5598        function getPosition(element) {
5599            let innerHeight = window.innerHeight;
5600            let anchorPlacement = element.getAttribute("data-aos-anchor-placement");
5601            let top = getTop(element);
5602
5603            switch (anchorPlacement) {
5604                case "top-bottom":
5605                    break;
5606                case "center-bottom":
5607                    top += element.offsetHeight / 2;
5608                    break;
5609                case "bottom-bottom":
5610                    top += element.offsetHeight;
5611                    break;
5612                case "top-center":
5613                    top += innerHeight / 2;
5614                    break;
5615                case "bottom-center":
5616                    top += innerHeight / 2 + element.offsetHeight;
5617                    break;
5618                case "center-center":
5619                    top += innerHeight / 2 + element.offsetHeight / 2;
5620                    break;
5621                case "top-top":
5622                    top += innerHeight;
5623                    break;
5624                case "bottom-top":
5625                    top += element.offsetHeight + innerHeight;
5626                    break;
5627                case "center-top":
5628                    top += element.offsetHeight / 2 + innerHeight
5629            }
5630
5631            return top;
5632        }
5633
5634        function getTop(element) {
5635            let top = 0
5636
5637            while (element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) {
5638                top += element.offsetTop - ("BODY" != element.tagName ? element.scrollTop : 0);
5639                element = element.offsetParent;
5640            }
5641
5642            return top;
5643        }
5644    });
5645</script>
vendor: 1 bytes, line 5645
5645
5646<script>
5647
5648    function dispatchOldCart(event) {
5649        let storage = hyva.getBrowserStorage();
5650        let oldCart = storage.getItem('old-cart')
5651            ? JSON.parse(storage.getItem('old-cart'))
5652            : {items: []};
5653        let newCart = event.detail.data.cart ?? {};
5654        window.dispatchEvent(new CustomEvent('cart-change', {
5655            detail:
5656                {
5657                    data: {
5658                        oldCart: oldCart,
5659                        privateData: event.detail.data
5660                    }
5661                }
5662            })
5663        );
5664        storage.setItem('old-cart', JSON.stringify(newCart));
5665    }
5666
5667    window.addEventListener('private-content-loaded', dispatchOldCart)
5668</script>
5668
5669</div><div id="show-result" data-bind="scope:'showResult'" style="display: none;">
5670    <!-- ko template: getTemplate() --><!-- /ko -->
5671    
5671<script type="text/x-magento-init">
5672    {
5673        "#show-result": {
5674            "Magento_Ui/js/core/app": {
5675               "components": {
5676                    "showResult": {
5677                        "component": "Bold_CheckoutMeta/js/model/order-result"
5678                    }
5679                }
5680            }
5681        }
5682    }
5683    </script>
5683
5684</div>
5685<script nonce="dTVodmpqN2U3dDY0YjBzMGUzN2pjOHcwcnlqdDdmN3o=">
5686
5687    yireoGoogleTagManager2Pusher({"version":"3.10.0","page_type":"cms\/page\/view","page_path":"https:\/\/www.outdoornativitysets.com\/about-us","page_title":"About Us","virtual_page":"\/about-us","breadcrumb":[],"user":{"has_transacted":false}}, 'push (initial page) [data-layer.phtml]');
5688    </script>
vendor: 1 bytes, line 5688
5688
5689<script nonce="dTVodmpqN2U3dDY0YjBzMGUzN2pjOHcwcnlqdDdmN3o=">
5690    function yireoGoogleTagManager2FindParentElementWithName(element, parentTagName) {
5691        if (!element.parentElement) {
5692            return null;
5693        }
5694
5695        if (element.parentElement.tagName.toLowerCase() === parentTagName) {
5696            return element.parentElement;
5697        }
5698
5699        return yireoGoogleTagManager2FindParentElementWithName(element.parentElement, parentTagName);
5700    }
5701
5702    const products = document.querySelectorAll('.products a.product');
5703    if (products && products.length > 0) {
5704        products.forEach(function(product) {
5705            product.addEventListener('click', function(event, s) {
5706                let parentElement = yireoGoogleTagManager2FindParentElementWithName(event.target, 'form');
5707                const inputElement = parentElement.querySelector('input[name="product"]');
5708                const productId = inputElement.value;
5709                const productData = window['YIREO_GOOGLETAGMANAGER2_PRODUCT_DATA_ID_' + productId] || {};
5710                productData.item_id = productId;
5711
5712                const eventData = {
5713                    'event': 'select_item',
5714                    'ecommerce': {
5715                        'items': [productData]
5716                    }
5717                }
5718
5719                yireoGoogleTagManager2Pusher(eventData, 'push (page event "select_item") [script-product-clicks.phtml]');
5720
5721                if (window['YIREO_GOOGLETAGMANAGER2_DEBUG_CLICKS'] && confirm("Press to continue with redirect") === false) {
5722                    event.preventDefault();
5723                }
5724            });
5725        })
5726    }
5727</script>
vendor: 1 bytes, line 5727
5727
5728<script nonce="dTVodmpqN2U3dDY0YjBzMGUzN2pjOHcwcnlqdDdmN3o=">
5729    window.addEventListener('private-content-loaded', function(event) {
5730        window.dataLayer = window.dataLayer || [];
5731
5732        var isEmpty = function (variable) {
5733            if (typeof variable === 'undefined') {
5734                return true;
5735            }
5736
5737            if (Array.isArray(variable) && variable.length === 0) {
5738                return true;
5739            }
5740
5741            return typeof variable === 'object' && Object.keys(variable).length === 0;
5742        }
5743
5744        var getSectionNames = function () {
5745            return ['cart', 'customer'];
5746        }
5747
5748        getSectionNames().forEach(function (sectionName) {
5749            if (!event.detail.data[sectionName].gtm) {
5750                return;
5751            }
5752
5753            const attributes = event.detail.data[sectionName].gtm;
5754            if (!Object.keys(attributes).length > 0) {
5755                return;
5756            }
5757
5758            yireoGoogleTagManager2Pusher(attributes, 'push (attributes) [script-additions.phtml]');
5759        });
5760
5761        let attributes = {};
5762        getSectionNames().forEach(function (sectionName) {
5763            if (!event.detail.data[sectionName].gtm_events) {
5764                return;
5765            }
5766
5767            const gtmEvents = event.detail.data[sectionName].gtm_events;
5768            for (const [eventId, eventData] of Object.entries(gtmEvents)) {
5769                yireoGoogleTagManager2Logger('found event in section "' + sectionName + '"', eventData);
5770
5771                const metaData = eventData.meta;
5772                yireoGoogleTagManager2Pusher(eventData, 'push (customerData "' + sectionName + '"  event "' + eventId + '")');
5773
5774                if (!metaData || metaData.cacheable !== true) {
5775                    yireoGoogleTagManager2Logger('removing event "' + eventId + '" from section "' + sectionName + '"')
5776
5777                    let mageCacheStorage = event.detail.data;
5778
5779                    if (mageCacheStorage !== null
5780                        && typeof mageCacheStorage[sectionName] !== 'undefined'
5781                        && typeof mageCacheStorage[sectionName].gtm_events !== 'undefined'
5782                        && eventId in mageCacheStorage[sectionName].gtm_events) {
5783                        delete mageCacheStorage[sectionName].gtm_events[eventId];
5784                    }
5785
5786                    window.localStorage.setItem('mage-cache-storage', JSON.stringify(mageCacheStorage));
5787                }
5788            }
5789        });
5790
5791        if (false === isEmpty(attributes)) {
5792            yireoGoogleTagManager2Pusher(attributes, 'dataLayer (initial js) [script-additions.phtml]');
5793        }
5794    });
5795</script>
vendor: 1 bytes, line 5795
5795
5796<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"fcf28e5364","applicationID":"95730697","transactionName":"YFEAYkBRWEdZUkFaDVkbI1VGWVlaF1JYQE1HVQVTHUZfUU8=","queueTime":0,"applicationTime":396,"atts":"TBYDFAhLS0k=","errorBeacon":"bam.nr-data.net","agent":""}</script>
5796</body>
5797</html>

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.