{"version":3,"sources":["prebid.js","iiq.js","pricing.js","https://adncdn.net/0"],"names":["userGEO","detectDevice","ua","navigator","userAgent","test","async","getUserGeo","localStorage","getItem","res","fetch","method","then","ok","Error","status","json","data","setItem","e","console","log","window","USER_GEO","document","URL_PATHS_BLACKLIST","Object","freeze","USERS_IPV4_ADDRESS","USERS_IPV6_ADDRESS","LI_BIDDERS","LI_PBS_BIDDERS","liEidPermissions","source","bidders","undefined","liModuleEnabled","Math","random","liTreatmentRate","liveIntentUserIds","liAuctionsEnriched","liSetTargeting","enriched","googletag","cmd","push","value","pubads","setTargeting","liMeasurementInstalled","adsConfig","id","size","position","isLazyLoaded","refreshIteration","sizeMapping","desktop","tablet","mobile","refreshTime","biddersWhiteList","appnexus","magnite","msft","pubmatic","rubicon","openx","unruly","country","adagio","adyoulike","amx","anyclip","contxtful","conversant","criteo","exco","fluct","gamoshi","ix","kueezrtb","medianet","oms","onetag","pixfuture","programmaticx","richaudience","rise","seedtag","sharethrough","smartadserver","smilewanted","sovrn","sparteo","ssp_geniee","teads","underdogmedia","vidazoo","yandex","getCountry","ipInfo","ip","trim","includes","name","params","publisherId","distributorId","emailHash","ipv4","ipv6","requestedAttributesOverrides","uid2","bidswitch","index","thetradedesk","triplelift","zetassp","nexxen","storage","type","expires","initLiveIntentIds","getIpInfo","bidder","placement_id","cId","pId","cid","crid","tagid","unit","delDomain","siteId","networkId","tagId","org","zoneId","pubId","pid","supplyType","partnerId","currency","filter","toLowerCase","replace","bidderSettings","storageAllowed","adnimation","sonobi","taboola","bidderNames","endsWith","map","s2sBidders","s2sAliases","fromEntries","slice","GDPR_GEOS","needsGdpr","maxMs","Promise","resolve","start","Date","now","check","__tcfapi","setTimeout","isGdprRequired","pbjsConfig","s2sConfig","enabled","accountId","endpoint","syncEndpoint","timeout","extPrebid","aliases","priceGranularity","adServerCurrency","conversionRateFile","defaultRates","USD","EUR","ratesTTL","floors","enforcement","enforceJS","enforcePBS","floorDeals","bidAdjustment","skipRate","schema","fields","values","banner","native","video","default","gvlMapping","amxS2S","magniteS2S","riseS2S","kueezrtbS2S","adagioS2S","consentManagement","gdpr","cmpApi","defaultGdprScope","actionTimeout","usp","useBidCache","schain","validation","config","ver","complete","nodes","asi","sid","hp","userSync","iframeEnabled","auctionDelay","idPriority","filterSettings","iframe","userIds","notUse3P","refreshInSeconds","partner","ortb2","ext","prebid","eidpermissions","detectMissingSizes","aliasSyncEnabled","auctionOptions","suppressStaleRender","version","customer","realTimeData","dataProviders","waitForIt","adServerTargeting","gtag","dataLayer","arguments","pbjs","que","addEventListener","onImpressionViewable","setConfig","collapseDiv","_taboola","GA_ID","PREBID_TIMEOUT_MS","createScript","src","preCreate","scriptEl","querySelector","warn","attemptLoad","createElement","fetchPriority","defer","remove","head","appendChild","pathname","location","some","path","isBlacklistedUrl","all","handleSlotRenderEnded","removeEventListener","IntentIqObject","intentIq_2072952453","adnpbjs","callback","main","timeoutInMillis","ABTestingConfigurationSource","manualWinReportEnabled","domainName","host","vrBrowserBlackList","gamParameterName","onEvent","reportExternalWin","biddingPlatformId","partnerAuctionId","auctionId","bidderCode","prebidAuctionId","cpm","originalCpm","originalCurrency","placementId","adUnitCode","err","error","initIiq","catch","charset","ats","placementID","storageType","detectionType","urlParameter","cssSelectors","logging","adUnits","slotsMap","lazyLoader","constructor","margin","this","observer","IntersectionObserver","onIntersect","rootMargin","entries","forEach","entry","isIntersecting","cb","target","dataset","lazyCallback","unobserve","add","element","getBoundingClientRect","top","innerHeight","cbName","toString","observe","activeSlotIds","newPbjsAdUnits","viewportType","screen","width","event","slot","slotId","getSlotElementId","adUnitPath","getAdUnitPath","adUnit","timeoutMs","adUnitToRefresh","getSlots","at","targeting","slotEl","getElementById","runBids","refresh","message","refreshAd","collectAds","length","adsEl","querySelectorAll","adPath","adpath","sizes","slotBidders","seedtagMap","ATF","adUnitId","placement","Content","BTF","Side","Sticky","tag","SideATF","seedtagParams","STANDARD_SIZES","prebidSizes","viewport","Array","isArray","standardSizes","every","w","h","isNative","sw","sh","hasOnlyStandardSizes","bids","code","mediaTypes","refreshUserIds","submoduleNames","args","au","b","userIdAsEids","eid","uids","uid","provider","setBidderConfig","pbjsBids","requestBids","adUnitCodes","bidsBackHandler","setTargetingForGPTAsync","runPrebidBids","allSettled","promise","ms","race","_","reject","createNativeCmd","onload","performance","mark","setAttribute","destroyNativeCmd","footerEl","innerHTML","createNative","createAd","slotName","addSize","build","defineSlot","defineSizeMapping","addService","intent_iq_group","pbjsAdUnit","find","addAdUnits","init","enableServices","display","getConfig","disableInitialLoad","createAdCmd","destroyAd","destroySlots","idx","indexOf","splice","removeAttribute","parentElement","destroyAdCmd","cached","JSON","parse","url","stringify","removeItem","adn","destroyNative","createInterstitial","createInterstitialCmd","observeSlots","handleAdded","node","getAttribute","handleRemoved","isAdSlot","hasAttribute","nodeList","from","nodeType","Node","ELEMENT_NODE","flatMap","concat","MutationObserver","mutations","mutation","addedNodes","removedNodes","attributeName","isStyleChanged","oldStyle","oldValue","newStyle","isVisibilityChanged","style","getComputedStyle","isDisplayed","isVisible","visibility","subtree","childList","attributes","attributeFilter","attributeOldValue","defineOutOfPageSlot","enums","OutOfPageFormat","INTERSTITIAL","callbacks","interval","setInterval","readyState","clearInterval","onDomReady","elements","addCloseButton","stickyBannerSizeDiv","el","innerText","right","height","color","borderRadius","backgroundColor","cursor","fontSize","textAlign","classList","onclick","append","stickyBannerParent","justifyContent","bottom","zIndex","stickyBanner","onpage","getElementsByTagName","flag","isEmpty","createStickyBanner","divElement","scriptElement","text","parentNode","insertBefore","href","createTaboolaRELATEDFeed","createTaboolaThumbnailsFeed","DIV_ID","SCRIPT_PATH","container","insertAdjacentElement","s","protocol","injectVDOPlayer","queue","sending","TRACKED_PREBID_EVENTS","detectDeviceType","detectOsType","getDaypart","hour","getHours","sendNext","shift","headers","body","trackEvent","eventType","auctionData","bidId","bidderRequestId","getSizes","getWidth","getHeight","price","netRevenue","responseTime","timeToRespond","mediaType","creativeId","creative_id","dealId","floorPrice","floorData","floorMin","floor","floorCurrency","bidCount","bidderRequests","winningBid","bidRank","errorCode","errorMessage","rawEventData","extractUnifiedBidData","consolidatedEvent","timestamp","domain","hostname","deviceType","osType","geoCountry","daypart","referrer","pageTitle","title","pageUrl","pageViewport","innerWidth","sessionId","getOrCreateSessionId","pageLoadTime","connectionType","connection","effectiveType","adnqueue","adnSessionId","substr","hookPrebidEvents"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5HA;ACAA;ACCA,IAAIA,QAu+DJ,SAASC,eACL,MAAMC,EAAKC,UAAUC,UACrB,MAAI,OAAOC,KAAKH,GAAY,SACxB,SAASG,KAAKH,GAAY,SACvB,SACT,CAEFI,eAAeC,aACX,GAAGC,aAAaC,QAAQ,UACpB,OAAOD,aAAaC,QAAQ,UAChC,IACI,IAAIC,EAYJ,aAXMC,MAAM,8EAA+E,CACvFC,OAAQ,QAEXC,KAAMH,IACP,IAAKA,EAAII,GAAI,MAAM,IAAIC,MAAM,QAAQL,EAAIM,UACzC,OAAON,EAAIO,SAEVJ,KAAMK,IACPR,EAAMQ,EAAc,UAEpBV,aAAaW,QAAQ,SAAST,GACvBA,CACX,CAAC,MAAMU,GAEH,OADAC,QAAQC,IAAIF,GACRG,OAAOC,SAAiBD,OAAOC,UAEnCH,QAAQC,IAAI,gBACL,KACX,CACJ,EArgEA,eAAgBC,EAAQE,GAyHtB,MAAMC,EAAsBC,OAAOC,OAAO,CAGxC,kFAoBF,IAAIC,EACAC,EAGJ,MAAMC,EAAa,CAAC,UAAW,UAAW,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","file":"p0FNqtIR4Q","sourcesContent":[null,null,null,"// Last updated: 2026-11-03T14:18:24.677Z by Matt\r\nlet userGEO;\r\n(async function(window, document) {\r\n\r\nconst mapping = {\r\n  \"Ancient_Origins.net/Article-Pages-Top-Banner\": {\r\n    desktop: \"Ancient_D10/ATF\",\r\n    mobile: \"Ancient_D10/ATF_M\"\r\n  },\r\n  \"Ancient_Origins.net/Ancient_Origins_Native\": \"Ancient_D10/InContent_3\",\r\n  \"Ancient_Origins.net/Article Page Right Middle Bottom Extra Above 300x250\": \"Ancient_D10/InContent_2\",\r\n  \"Ancient_Origins.net/Article-Pages-Below-Pic\": \"Ancient_D10/InContent_1\",\r\n  \"Ancient_Origins.net/ArticlePageBottomRightResponsive_2\": \"Ancient_D10/Sidebar_Right_2\",\r\n  \"Ancient_Origins.net/Article_Pages_Right_Bottom_160x600\": \"Ancient_D10/Sidebar_Right_1\"\r\n}\r\n\r\nfunction remapFloors(model, device=\"desktop\") {\r\n  const m = JSON.parse(JSON.stringify(model))\r\n  const v = m.modelGroups?.[0]?.values || {}\r\n  const nv = {}\r\n  for (const [k, val] of Object.entries(v)) {\r\n    const [slot, ...rest] = k.split('|')\r\n    const parts = slot.split('/')\r\n    if (parts.length < 3) { nv[k]=val; continue }\r\n    const tail = parts.slice(2).join('/')\r\n    const rule = mapping[tail]\r\n    let newTail\r\n    if (rule) newTail = typeof rule === 'string' ? rule : (rule[device] || rule.desktop)\r\n    else newTail = tail.replace(/^Ancient_Origins\\.net\\//, 'Ancient_D10/')\r\n    const newSlot = `/${parts[1]}/${newTail}`\r\n    nv[[newSlot, ...rest].join('|')] = val\r\n  }\r\n  m.modelGroups[0].values = nv\r\n  return m\r\n}\r\n\r\nfunction detectDevice() {\r\n    const ua = navigator.userAgent;\r\n    if (/Mobi/.test(ua)) return 'mobile';\r\n    if (/Tablet/.test(ua)) return 'tablet';\r\n    return 'desktop';\r\n  }\r\n\r\nasync function getUserGeo() {\r\n    if(localStorage.getItem(\"adngeo\"))\r\n        return localStorage.getItem(\"adngeo\")\r\n    try{\r\n        let res\r\n        await fetch('https://d2dvy74lyjayxz.cloudfront.net/?key=7c4d73767e64472ea502eacdbc47386b', {\r\n            method: 'GET',\r\n        })\r\n        .then((res) => {\r\n        if (!res.ok) throw new Error(`HTTP ${res.status}`);\r\n        return res.json();\r\n        })\r\n        .then((data) => {\r\n        res = data[\"country\"]\r\n        })\r\n        localStorage.setItem(\"adngeo\",res)\r\n        return res\r\n    }catch(e){\r\n        console.log(e);\r\n        if (window.USER_GEO) return window.USER_GEO;\r\n        // Option 2: fallback to 'US'\r\n        console.log(\"Returning US\");\r\n        return 'US';\r\n    }\r\n}\r\n\r\nfunction buildPrebidFloors(dynArr) {\r\n    const hour = new Date().getHours();\r\n    const device = detectDevice();\r\n    const geo = getUserGeo();\r\n    userGEO = geo;\r\n    const model = dynArr[hour].model;\r\n    const rawValues = model.modelGroups[0].values;\r\n    const filteredValues = {};\r\n\r\n    Object.entries(rawValues).forEach(([key, value]) => {\r\n        const parts = key.split('|');\r\n        // key: [gptSlot, size, mediaType, device, geo]\r\n        if (parts[3] === device && parts[4] === geo) {\r\n        // Only allowed Prebid fields:\r\n        const prebidKey = [parts[0], parts[1], parts[2]].join('|');\r\n        filteredValues[prebidKey] = value;\r\n        }\r\n    });\r\n    const res  ={\r\n        floorProvider: model.floorProvider,\r\n        currency: model.currency,\r\n        floorsSchemaVersion: model.floorsSchemaVersion,\r\n        modelGroups: [{\r\n        modelWeight: model.modelGroups[0].modelWeight,\r\n        modelTimestamp: model.modelGroups[0].modelTimestamp,\r\n        modelVersion: model.modelGroups[0].modelVersion,\r\n        schema: { fields: [\"gptSlot\", \"size\", \"mediaType\"] },\r\n        values: filteredValues,\r\n        default: model.modelGroups[0].default\r\n        }],\r\n        skipRate: model.skipRate\r\n    }\r\n    console.log(\"floorsRes\",res)\r\n    // Compose Prebid-compliant floor model\r\n    return {\r\n        floorProvider: model.floorProvider,\r\n        currency: model.currency,\r\n        floorsSchemaVersion: model.floorsSchemaVersion,\r\n        modelGroups: [{\r\n        modelWeight: model.modelGroups[0].modelWeight,\r\n        modelTimestamp: model.modelGroups[0].modelTimestamp,\r\n        modelVersion: model.modelGroups[0].modelVersion,\r\n        schema: { fields: [\"gptSlot\", \"size\", \"mediaType\"] },\r\n        values: filteredValues,\r\n        default: model.modelGroups[0].default\r\n        }],\r\n        skipRate: model.skipRate\r\n    };\r\n  }\r\n\r\n  // ----------------------------------------------\r\n  // Configuration\r\n  // ----------------------------------------------\r\n\r\n  const URL_PATHS_BLACKLIST = Object.freeze([\r\n    // Add a list of URL paths to exclude 👇\r\n    // e.g. \"/path/to/page\"\r\n    \"/queen-warrior-and-symbol-forgotten-dynasty-powerful-matriarch-ahhotep-007238\"\r\n  ]);\r\n\r\n  // ----------------------------------------------\r\n  // HIRO / LiveIntent identity (Zeta Global)\r\n  // ----------------------------------------------\r\n  // Guide: \"INTEGRATION SETUP FOR HIRO Utilizing GAM\", steps 2, 3, 4 and 7.\r\n  // The holdout is decided once per page load, BEFORE Prebid is configured: the control group never\r\n  // sees the LiveIntent module at all (adding it and removing it later still enriches auctions).\r\n  // Zeta issued a Distributor ID for this site, so the Publisher ID stays undefined (one or the other, never both).\r\n  const LI_PUBLISHER_ID = undefined;\r\n  const LI_DISTRIBUTOR_ID = 'did-00b9';\r\n  const LI_REPORTING_KEY = 'li-module-enabled'; // GAM key-value Zeta reads to split treated / control revenue\r\n  const LI_HOLDOUT_PERCENT = 5;               // tell Zeta if you change the 95/5 split\r\n  // Logged-in signals (step 4). The site has no reader login, so no email is passed; LiveRamp ATS below\r\n  // already scrapes email inputs for its own id. If a login is ever added, set this to the user's email\r\n  // (trimmed, lowercased, \"+tag\" stripped, dots stripped in Gmail prefixes) or its md5/sha1/sha256 hash.\r\n  const LOGGED_IN_USERS_EMAIL_OR_EMAIL_HASH = undefined;\r\n  // The user's originating IP comes from the ip-info call the wrapper already makes (see getIpInfo),\r\n  // split into v4 / v6 as the guide requires. Filled in once the lookup has returned, before setConfig.\r\n  let USERS_IPV4_ADDRESS;\r\n  let USERS_IPV6_ADDRESS;\r\n  // Bidders allowed to read the LiveIntent ids client-side (approved SSPs that run on this site, incl. their S2S aliases).\r\n  // LiveIntent's sample list, plus this wrapper's S2S aliases so the ids also reach Prebid Server.\r\n  const LI_BIDDERS = ['rubicon', 'magnite', 'magniteS2S', 'bidswitch', 'vidazoo', 'vidazooS2S', 'sharethrough', 'pubmatic', 'ix', 'ixS2S', 'ttd', 'grid', 'triplelift', 'medianet', 'sovrn', 'sovrnS2S', 'openx', 'unruly', 'unrulyS2S', 'zeta_global_ssp'];\r\n  // Prebid Server: which bidders may receive each id source (step 7).\r\n  const LI_PBS_BIDDERS = ['rubicon', 'magnite', 'pubmatic', 'ix', 'ttd', 'grid', 'medianet', 'sovrn', 'zeta_global_ssp', 'triplelift', 'sharethrough', 'unruly'];\r\n  const liEidPermissions = Object.freeze([\r\n    { source: 'liveintent.com', bidders: LI_PBS_BIDDERS },\r\n    { source: 'uidapi.com', bidders: LI_PBS_BIDDERS },\r\n    { source: 'liveintent.indexexchange.com', bidders: ['ix'] },\r\n    { source: 'rubiconproject.com', bidders: ['rubicon', 'magnite'] },\r\n    { source: 'media.net', bidders: ['medianet'] },\r\n    { source: 'bidswitch.net', bidders: ['grid'] },\r\n    { source: 'openx.net', bidders: ['openx'] },\r\n    { source: 'sovrn.liveintent.com', bidders: ['sovrn'] },\r\n    { source: 'zeta-ssp.liveintent.com', bidders: ['zeta_global_ssp'] },\r\n    { source: 'liveintent.triplelift.com', bidders: ['triplelift'] },\r\n    { source: 'sharethrough.com', bidders: ['sharethrough'] },\r\n    { source: 'liveintent.unrulymedia.com', bidders: ['unruly'] }\r\n  ]);\r\n\r\n  if (window.liModuleEnabled === undefined) {\r\n    window.liModuleEnabled = Math.random() * 100 >= LI_HOLDOUT_PERCENT;\r\n    window.liTreatmentRate = (100 - LI_HOLDOUT_PERCENT) / 100;\r\n  }\r\n  const liveIntentUserIds = []; // filled by initLiveIntentIds() once the IP lookup has returned\r\n  function initLiveIntentIds(ipInfo) {\r\n    if (!window.liModuleEnabled) return; // control group: no LiveIntent config at all\r\n    const ip = typeof ipInfo?.ip === 'string' ? ipInfo.ip.trim() : '';\r\n    if (/^\\d{1,3}(\\.\\d{1,3}){3}$/.test(ip)) USERS_IPV4_ADDRESS = ip;\r\n    else if (ip.includes(':')) USERS_IPV6_ADDRESS = ip;\r\n    liveIntentUserIds.push({\r\n        'name': 'liveIntentId',\r\n        'params': {\r\n          'publisherId': LI_PUBLISHER_ID,\r\n          'distributorId': LI_DISTRIBUTOR_ID,\r\n          'emailHash': LOGGED_IN_USERS_EMAIL_OR_EMAIL_HASH,\r\n          'ipv4': USERS_IPV4_ADDRESS,\r\n          'ipv6': USERS_IPV6_ADDRESS,\r\n          'requestedAttributesOverrides': { 'uid2': true, 'bidswitch': true, 'medianet': true, 'magnite': true, 'pubmatic': true, 'index': true, 'openx': true, 'thetradedesk': true, 'sovrn': true, 'vidazoo': true, 'sharethrough': true, 'triplelift': true, 'zetassp': true, 'nexxen': true }\r\n        },\r\n        'bidders': LI_BIDDERS,\r\n        // Same storage as LiveIntent's sample, which Amazon TAM's passthrough also reads.\r\n        'storage': { 'type': 'html5', 'name': '__tamLIResolveResult', 'expires': 1 }\r\n    });\r\n  }\r\n\r\n  // Measurement (LiveIntent sample v1.5.6): every slot carries li-module-enabled = t1|t0 (treated / control),\r\n  // suffixed -e1|-e0 once an auction shows whether its bids actually carried a LiveIntent id.\r\n  const liAuctionsEnriched = {};\r\n  function liSetTargeting(enriched) {\r\n    window.googletag.cmd.push(() => {\r\n      let value = window.liModuleEnabled ? 't1' : 't0';\r\n      if (enriched !== undefined) value += enriched ? '-e1' : '-e0';\r\n      window.googletag.pubads().setTargeting(LI_REPORTING_KEY, value);\r\n    });\r\n  }\r\n  liSetTargeting(); // t1 / t0 on every slot from the first request, before any auction has run\r\n  let liMeasurementInstalled = false;\r\n  function installLiveIntentMeasurement(pbjs) {\r\n    if (liMeasurementInstalled) return;\r\n    liMeasurementInstalled = true;\r\n    if (window.liModuleEnabled) pbjs.refreshUserIds({ submoduleNames: ['liveIntentId'] });\r\n    pbjs.onEvent('auctionInit', (args) => {\r\n      const enriched = !!args.adUnits?.some((au) =>\r\n        au.bids?.some((b) =>\r\n          b.userIdAsEids?.some((eid) => eid.source === 'liveintent.com' || eid.uids?.some((uid) => uid.ext?.provider === 'liveintent.com')),\r\n        ),\r\n      );\r\n      liAuctionsEnriched[args.auctionId] = enriched;\r\n      liSetTargeting(enriched);\r\n    });\r\n  }\r\n\r\n  const adsConfig = Object.freeze({\r\n    \"/339474670,423516288/Ancient_D10/ATF\": {\r\n        \"id\": \"/339474670,423516288/Ancient_D10/ATF\",\r\n        \"size\": [\r\n            [970, 250]\r\n        ],\r\n        \"position\": \"ATF\",\r\n        \"isLazyLoaded\": false,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [970, 250]\r\n            ],\r\n            \"tablet\": [],\r\n            \"mobile\": []\r\n        },\r\n        \"refreshTime\": 30000\r\n    },\r\n    \"/339474670,423516288/Ancient_D10/BTF_M_1\": {\r\n        \"id\": \"/339474670,423516288/Ancient_D10/BTF_M_1\",\r\n        \"size\": [\r\n            [320, 50],\r\n            [320, 100],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"BTF\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n            ],\r\n            \"tablet\": [\r\n            ],\r\n            \"mobile\": [\r\n                [320, 50],\r\n                [320, 100]\r\n            ]\r\n        },\r\n        \"refreshTime\": 30000\r\n    },\r\n    \"/339474670,423516288/Ancient_D10/sidebar_right_2\": {\r\n        \"id\": \"/339474670,423516288/Ancient_D10/sidebar_right_2\",\r\n        \"size\": [\r\n            [300, 600]\r\n        ],\r\n        \"position\": \"Side\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [300, 600]\r\n            ],\r\n            \"tablet\": [\r\n                [300, 600]\r\n            ],\r\n            \"mobile\": []\r\n        },\r\n        \"refreshTime\": 30000\r\n    },\r\n    \"/339474670,423516288/Ancient_D10/Sticky_Footer\": {\r\n        \"id\": \"/339474670,423516288/Ancient_D10/Sticky_Footer\",\r\n        \"size\": [\r\n            [320, 50],\r\n            [320, 100],\r\n            [728, 90],\r\n            [970, 90]\r\n        ],\r\n        \"position\": \"Sticky\",\r\n        \"isLazyLoaded\": false,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [728, 90],\r\n                [970, 90]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90]\r\n            ],\r\n            \"mobile\": [\r\n                [320, 50],\r\n            ]\r\n        },\r\n        \"refreshTime\": 30000\r\n    },\r\n    \"/339474670,423516288/Ancient_D10/BTF_1\": {\r\n        \"id\": \"/339474670,423516288/Ancient_D10/BTF_1\",\r\n        \"size\": [\r\n            [970, 250],\r\n            [336, 280],\r\n            [728, 90],\r\n            [300, 250],\r\n            [320, 50],\r\n            [320, 100]\r\n        ],\r\n        \"position\": \"BTF\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [970, 250]\r\n            ],\r\n            \"tablet\": [\r\n                [728, 90]\r\n                ],\r\n            \"mobile\": [\r\n            ]\r\n        },\r\n        \"refreshTime\": 30000\r\n    },\r\n    \"/339474670,423516288/Ancient_D10/incontent_2\": {\r\n        \"id\": \"/339474670,423516288/Ancient_D10/incontent_2\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [300, 300],\r\n            [336, 280]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [300, 250],\r\n                [300, 300],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [300, 250],\r\n                [300, 300],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [300, 300],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 30000\r\n    },\r\n    \"/339474670,423516288/Ancient_D10/sidebar_right_1\": {\r\n        \"id\": \"/339474670,423516288/Ancient_D10/sidebar_right_1\",\r\n        \"size\": [\r\n            [300, 600]\r\n        ],\r\n        \"position\": \"Side\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [300, 600]\r\n            ],\r\n            \"tablet\": [\r\n                [300, 600]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 600],\r\n                [300, 250]\r\n            ]\r\n        },\r\n        \"refreshTime\": 30000\r\n    },\r\n    \"/339474670,423516288/Ancient_D10/ATF_M\": {\r\n        \"id\": \"/339474670,423516288/Ancient_D10/ATF_M\",\r\n        \"size\": [\r\n            [320, 50],\r\n            [320, 100],\r\n            [728, 90]\r\n        ],\r\n        \"position\": \"ATF\",\r\n        \"isLazyLoaded\": false,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n            ],\r\n            \"tablet\": [\r\n            ],\r\n            \"mobile\": [\r\n                [320, 50],\r\n                [320, 100]\r\n            ]\r\n        },\r\n        \"refreshTime\": 30000\r\n    },\r\n    \"/339474670,423516288/Ancient_D10/incontent_1\": {\r\n        \"id\": \"/339474670,423516288/Ancient_D10/incontent_1\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [300, 300],\r\n            [336, 280]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [300, 250],\r\n                [300, 300],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [300, 250],\r\n                [300, 300],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [300, 300],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 30000\r\n    },\r\n    \"/339474670,423516288/Ancient_D10/incontent_3\": {\r\n        \"id\": \"/339474670,423516288/Ancient_D10/incontent_3\",\r\n        \"size\": [\r\n            [300, 250],\r\n            [300, 300],\r\n            [336, 282]\r\n        ],\r\n        \"position\": \"Content\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [300, 250],\r\n                [300, 300],\r\n                [336, 280]\r\n            ],\r\n            \"tablet\": [\r\n                [300, 250],\r\n                [300, 300],\r\n                [336, 280]\r\n            ],\r\n            \"mobile\": [\r\n                [300, 250],\r\n                [300, 300],\r\n                [336, 280]\r\n            ]\r\n        },\r\n        \"refreshTime\": 30000\r\n    },\r\n    \"/339474670,423516288/Ancient_D10/sidebar_right_3\": {\r\n        \"id\": \"/339474670,423516288/Ancient_D10/sidebar_right_3\",\r\n        \"size\": [\r\n            [300, 600]\r\n        ],\r\n        \"position\": \"Side\",\r\n        \"isLazyLoaded\": true,\r\n        \"refreshIteration\": 0,\r\n        \"sizeMapping\": {\r\n            \"desktop\": [\r\n                [300, 600]\r\n            ],\r\n            \"tablet\": [\r\n                [300, 600]\r\n            ],\r\n            \"mobile\": [\r\n            ]\r\n        },\r\n        \"refreshTime\": 30000\r\n    }\r\n});\r\n\r\n  const biddersWhiteList = Object.freeze({\r\n    \"appnexus\":[\"US\",\"GB\",\"CA\",\"IL\",\"JP\",\"AU\",\"NZ\",\"IN\",\"BR\",\"ID\",\"EG\",\"AE\",\"SA\",\"AR\",\"CL\",\"MY\",\"PH\",\"PT\",\"HK\",\"SG\",\"NL\",\"BE\",\"IE\",\"NO\",\"SE\",\"FI\",\"DK\",\"CH\",\"DE\",\"TR\",\"PL\",\"RO\",\"CZ\",\"ZA\"],\r\n    \"magnite\":[\"US\",\"GB\",\"IL\",\"PS\",\"TR\",\"CA\",\"DE\",\"GH\",\"ZA\",\"FR\",\"ES\",\"IT\",\"AU\",\"NZ\",\"IN\",\"MX\",\"PL\",\"EC\",\"KR\",\"UA\",\"SA\",\"NL\",\"BE\",\"BD\",\"AE\",\"SG\",\"AM\",\"JP\",\"BR\",\"NG\",\"TH\",\"MY\",\"HK\",\"UZ\",\"SE\",\"AT\",\"PH\",\"VN\",\"CL\",\"IE\",\"CH\",\"NO\",\"FI\",\"DK\",\"PT\"],\r\n    \"msft\":[\"US\",\"GB\",\"CA\",\"IL\",\"JP\",\"AU\",\"NZ\",\"IN\",\"BR\",\"ID\",\"EG\",\"AE\",\"SA\",\"AR\",\"CL\",\"MY\",\"PH\",\"PT\",\"HK\",\"SG\",\"NL\",\"BE\",\"IE\",\"NO\",\"SE\",\"FI\",\"DK\",\"CH\",\"DE\",\"TR\",\"PL\",\"RO\",\"CZ\",\"ZA\"],\r\n    \"pubmatic\":[\"US\",\"CA\",\"GB\",\"IE\",\"AU\",\"NZ\",\"DE\",\"AT\",\"CH\",\"NL\",\"BE\",\"NO\",\"SE\",\"FI\",\"DK\",\"IL\",\"PR\"],\r\n    \"rubicon\":[\"US\",\"GB\",\"IL\",\"PS\",\"TR\",\"CA\",\"DE\",\"GH\",\"ZA\",\"FR\",\"ES\",\"IT\",\"AU\",\"NZ\",\"IN\",\"MX\",\"PL\",\"EC\",\"KR\",\"UA\",\"SA\",\"NL\",\"BE\",\"BD\",\"AE\",\"SG\",\"AM\",\"JP\",\"BR\",\"NG\",\"TH\",\"MY\",\"HK\",\"UZ\",\"SE\",\"AT\",\"PH\",\"VN\",\"CL\",\"IE\",\"CH\",\"NO\",\"FI\",\"DK\",\"PT\"],\r\n    \"openx\":[\"US\",\"CA\"],\r\n    \"unruly\":[\"US\",\"GB\"],\r\n  });\r\n\r\n  const biddersBlackList = Object.freeze({\r\n    \"33across\":[\"GH\",\"GB\",\"CA\",\"DE\",\"NL\",\"IL\",\"SG\",\"AU\",\"IT\",\"FR\"],\r\n    \"adagio\":[\"FR\",\"IL\",\"GB\",\"AU\",\"BE\",\"CH\",\"PH\",\"DE\",\"CN\",\"SG\"],\r\n    \"adyoulike\":[\"IL\",\"CA\",\"CN\",\"SG\",\"GB\",\"AU\",\"ZA\",\"FR\",\"IN\",\"PK\"],\r\n    \"amx\":[\"NL\",\"ID\",\"IT\",\"PH\",\"CN\",\"ES\",\"BE\",\"SO\",\"CH\",\"BR\"],\r\n    \"anyclip\":[\"GH\",\"US\",\"GB\",\"IT\",\"CA\",\"FR\",\"AT\",\"BR\",\"DE\",\"DK\"],\r\n    \"appnexus\":[\"DE\",\"CA\",\"GB\",\"FR\",\"ID\",\"AU\",\"PH\",\"BR\",\"TH\",\"SG\"],\r\n    \"contxtful\":[\"IL\",\"IN\",\"GB\",\"ID\",\"SG\",\"KR\",\"CN\",\"PH\",\"DE\",\"TH\"],\r\n    \"conversant\":[\"IL\",\"IN\",\"KR\",\"PH\",\"TH\",\"JP\",\"VN\",\"PK\",\"CN\",\"EG\"],\r\n    \"criteo\":[\"CN\",\"BD\",\"BY\",\"KZ\",\"AR\",\"MA\",\"CY\",\"CO\",\"BG\",\"CI\"],\r\n    \"exco\":[\"US\",\"SG\",\"GB\",\"DE\",\"CA\",\"AU\",\"IT\",\"PL\",\"CN\",\"BR\"],\r\n    \"fluct\":[\"US\",\"CA\",\"HK\",\"JP\",\"SG\",\"GB\",\"AU\",\"DE\",\"CN\",\"TW\"],\r\n    \"gamoshi\":[\"US\",\"GB\",\"CA\",\"DE\",\"AU\",\"PH\",\"IT\",\"SG\",\"CN\",\"MY\"],\r\n    \"ix\":[\"CN\",\"PL\",\"IE\",\"FI\",\"DK\",\"AT\",\"GR\",\"AR\",\"MA\",\"PT\"],\r\n    \"kueezrtb\":[\"IT\",\"CN\",\"ES\",\"BE\",\"UA\",\"PH\",\"CH\",\"TH\",\"SE\",\"BY\"],\r\n    \"magnite\":[\"NL\",\"IT\",\"CN\",\"BE\",\"SO\",\"CH\",\"ES\",\"UA\",\"BR\",\"PL\"],\r\n    \"medianet\":[\"CN\",\"CH\",\"MY\",\"UA\",\"VN\",\"BD\",\"AE\",\"PK\",\"TR\",\"BY\"],\r\n    \"msft\":[\"CN\",\"SO\",\"SG\",\"UA\",\"PH\",\"BY\",\"KZ\",\"KE\",\"IN\",\"IT\"],\r\n    \"oms\":[\"SG\",\"IN\",\"IL\",\"NL\",\"ID\",\"KR\",\"IT\",\"PH\",\"TH\",\"CH\"],\r\n    \"onetag\":[\"CN\",\"PL\",\"BD\",\"GR\",\"SE\",\"PK\",\"CY\",\"RO\",\"AT\",\"PT\"],\r\n    \"openx\":[\"DE\",\"NL\",\"CN\",\"IT\",\"BE\",\"SO\",\"JP\",\"ES\",\"PH\",\"SE\"],\r\n    \"pixfuture\":[\"DE\",\"CN\",\"AU\",\"FR\",\"SG\",\"TH\",\"PH\",\"ID\",\"BR\",\"JP\"],\r\n    \"programmaticx\":[\"FR\",\"SG\",\"IL\",\"GB\",\"ID\",\"IN\",\"KR\",\"DE\",\"PH\",\"JP\"],\r\n    \"richaudience\":[\"IN\",\"GB\",\"CN\",\"PK\",\"DE\",\"BD\",\"BR\",\"ZA\",\"FR\",\"TW\"],\r\n    \"rise\":[\"FR\",\"SG\",\"IN\",\"GB\",\"DE\",\"ID\",\"AU\",\"PH\",\"KR\",\"CN\"],\r\n    \"rubicon\":[\"IL\",\"CA\",\"MY\",\"GH\",\"SG\",\"AU\",\"PR\",\"GB\",\"CN\",\"DE\"],\r\n    \"seedtag\":[\"CN\",\"PH\",\"NG\",\"IN\",\"NO\",\"AT\",\"MA\",\"DK\",\"MY\",\"CI\"],\r\n    \"sharethrough\":[\"FR\",\"SG\",\"IL\",\"GB\",\"DE\",\"BE\",\"CH\",\"BR\",\"NL\",\"IT\"],\r\n    \"smartadserver\":[\"US\",\"SO\",\"GB\",\"IL\",\"CA\",\"KE\",\"SE\",\"NO\",\"NL\",\"CN\"],\r\n    \"smilewanted\":[\"DE\",\"ID\",\"CN\",\"PH\",\"NL\",\"SE\",\"IT\",\"TH\",\"CH\",\"ES\"],\r\n    \"sovrn\":[\"NL\",\"SG\",\"IT\",\"CN\",\"ES\",\"SE\",\"VN\",\"MY\",\"NG\",\"MX\"],\r\n    \"sparteo\":[\"CN\",\"PK\",\"BD\",\"RO\",\"FI\",\"CZ\",\"DZ\",\"NO\",\"HU\",\"DK\"],\r\n    \"ssp_geniee\":[\"IL\",\"GB\",\"DE\",\"NL\",\"ID\",\"IN\",\"KR\",\"IT\",\"CN\",\"ZA\"],\r\n    \"teads\":[\"CN\",\"CA\",\"SG\",\"IL\",\"AU\",\"GB\",\"FR\",\"TH\",\"DE\",\"PH\"],\r\n    \"underdogmedia\":[\"SO\",\"US\",\"CA\",\"ZA\",\"undefined\"],\r\n    \"unruly\":[\"IN\",\"ID\",\"DE\",\"AU\",\"PH\",\"KR\",\"CN\",\"SG\",\"TH\",\"JP\"],\r\n    \"vidazoo\":[\"FR\",\"SG\",\"GB\",\"IN\",\"ID\",\"DE\",\"PH\",\"CN\",\"SO\",\"TH\"],\r\n    \"yandex\":[\"IL\",\"US\",\"CA\",\"DE\",\"UA\",\"AU\",\"GB\",\"BG\",\"KZ\",\"LV\"]\r\n  });\r\n\r\n  const country = await getCountry();\r\n  initLiveIntentIds(await getIpInfo()); // same cached lookup as getCountry; must run before pbjsConfig is built\r\n\r\n  const isBidderAllowed = ({ bidder }) => {\r\n    const name = bidder?.toLowerCase().replace(/s2s$/, '');\r\n    const whiteOk = !biddersWhiteList[name] || biddersWhiteList[name].includes(country);\r\n    // const blackOk = !biddersBlackList[name] || !biddersBlackList[name].includes(country);\r\n    return whiteOk;\r\n  };\r\n\r\n  const bidders = ([\r\n    // {bidder: \"limelightDigital\",params: {host: \"ads-crfdle.adnimation.trading\",publisherId: \"431470254\",adUnitId: 383788357,adUnitType: \"banner\"}},\r\n    {bidder: \"msft\", params: {placement_id: 16168410}},\r\n    {bidder: \"vidazoo\", params: {cId: \"640af7e8a3aca06fc94e206c\", pId: \"59ac17c192832d0011283fe3\"}},\r\n    {bidder: \"kueezrtb\", params: {cId: \"670689f7966d12985884c54e\", pId: \"65lk7c192882r0011813fn9\"}},\r\n    // {bidder: \"triplelift\", params: {inventoryCode: \"Adnimation_RON_display_PB\"}},\r\n    {bidder: \"medianet\", params: {cid: \"8CUAID4GW\", crid: \"788465678\"}},\r\n    // {bidder: \"adyoulike\", params: {placement: \"8e41699b3ce694d76961524611614ac1\"}},\r\n    // {bidder: \"adyoulike\", params: {placement: \"3b2355218d4a138e6e6cff706513ec62\"}},\r\n    {bidder: \"sovrn\", params: {tagid: \"991626\"}},\r\n    // {bidder: \"ix\", params: {siteId: \"275780\"}},\r\n    {bidder: \"openx\", params: {unit: \"545650634\", delDomain: \"adnimation-d.openx.net\"}},\r\n    // {bidder: \"conversant\", params: {site_id: \"109206\"}},\r\n    // {bidder: \"33across\", params: {siteId: \"aQk3SgiYar6BWdaKlId8sQ\", productId: \"siab\"}},\r\n    // {bidder: \"sharethrough\", params: {pkey: \"KLJqNciRKeJ8KpuPLf8eEA1v\"}},\r\n    // {bidder: \"pubmatic\", params: {publisherId: \"166665\"}},\r\n    // {bidder: \"oms\", params: {publisherId: \"21045\"}},\r\n    {bidder: \"unruly\", params: {siteId: 233835}},\r\n    // {bidder: \"magnite\", params: {accountId: 24664, siteId: 430028, zoneId: 2458932}},\r\n    // {bidder: \"smartadserver\", params: {domain: \"https://prg.smartadserver.com\", networkId: 4318, siteId: 502452, pageId: 1567769, formatId: 111812}},\r\n    {bidder: \"equativ\", params: { networkId: 4318}},\r\n    {bidder: \"amx\", params: {tagId: \"YWRuaW1hdGlvbi5jb20\"}},\r\n    // {bidder: \"magniteS2S\", params: {accountId: 24664, siteId: 430028, zoneId: 3715268}},\r\n    {bidder: \"unrulyS2S\", params: {siteId: 233835}},\r\n    {bidder: \"vidazooS2S\", params: {cId: \"640af7e8a3aca06fc94e206c\", pId: \"59ac17c192832d0011283fe3\"}},\r\n    // {bidder: \"ixS2S\", params: {siteId: \"1170100\"}},\r\n    {bidder: \"medianet\", params: {cid: \"8CUAID4GW\", crid: \"788465678\"}},\r\n    {bidder: \"sovrnS2S\", params: {tagid: \"1270741\"}},\r\n    {bidder: \"amxS2S\", params: {tagId: \"YWRuaW1hdGlvbi5jb20\"}},\r\n    {bidder: \"rise\", params: {org: \"67dae7b0eee76c00011b7cab\"}},\r\n    {bidder: \"riseS2S\", params: {org: \"67dae7b0eee76c00011b7cab\"}},\r\n    {bidder: 'smilewanted',params: {zoneId: 'adnimation.com_hb_display',}},\r\n    {bidder: 'onetag',params: {pubId: '62d98ebd4882fb0'}},\r\n    // {bidder: 'contxtful',params: {placementId: 'p101162'}},\r\n    // {bidder: 'anyclip', params: { publisherId: '98', supplyTagId: '140fe399-4b56-45b3-95d5-13f9e85208e7' }},\r\n    {bidder: 'sparteo', params: {networkId: '2b124411-dc3b-4083-998e-84c8175f32cf' }},\r\n    // {bidder: \"programmaticX\", params: {cId: \"68b7586707e74665e7350267\", pId: \"87ac37v189832w0572283vi3\"}}, Removed by Request from ProgramaticX 7/22/26\r\n    // {bidder: \"sonobi\", params: { placement_id: \"0013282a62315f025303\" }},\r\n    // {bidder: \"programmaticX\", params: {cId: \"68b7586707e74665e7350267\", pId: \"87ac37v189832w0572283vi3\"}},\r\n    // {bidder: 'exco', params: { accountId: '2070359406', publisherId: '001Qw00000QhoqbIAB', tagId: '1462386789'}},\r\n    // {bidder: \"gamoshi\", params: {supplyPartnerId: 27935}},\r\n    {bidder: 'richaudience', params: {\"pid\":\"kqmqoMTrce\", \"supplyType\":\"site\"}},\r\n    // {bidder: \"adagio\", params: {\"organizationId\": \"1570\", \"site\": \"ancient-origins-net\", \"placement\": \"ancient-origins-ros\"}},\r\n    {bidder: \"ex_geniee\", params: {partnerId: 38509, currency: 'USD'}},\r\n    {bidder: \"adnimation\", params: {cId: \"6a05a0dccd19709c3f9fc14c\", pId: \"67wc13i392832d0041613hm9\"}},\r\n    {bidder: \"adnimationS2S\", params: {cId: \"6a2acd7005c73231e738ecdf\", pId: \"67wc13i392832d0041613hm9\"}},      \r\n    // {bidder: 'pixfuture', params: {pix_id: \"64089\"}},         \r\n\r\n  ]).filter(isBidderAllowed);\r\n\r\n  const bidderSettings = Object.freeze({\r\n    \"33across\": { \"storageAllowed\": true },\r\n    \"adagio\": { \"storageAllowed\": true },\r\n    \"adnimation\": { \"storageAllowed\": true },\r\n    \"adyoulike\": { \"storageAllowed\": true },\r\n    \"amx\": { \"storageAllowed\": true },\r\n    \"anyclip\": { \"storageAllowed\": true },\r\n    \"appnexus\": { \"storageAllowed\": true },\r\n    \"contxtful\": { \"storageAllowed\": true },\r\n    \"conversant\": { \"storageAllowed\": true },\r\n    \"criteo\": { \"storageAllowed\": true },\r\n    \"exco\": { \"storageAllowed\": true },\r\n    \"fluct\": { \"storageAllowed\": true },\r\n    \"gamoshi\": { \"storageAllowed\": true },\r\n    \"ix\": { \"storageAllowed\": true },\r\n    \"kueezrtb\": { \"storageAllowed\": true },\r\n    \"magnite\": { \"storageAllowed\": true },\r\n    \"medianet\": { \"storageAllowed\": true },\r\n    \"msft\": { \"storageAllowed\": true },\r\n    \"oms\": { \"storageAllowed\": true },\r\n    \"onetag\": { \"storageAllowed\": true },\r\n    \"openx\": { \"storageAllowed\": true },\r\n    \"pixfuture\": { \"storageAllowed\": true },\r\n    \"programmaticx\": { \"storageAllowed\": true },\r\n    \"pubmatic\": { \"storageAllowed\": true },\r\n    \"richaudience\": { \"storageAllowed\": true },\r\n    \"rise\": { \"storageAllowed\": true },\r\n    \"rubicon\": { \"storageAllowed\": true },\r\n    \"seedtag\": { \"storageAllowed\": true },\r\n    \"sharethrough\": { \"storageAllowed\": true },\r\n    \"smartadserver\": { \"storageAllowed\": true },\r\n    \"smilewanted\": { \"storageAllowed\": true },\r\n    \"sonobi\": { \"storageAllowed\": true },\r\n    \"sovrn\": { \"storageAllowed\": true },\r\n    \"sparteo\": { \"storageAllowed\": true },\r\n    \"ssp_geniee\": { \"storageAllowed\": true },\r\n    \"taboola\": { \"storageAllowed\": true },\r\n    \"teads\": { \"storageAllowed\": true },\r\n    \"underdogmedia\": { \"storageAllowed\": true },\r\n    \"unruly\": { \"storageAllowed\": true },\r\n    \"vidazoo\": { \"storageAllowed\": true },\r\n    \"yandex\": { \"storageAllowed\": true },\r\n  });\r\n\r\nconst bidderNames = bidders.filter(({bidder}) => !bidder.endsWith('S2S')).map(({bidder}) => bidder);\r\n  const s2sBidders = bidders.filter(({bidder}) => bidder.endsWith('S2S')).map(({bidder}) => bidder);\r\n  const s2sAliases = Object.fromEntries(s2sBidders.map(bidder => [bidder, bidder.slice(0, -3)]));\r\n\r\n  const GDPR_GEOS = Object.freeze(['AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR','DE','GR','HU','IE','IT','LV','LT','LU','MT','NL','PL','PT','RO','SK','SI','ES','SE','IS','LI','NO','GB','CH']);\r\n  const CMP_WAIT_MS = 3000;\r\n  function waitForTcfApi(maxMs){return new Promise((resolve)=>{const start=Date.now();(function check(){if(typeof window.__tcfapi==='function')return resolve(true);if(Date.now()-start>=maxMs)return resolve(false);setTimeout(check,50);})();});}\r\n  async function isGdprRequired(country){const hasCmp=await waitForTcfApi(CMP_WAIT_MS);return hasCmp||GDPR_GEOS.includes(country);}\r\n  const needsGdpr = await isGdprRequired(await getCountry());\r\n\r\n  const pbjsConfig = Object.freeze({\r\n    's2sConfig': {\r\n      'enabled': true,\r\n      'accountId': '1001',\r\n      'bidders': s2sBidders,\r\n      'endpoint': 'https://adnpbs.com/openrtb2/auction',\r\n      'syncEndpoint': 'https://adnpbs.com/cookie_sync',\r\n      'timeout': 1500,\r\n      'extPrebid': {\r\n        'aliases': s2sAliases\r\n      }\r\n    },\r\n    'priceGranularity': 'high',\r\n    'currency': {\r\n        'adServerCurrency': 'USD',\r\n        'conversionRateFile': 'https://cdn.jsdelivr.net/gh/prebid/currency-file@1/latest.json',\r\n        'defaultRates': {\r\n        'USD': { 'EUR': 0.92, 'USD': 1 },\r\n        'EUR': { 'USD': 1.09, 'EUR': 1 }\r\n        },\r\n        'ratesTTL': 3600000\r\n    },\r\n    'floors': {\r\n      'enforcement': {\r\n        'enforceJS': true,\r\n        'enforcePBS': true,\r\n        'floorDeals': true,\r\n        'bidAdjustment': true\r\n      },\r\n      //'data': Object.assign(remapFloors(buildPrebidFloors(dynArr)))\r\n      'data': {\r\n        'currency': 'USD',\r\n        'skipRate': 0,\r\n        'schema': {\r\n          'fields': [\r\n            'mediaType'\r\n          ]\r\n        },\r\n        'values': {\r\n          'banner': 0.01,\r\n          'native': 0.01,\r\n          'video': 0.01\r\n        },\r\n        'default': 0.01\r\n      }\r\n    },\r\n    'gvlMapping': {'amxS2S':737,'magniteS2S':52,'riseS2S':1043,'kueezrtbS2S':1165,'adagioS2S':617,'anyclip':1400,'exco':444},\r\n    'consentManagement': {\r\n      'gdpr': needsGdpr && {'cmpApi':'iab','defaultGdprScope':true,'timeout':500,'actionTimeout':2000},\r\n      'usp': { 'cmpApi':'iab', 'timeout':500 }\r\n    },\r\n    'useBidCache': true,\r\n    'schain': {\r\n      'validation': 'strict',\r\n      'config': {\r\n        'ver': '1.0',\r\n        'complete': 1,\r\n        'nodes': [\r\n          {\r\n            'asi': 'adnimation.com',\r\n            'sid': '20200002',\r\n            'hp': 1\r\n          }\r\n        ]\r\n      }\r\n    },\r\n    'userSync': {\r\n      'iframeEnabled': true,\r\n      // Max wait for id modules before the auction (HIRO guide: 300 ms; LiveIntent resolves in <50 ms and caches).\r\n      'auctionDelay': 300,\r\n      'idPriority': { 'uid2': ['uid2', 'liveIntentId'] }, // a publisher UID2 token wins over HIRO's, if one is ever added\r\n      'filterSettings': {\r\n        'iframe': {\r\n          'bidders': bidderNames,\r\n          'filter': 'include'\r\n        }\r\n      },\r\n      'userIds': [\r\n        {\r\n          'name': 'sharedId',\r\n          'storage': {\r\n            'type': 'html5',\r\n            'name': '_pubcid',\r\n            'expires': 365\r\n          }\r\n        },\r\n        {\r\n          'name': 'identityLink',\r\n          'params': {\r\n            'pid': '13346',\r\n            'notUse3P': false\r\n          },\r\n          'storage': {\r\n            'type': 'html5',\r\n            'name': 'idl_env',\r\n            'expires': 15,\r\n            'refreshInSeconds': 1800\r\n          }\r\n        },\r\n        {\r\n          'name': 'id5Id',\r\n          'params': {\r\n            'partner': 1262\r\n          },\r\n          'storage': {\r\n            'type': 'html5',\r\n            'name': 'id5id',\r\n            'expires': 90,\r\n            'refreshInSeconds': 28800\r\n          }\r\n        },\r\n        {\r\n          'name': '33acrossId',\r\n          'params': {\r\n            'pid': '0010b00002KBtyLAAT'\r\n          },\r\n          'storage': {\r\n            'name': '33acrossId',\r\n            'type': 'html5',\r\n            'expires': 90,\r\n            'refreshInSeconds': 28800\r\n          }\r\n        },\r\n        ...liveIntentUserIds // HIRO: present for the treated 95% only\r\n      ]\r\n    },\r\n    'ortb2': {\r\n      'ext': { 'prebid': { 'data': { 'eidpermissions': liEidPermissions } } }\r\n    },\r\n    'ix': {\r\n      'detectMissingSizes': true\r\n    },\r\n    'aliasSyncEnabled': true,\r\n    'auctionOptions': {\r\n      'suppressStaleRender': true\r\n    },\r\n    'contxtful': {\r\n      'version': 'v1',\r\n      'customer': 'ADNP250319'\r\n    },\r\n    'realTimeData': {\r\n      'dataProviders': [\r\n        {\r\n          'name': 'contxtful',\r\n          'waitForIt': true,\r\n          'params': {\r\n            'version': 'v1',\r\n            'customer': 'ADNP250319',\r\n            'bidders': [\r\n              'contxtful'\r\n            ],\r\n            'adServerTargeting': true\r\n          }\r\n        }\r\n      ]\r\n    }\r\n  });\r\n\r\n  // ----------------------------------------------\r\n  // Placeholders\r\n  // ----------------------------------------------\r\n\r\n  // Prebid\r\n  window.pbjs = window.pbjs || {};\r\n  window.pbjs.que = window.pbjs.que || [];\r\n\r\n  // Google Tag\r\n  window.googletag = window.googletag || {};\r\n  window.googletag.cmd = window.googletag.cmd || [];\r\n  // Manage refresh of viewable ads\r\n  window.googletag.cmd.push(() =>\r\n    window.googletag.pubads().addEventListener(\r\n      'impressionViewable', onImpressionViewable));\r\n  // Visually collapse unfilled slots\r\n  window.googletag.cmd.push(() =>\r\n    window.googletag.setConfig({ collapseDiv: 'ON_NO_FILL' }));\r\n\r\n  // Google Analytics\r\n  window.dataLayer = window.dataLayer || [];\r\n  function gtag() {\r\n    window.dataLayer.push(arguments);\r\n  }\r\n\r\n  // Taboola\r\n  window._taboola = window._taboola || [];\r\n\r\n  // ----------------------------------------------\r\n  // Constants BJ3R8Y2FV8\r\n  // ----------------------------------------------\r\n\r\n//   const GA_ID = 'G-B4TP9D8FCM';\r\n  const GA_ID = 'G-BJ3R8Y2FV8';\r\n  const APS_TIMEOUT_MS = 2000;\r\n  const PREBID_TIMEOUT_MS = 1800;\r\n\r\n  // ----------------------------------------------\r\n  // Scripts\r\n  // ----------------------------------------------\r\n\r\n  function createScript(src, preCreate = () => {}) {\r\n    return new Promise((resolve) => {\r\n      let scriptEl = document.querySelector(`script[src=\"${src}\"]`);\r\n\r\n      if (scriptEl) {\r\n        console.warn('Script already exists:', src);\r\n        resolve(false);\r\n        return;\r\n      }\r\n\r\n      const attemptLoad = () => {\r\n        scriptEl = document.createElement('script');\r\n        scriptEl.src = src;\r\n        scriptEl.fetchPriority = 'high';\r\n        preCreate(scriptEl);\r\n        scriptEl.async = !scriptEl.defer;\r\n        scriptEl.addEventListener('load', () => resolve(true));\r\n        scriptEl.addEventListener('error', () => {\r\n          console.warn('Retrying to load script:', src);\r\n          scriptEl.remove();\r\n          setTimeout(attemptLoad, 100);\r\n        });\r\n        document.head.appendChild(scriptEl);\r\n      };\r\n\r\n      attemptLoad();\r\n    });\r\n  }\r\n\r\n  // Don't initialize anything if page URL is blacklisted\r\n  if (isBlacklistedUrl()) {\r\n    throw 'Skipping...';\r\n  }\r\n\r\n  Promise.all([\r\n    // Amazon Publisher Services\r\n    // createScript('https://c.amazon-adsystem.com/aax2/apstag.js'),\r\n\r\n    // Human anti-bot protection\r\n    createScript('https://cadmus.script.ac/d105fg4fy05fht/script.js'),\r\n  ])\r\n    .then(config)\r\n    .then(main)\r\n    .catch((err) => console.error('Failed to bootstrap scripts:', err));\r\n\r\n  // Block Through anti-adblock\r\n//   createScript('https://btloader.com/tag?o=5696523966873600&upapi=true');\r\n\r\n  // Vidazoo video ads\r\n//   createScript('https://static.vidazoo.com/basev/vwpt.js', (scriptEl) => {\r\n//     scriptEl.setAttribute('data-widget-id', '65e9b79ebdb3a9c5732bbae8');\r\n//   });\r\n\r\n  // Google Analytics\r\n  createScript(`https://www.googletagmanager.com/gtag/js?id=${GA_ID}`);\r\n\r\n  // KueezRTB cookieless solution\r\n//   createScript('https://static.kueezrtb.com/latest.js', (scriptEl) => {\r\n//     scriptEl.setAttribute('data-cfasync', 'false');\r\n//     scriptEl.id = 'kueezrtb_latest';\r\n//   });\r\n\r\n  // LiveConnect tag (HIRO step 5): first-party cookies and identity graph for the LiveIntent id module.\r\n  createScript('https://d-code.liadm.com/did-00b9.min.js', (scriptEl) => {\r\n    scriptEl.charset = 'utf-8';\r\n  });\r\n\r\n  // LiveRamp\r\n  createScript('https://ats.rlcdn.com/ats.js').then(() => {\r\n    window.ats.start({\r\n      placementID: 13346,\r\n      storageType: 'localStorage',\r\n      detectionType: 'scrapeAndUrl',\r\n      urlParameter: 'env',\r\n      cssSelectors: [\r\n        'input[type=email]',\r\n        'input[type=text]'\r\n      ],\r\n      logging: 'error'\r\n    });\r\n  });\r\n\r\n  class LazyLoader {\r\n    constructor(margin = '100px') {\r\n      this.observer = new IntersectionObserver(this.onIntersect, {\r\n        rootMargin: margin\r\n      });\r\n    }\r\n\r\n    onIntersect = (entries) => {\r\n      entries.forEach((entry) => {\r\n        if (entry.isIntersecting) {\r\n          const cb = entry.target.dataset.lazyCallback;\r\n          if (cb && window[cb]) {\r\n            window[cb](entry.target);\r\n            delete window[cb];\r\n          }\r\n          this.observer.unobserve(entry.target);\r\n        }\r\n      });\r\n    };\r\n\r\n    add(element, callback) {\r\n      if (!element || typeof callback !== 'function') return;\r\n      if (element.getBoundingClientRect().top < window.innerHeight) {\r\n        callback(element);\r\n      } else {\r\n        const cbName = 'lazy_cb_' + Math.random().toString(36).slice(2);\r\n        window[cbName] = callback;\r\n        element.dataset.lazyCallback = cbName;\r\n        this.observer.observe(element);\r\n      }\r\n    }\r\n  }\r\n\r\n  // ----------------------------------------------\r\n  // App\r\n  // ----------------------------------------------\r\n\r\n  const adUnits = [];\r\n  const slotsMap = [];\r\n  const lazyLoader = new LazyLoader();\r\n  const activeSlotIds = [];\r\n  const newPbjsAdUnits = [];\r\n  const viewportType =\r\n    window.screen.width > 1525\r\n      ? 'desktop'\r\n      : window.screen.width > 730\r\n        ? 'tablet'\r\n        : 'mobile';\r\n\r\n  /**\r\n   * Main entry point of our tag.\r\n   */\r\n  async function main() {\r\n    const isOk = await createScript('https://securepubads.g.doubleclick.net/tag/js/gpt.js');\r\n    if (isOk) {\r\n      console.log('Starting...');\r\n    }\r\n  }\r\n\r\n  function config() {\r\n    console.log('Configuring...');\r\n    initGa();\r\n    // initAps();\r\n    initIiq();\r\n  }\r\n\r\n  function initAps() {\r\n    window.apstag.init({\r\n      pubID: '83d5088d-5f70-4acf-a888-15a83bf33932',\r\n      adServer: 'googletag',\r\n      schain: {\r\n        complete: 1,\r\n            ver: '1.0',\r\n                nodes: [\r\n                    {\r\n                        asi: 'zerodegreeads.com',\r\n                        sid: '32025TUV',\r\n                        hp: 1\r\n                        // rid: 'string', // The request ID (optional)\r\n                        // name: 'string', // Name of the company paid for inventory under seller ID (optional)\r\n                        // domain: 'string', // Business domain of this node (optional)\r\n                    }\r\n                ]\r\n        }\r\n    });\r\n  }\r\n\r\n  function initGa() {\r\n    window.googletag.cmd.push(() => {\r\n      const handleSlotRenderEnded = () => {\r\n        gtag('js', new Date());\r\n        gtag('config', GA_ID);\r\n\r\n        googletag.pubads().removeEventListener('slotRenderEnded', handleSlotRenderEnded);\r\n      };\r\n      googletag.pubads().addEventListener('slotRenderEnded', handleSlotRenderEnded);\r\n    });\r\n  }\r\n\r\n  function initIiq() {\r\n    if (!window.IntentIqObject) {\r\n      console.log('IIQ not found - skipping initialization');\r\n      return;\r\n    }\r\n\r\n    try {\r\n      // Configure IntentIQ\r\n      window.intentIq_2072952453 = new IntentIqObject({\r\n        partner: 2072952453,\r\n        pbjs: adnpbjs,\r\n        callback: main,\r\n        timeoutInMillis: PREBID_TIMEOUT_MS,\r\n        ABTestingConfigurationSource: 'IIQServer',\r\n        manualWinReportEnabled: true,\r\n        domainName: window.location.host,\r\n        vrBrowserBlackList: ['chrome'],\r\n        gamParameterName: 'googletag', // Optional\r\n      });\r\n\r\n      adnpbjs.onEvent('bidWon', (data) => {\r\n        window.intentIq_2072952453.reportExternalWin({\r\n          biddingPlatformId: 1, // PreBid\r\n          partnerAuctionId: data.auctionId,\r\n          bidderCode: data.bidderCode,\r\n          prebidAuctionId: data.auctionId,\r\n          cpm: data.cpm,\r\n          currency: 'USD',\r\n          originalCpm: data.originalCpm,\r\n          originalCurrency: 'USD',\r\n          status: data.status,\r\n          placementId: data.adUnitCode\r\n        });\r\n      });\r\n\r\n    } catch (err) {\r\n      console.error('Failed to initialize IntentIQ:', err);\r\n      throw err;\r\n    }\r\n  }\r\n\r\n  function initAds() {\r\n    const adsEl = document.querySelectorAll('[data-onpage=\"true\"]');\r\n    adsEl.forEach(slotEl => createAd(slotEl.dataset.adpath));\r\n  }\r\n\r\n  function onImpressionViewable(event) {\r\n    const { slot } = event;\r\n    const slotId = slot.getSlotElementId();\r\n    if (!activeSlotIds.includes(slotId)) {\r\n      return;\r\n    }\r\n\r\n    const adUnitPath = slot.getAdUnitPath();\r\n    const adUnit = adsConfig[adUnitPath];\r\n    const timeoutMs = adUnit.refreshTime;\r\n\r\n    setTimeout(() => refreshAd(slot, slotId, adUnit), timeoutMs);\r\n  }\r\n\r\n  function collectAds() {\r\n    adUnits.length = 0;\r\n\r\n    const adsEl = document.querySelectorAll('[data-onpage=\"true\"]');\r\n    if (!adsEl.length) {\r\n      console.warn('No ads found to collect');\r\n      return;\r\n    }\r\n\r\n    adsEl.forEach((slotEl) => {\r\n      const adPath = slotEl.dataset.adpath;\r\n      const slot = adsConfig[adPath];\r\n      const slotId = slot?.id;\r\n      const sizes = slot?.sizeMapping[viewportType];\r\n\r\n      if (!sizes?.length) {\r\n        console.warn(\r\n          'Failed to find slot sizes for viewport - bids will be affected for',\r\n          viewportType, slotId\r\n        );\r\n        return;\r\n      }\r\n      const slotBidders = [...bidders];\r\n        const tagMap = {\r\n        ATF: \"ATF\",\r\n        Content: \"Content\",\r\n        BTF: \"BTF\",\r\n        Side: \"Side\",\r\n        SideATF: \"SideATF\",\r\n        Sticky: \"Sticky\"\r\n        };\r\n\r\n        // Map Seedtag adUnitId + placement for each tag\r\n        const seedtagMap = {\r\n        ATF:       { adUnitId: \"36367874\", placement: \"inBanner\" },\r\n        Content:   { adUnitId: \"36367870\", placement: \"inArticle\" },\r\n        BTF:       { adUnitId: \"36367876\", placement: \"inBanner\" },\r\n        Side:      { adUnitId: \"36367879\", placement: \"inBanner\" },\r\n        Sticky:    { adUnitId: \"36367869\", placement: \"inScreen\" },\r\n        default:   { adUnitId: \"36367877\", placement: \"inBanner\" }\r\n        };\r\n\r\n        const tag = tagMap[slot.position] || \"ROS\";\r\n        const seedtagParams = seedtagMap[slot.position] || seedtagMap.default;\r\n\r\n        slotBidders.push(\r\n        {\r\n            bidder: \"taboola\",\r\n            params: {\r\n            tagId: tag,\r\n            publisherId: \"1813968\"\r\n            }\r\n        },\r\n        {\r\n            bidder: \"seedtag\",\r\n            params: {\r\n            adUnitId: seedtagParams.adUnitId,\r\n            publisherId: \"5428-2281-01\",\r\n            placement: seedtagParams.placement\r\n            }\r\n        }\r\n        );\r\n\r\n        const STANDARD_SIZES = {\r\n            desktop: [\r\n                [728, 90],\r\n                [970, 90],\r\n                [970, 250],\r\n                [300, 250],\r\n                [300, 600],\r\n                [160, 600],\r\n                [336, 280],\r\n                [320, 50],\r\n                [320, 100],\r\n                [1,1]\r\n            ],\r\n            tablet: [\r\n                [728, 90],\r\n                [300, 250],\r\n                [300, 600],\r\n                [160, 600],\r\n                [336, 280],\r\n                [1,1]\r\n            ],\r\n            mobile: [\r\n                [320, 50],\r\n                [320, 100],\r\n                [300, 250],\r\n                [336, 280],\r\n                [360, 360],\r\n                [1,1]\r\n            ]\r\n        };\r\n\r\n        function hasOnlyStandardSizes(sizes, viewport) {\r\n            if (!Array.isArray(sizes) || sizes.length === 0) return false;\r\n\r\n            const standardSizes = STANDARD_SIZES[viewport] || [];\r\n\r\n            const isNative = (w, h) => w === 1 && h === 2;\r\n\r\n            return sizes.every(size => {\r\n                if (size === 'fluid') return true;\r\n                if (Array.isArray(size)) {\r\n                    const [w, h] = size;\r\n                    if (isNative(w, h)) return true;\r\n                    return standardSizes.some(([sw, sh]) => sw === w && sh === h);\r\n                }\r\n                return false;\r\n            });\r\n        }\r\n    const prebidSizes = sizes.filter(size => hasOnlyStandardSizes([size], viewportType));\r\n\r\nif (prebidSizes.length) {\r\n        adUnits.push({\r\n            bids: slotBidders,\r\n            code: slotId,\r\n            mediaTypes: {\r\n            banner: {\r\n                sizes: prebidSizes\r\n            }\r\n            }\r\n        });\r\n        //console.log(`Prebid sizes for ${slotId}:`, prebidSizes);\r\n        } else {\r\n        console.log(`Skipping Prebid for ${slotId} — No compatible sizes.`);\r\n        }\r\n    });\r\n\r\n    newPbjsAdUnits.length = 0;\r\n    newPbjsAdUnits.push(...adUnits);\r\n\r\n    window.adnpbjs.que.push(() => {\r\n      window.adnpbjs.bidderSettings = bidderSettings;\r\n      window.adnpbjs.setConfig(pbjsConfig);\r\n      installLiveIntentMeasurement(window.adnpbjs);\r\n      window.adnpbjs.setBidderConfig({\r\n        bidders: ['sparteo'],\r\n        config: {\r\n          ortb2: {\r\n            source: {\r\n              ext: {\r\n                schain: {\r\n                  ver: \"1.0\",\r\n                  complete: 1,\r\n                  nodes: [{\r\n                    asi: \"zerodegreeads.com\",\r\n                    sid: \"32025TUV\",\r\n                    hp: 1\r\n                  }]\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  function runApsBids(slotEl, resolve) {\r\n    return;\r\n\r\n    const slotId = slotEl.id;\r\n    const adPath = slotEl.dataset.adpath;\r\n\r\n    const sizes = adsConfig[adPath].sizeMapping[viewportType];\r\n    if (!sizes.length) {\r\n      console.warn(\r\n        'Failed to find slot sizes for viewport - canceling APS bid for',\r\n        viewportType, slotId\r\n      );\r\n      resolve();\r\n      return;\r\n    }\r\n\r\n    const slots = [{\r\n      slotID: slotId,\r\n      slotName: adsConfig[adPath].id,\r\n      sizes\r\n    }];\r\n\r\n    window.apstag.fetchBids({ slots, timeout: APS_TIMEOUT_MS }, () => {\r\n      window.apstag.setDisplayBids();\r\n      resolve();\r\n    });\r\n  }\r\n\r\n  function runPrebidBids(slotEl, resolve) {\r\n    const slotId = slotEl.id;\r\n    window.pbjs.que.push(() =>\r\n      window.pbjs.requestBids({\r\n        timeout: PREBID_TIMEOUT_MS,\r\n        adUnitCodes: [slotId],\r\n        bidsBackHandler: () => {\r\n          window.pbjs.setTargetingForGPTAsync([slotId]);\r\n          resolve();\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  async function runBids(slotEl) {\r\n    try{\r\n        const slotId = slotEl.id;\r\n        // const apsBids = new Promise((resolve) => runApsBids(slotEl, resolve));\r\n        const pbjsBids = new Promise((resolve) => runPrebidBids(slotEl, resolve));\r\n        function withTimeout(promise, ms) {\r\n        return Promise.race([\r\n            promise,\r\n            new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), ms))\r\n        ]);\r\n        }\r\n\r\n        await Promise.allSettled([\r\n          // withTimeout(apsBids, 3000),\r\n            withTimeout(pbjsBids, 3000)\r\n        ]);\r\n\r\n    }catch(e){\r\n        console.log(e);\r\n        return\r\n    }\r\n  }\r\n\r\n  async function createAdCmd(slotName) {\r\n    const slotEl = document.querySelector(`[data-adpath=\"${slotName}\"]`);\r\n    if (!slotEl) {\r\n      console.warn('Failed to find ad to create by id:', slotName);\r\n      return;\r\n    }\r\n\r\n    collectAds();\r\n\r\n    let adUnit = adsConfig[slotName];\r\n    if (!adUnit) {\r\n      console.warn('Failed to find ad with the following id:', slotName);\r\n      return;\r\n    }\r\n\r\n    const sizeMapping = googletag\r\n      .sizeMapping()\r\n      .addSize([980, 200], adUnit.sizeMapping.desktop)\r\n      .addSize([730, 200], adUnit.sizeMapping.tablet)\r\n      .addSize([0, 0], adUnit.sizeMapping.mobile)\r\n      .build();\r\n\r\n    const adPath = slotEl.dataset.adpath;\r\n    let refreshIteration = adsConfig[adPath].refreshIteration;\r\n    refreshIteration++;\r\n\r\n    const slot = googletag\r\n      .defineSlot(adUnit.id, adUnit.size)\r\n      .defineSizeMapping(sizeMapping)\r\n      .addService(window.googletag.pubads());\r\n\r\n    slot.setConfig({ targeting: { refreshIteration: refreshIteration.toString(), intent_iq_group: 'U' } });\r\n\r\n    slotEl.id = slot.getSlotElementId();\r\n\r\n    const pbjsAdUnit = newPbjsAdUnits.find(adUnit => adUnit.code === slotName);\r\n    if (pbjsAdUnit) {\r\n      pbjsAdUnit.code = slotEl.id;\r\n      window.adnpbjs.addAdUnits(pbjsAdUnit);\r\n      window.pbjs = adnpbjs;\r\n    }\r\n\r\n    slotsMap[slotEl.id] = slot;\r\n    activeSlotIds.push(slotEl.id);\r\n\r\n    const init = async () => {\r\n      try {\r\n        await runBids(slotEl);\r\n        window.googletag.enableServices();\r\n        window.googletag.display(slotEl.id);\r\n        if (googletag.getConfig('disableInitialLoad').disableInitialLoad) {\r\n          window.googletag.pubads().refresh([slot]);\r\n        }\r\n      } catch (err) {\r\n        console.error('Failed to run bids for ad slot: %s, %s', slotEl.id, err);\r\n      }\r\n    };\r\n\r\n    const isLazyLoaded = adsConfig[adPath]?.isLazyLoaded !== false;\r\n    if (isLazyLoaded) {\r\n      lazyLoader.add(slotEl, init);\r\n    } else {\r\n      init();\r\n    }\r\n  }\r\n\r\n  async function refreshAd(slot, slotId, adUnit) {\r\n    try {\r\n      const adUnitToRefresh = googletag\r\n        .pubads()\r\n        .getSlots()\r\n        .filter((slot) => slot.getSlotElementId() === slotId)\r\n        .at(0);\r\n\r\n      if (!adUnitToRefresh) {\r\n        return;\r\n      }\r\n\r\n      adUnit.refreshIteration++;\r\n      slot.setConfig({ targeting: { refreshIteration: adUnit.refreshIteration.toString() } });\r\n\r\n      const slotEl = document.getElementById(adUnitToRefresh.getSlotElementId());\r\n      await runBids(slotEl);\r\n\r\n      window.googletag.pubads().refresh([slotsMap[slotEl.id]]);\r\n    } catch (err) {\r\n      console.error('Failed to refresh ad:', slotId, err.message);\r\n    }\r\n  }\r\n\r\n  function destroyAdCmd(slotName) {\r\n    const slotEl = document.querySelector(`[data-adpath=\"${slotName}\"]`);\r\n    if (!slotEl) {\r\n      console.warn('Failed to find ad to destroy by id:', slotName);\r\n      return;\r\n    }\r\n\r\n    const slotId = slotEl.id;\r\n    if (slotId && slotsMap[slotId]) {\r\n      window.googletag.destroySlots([slotsMap[slotId]]);\r\n      delete slotsMap[slotId];\r\n      const idx = activeSlotIds.indexOf(slotId);\r\n      if (idx > -1) {\r\n        activeSlotIds.splice(idx, 1);\r\n      }\r\n    }\r\n\r\n    slotEl.innerHTML = '';\r\n    slotEl.id = '';\r\n    slotEl.removeAttribute('data-onpage');\r\n    if (slotId.toLowerCase().includes('sticky_footer')) {\r\n        slotEl.parentElement.parentElement.remove();\r\n    }\r\n  }\r\n\r\n  function createNativeCmd() {\r\n    createScript('https://cdn.taboola.com/libtrc/adnimationnetwork/loader.js', (scriptEl) => {\r\n      scriptEl.id = 'tb_loader_script';\r\n      scriptEl.onload = () => {\r\n        window.performance?.mark?.('tbl_ic');\r\n      };\r\n    });\r\n\r\n    createScript('data:text/javascript;charset=utf-8,_taboola.push({flush:true})', (scriptEl) => {\r\n      scriptEl.setAttribute('data-taboola-flush', 'true');\r\n      scriptEl.defer = true;\r\n    });\r\n  }\r\n\r\n  function destroyNativeCmd() {\r\n    const footerEl = document.querySelector('.adn-footer');\r\n    if (footerEl) {\r\n      footerEl.innerHTML = '';\r\n    }\r\n  }\r\n\r\n  function createNative() {\r\n    window.googletag.cmd.push(createNativeCmd);\r\n  }\r\n\r\n  function destroyNative() {\r\n    window.googletag.cmd.push(destroyNativeCmd);\r\n  }\r\n\r\n  function createAd(slotName) {\r\n    window.googletag.cmd.push(() => createAdCmd(slotName));\r\n  }\r\n\r\n  function destroyAd(slotName) {\r\n    window.googletag.cmd.push(() => destroyAdCmd(slotName));\r\n  }\r\n\r\n  function createInterstitial() {\r\n    window.googletag.cmd.push(createInterstitialCmd);\r\n  }\r\n\r\n  // ----------------------------------------------\r\n  // Exports\r\n  // ----------------------------------------------\r\n\r\n  window.adn = {\r\n    createAd,\r\n    destroyAd,\r\n    createNative,\r\n    destroyNative,\r\n    createInterstitial,\r\n  };\r\n\r\n  // ----------------------------------------------\r\n  // Utils\r\n  // ----------------------------------------------\r\n\r\n  async function getIpInfo() {\r\n    try {\r\n      const cached = localStorage.getItem('ipinfo');\r\n      if (cached) return JSON.parse(cached);\r\n      const key = '7c4d73767e64472ea502eacdbc47386b';\r\n      const url = `https://d2dvy74lyjayxz.cloudfront.net/?key=${key}`;\r\n      const res = await fetch(url);\r\n      if (!res.ok) throw new Error(`HTTP-${res.status}`);\r\n      const ipInfo = await res.json();\r\n      localStorage.setItem('ipinfo', JSON.stringify(ipInfo));\r\n      localStorage.removeItem('adngeo'); // Old version cleanup\r\n      return ipInfo;\r\n    } catch (err) {\r\n      console.error('Failed to get ip info:', err.message);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  async function getCountry() {\r\n    const ipInfo = await getIpInfo();\r\n    return ipInfo?.country ?? 'US';\r\n  }\r\n\r\n  async function getPlatform() {\r\n    const ipInfo = await getIpInfo();\r\n    return ['ios','android','mobile','desktop'].find(k => ipInfo?.[k]) ?? 'desktop';\r\n  }\r\n\r\n  async function waitForElement(selector) {\r\n    let cnt = 0;\r\n    const timeout = 100;\r\n    const threshold = 3000 / timeout;\r\n    return new Promise((resolve) => {\r\n      let interval = setInterval(() => {\r\n        const el = document.querySelector(selector);\r\n        if (el) {\r\n          clearInterval(interval);\r\n          resolve(el);\r\n        }\r\n        if (++cnt === threshold) {\r\n          cnt = 0;\r\n          console.warn('Still waiting for selector:', selector);\r\n        }\r\n      }, timeout);\r\n    });\r\n  }\r\n\r\n  const onDomReady = (function() {\r\n    const callbacks = [];\r\n\r\n    document.addEventListener('DOMContentLoaded', () => {\r\n      callbacks.forEach((callback) => callback());\r\n      callbacks.length = 0;\r\n    });\r\n\r\n    const interval = setInterval(() => {\r\n      if (\r\n        document.readyState === 'complete' ||\r\n        document.readyState === 'interactive'\r\n      ) {\r\n        clearInterval(interval);\r\n        callbacks.forEach((callback) => callback());\r\n        callbacks.length = 0;\r\n      }\r\n    }, 100);\r\n\r\n    return (callback) => {\r\n      if (\r\n        document.readyState === 'complete' ||\r\n        document.readyState === 'interactive'\r\n      ) {\r\n        setTimeout(callback, 0);\r\n      } else {\r\n        callbacks.push(callback);\r\n      }\r\n    };\r\n  })();\r\n\r\n  // Find \"URL_PATHS_BLACKLIST\" under the \"Configuration\" section.\r\n  // There you can add any additional URL paths to blacklist.\r\n  function isBlacklistedUrl() {\r\n    const { pathname } = window.location;\r\n    const list = URL_PATHS_BLACKLIST ?? [];\r\n    const isBlacklisted = list.some((path) =>\r\n      path === '/' ? pathname === path : pathname.includes(path));\r\n    return isBlacklisted;\r\n  }\r\n\r\n  function observeSlots() {\r\n    const isVisible = (element) => {\r\n      const style = window.getComputedStyle(element);\r\n      const isDisplayed = style.display !== 'none';\r\n      const isVisible = style.visibility !== 'hidden';\r\n      return isDisplayed && isVisible;\r\n    };\r\n\r\n    const isStyleChanged = (mutation) =>\r\n      mutation.type === 'attributes' &&\r\n      (\r\n        mutation.attributeName === 'style' ||\r\n        mutation.attributeName === 'class'\r\n      );\r\n\r\n    const isVisibilityChanged = (mutation) => {\r\n      const oldStyle = mutation.oldValue || '';\r\n      const newStyle = mutation.target.getAttribute('style') || '';\r\n      const wasHidden = oldStyle.includes('hidden') || oldStyle.includes('none');\r\n      const isHidden = newStyle.includes('hidden') || newStyle.includes('none');\r\n      return wasHidden !== isHidden;\r\n    }\r\n\r\n    const handleAdded = (node) => {\r\n      const slot = node.getAttribute('data-adpath');\r\n      console.log('Added:', slot);\r\n      createAd(slot);\r\n    }\r\n\r\n    const handleRemoved = (node) => {\r\n      const slot = node.getAttribute('data-adpath');\r\n      console.log('Removed:', slot);\r\n      destroyAd(slot);\r\n    }\r\n\r\n    const isAdSlot = (node) => node.hasAttribute?.('data-adpath');\r\n\r\n    const getSlots = (nodeList) =>\r\n      Array.from(nodeList)\r\n        .filter((node) => node.nodeType === Node.ELEMENT_NODE)\r\n        .flatMap((node) => Array.from(node.querySelectorAll('[data-adpath]')).concat(node))\r\n        .filter(isAdSlot);\r\n\r\n    const handleMutations = (mutations) =>\r\n      mutations.forEach((mutation) => {\r\n        const addedNodes = getSlots(mutation.addedNodes);\r\n        const removedNodes = getSlots(mutation.removedNodes);\r\n\r\n        addedNodes.forEach(handleAdded);\r\n        removedNodes.forEach(handleRemoved);\r\n\r\n        if (\r\n          !addedNodes.includes(mutation.target) &&\r\n          !removedNodes.includes(mutation.target) &&\r\n          isStyleChanged(mutation) &&\r\n          isVisibilityChanged(mutation)\r\n        ) {\r\n          const childNodes = getSlots(mutation.target);\r\n          childNodes.forEach((node) => {\r\n            if (isVisible(node)) {\r\n              handleAdded(node);\r\n            } else {\r\n              handleRemoved(node);\r\n            }\r\n          });\r\n        }\r\n      });\r\n\r\n    const config = {\r\n      subtree: true,\r\n      childList: true,\r\n      attributes: true,\r\n      attributeFilter: ['style', 'class'],\r\n      attributeOldValue: true\r\n    };\r\n\r\n    const observer = new MutationObserver(handleMutations);\r\n    observer.observe(document, config);\r\n  }\r\n\r\n  // ----------------------------------------------\r\n  // Custom\r\n  // ----------------------------------------------\r\nfunction createTaboolaInContentFeed() {\r\n  // Select all elements matching the selector\r\n  var elements = document.querySelectorAll('.node__content.clearfix > div > h2:nth-of-type(2n)');\r\n\r\n  // Check if elements exist\r\n  if (elements.length === 0) {\r\n    console.log('No elements found with the selector');\r\n    return;\r\n  }\r\n\r\n  // Loop through each matched element\r\n  elements.forEach(function(element) {\r\n    // Check if the widget is already injected\r\n    if (document.querySelector('#taboola-mid-ancient-origin-thumbnails')) {\r\n      console.log('Widget already injected for this page.');\r\n      return;\r\n    }\r\n\r\n    // Create the <div> element\r\n    var divElement = document.createElement('div');\r\n    divElement.id = 'taboola-mid-ancient-origin-thumbnails';\r\n\r\n    // Create the <script> element\r\n    var scriptElement = document.createElement('script');\r\n    scriptElement.type = 'text/javascript';\r\n    scriptElement.text = `\r\n      window._taboola = window._taboola || [];\r\n      _taboola.push({\r\n          mode: 'thumbnails-ancient-origin',\r\n          container: 'taboola-mid-ancient-origin-thumbnails',\r\n          placement: 'Mid Ancient Origin Thumbnails',\r\n          target_type: 'mix'\r\n      });\r\n    `;\r\n\r\n    // Insert the <div> and <script> BEFORE the element\r\n    element.parentNode.insertBefore(divElement, element);\r\n    element.parentNode.insertBefore(scriptElement, element);\r\n  });\r\n\r\n  console.log('Taboola incontent injected successfully.');\r\n}\r\n\r\nfunction createTaboolaThumbnailsFeed() {\r\n    // Select all elements matching the selector\r\n    // var elements = document.querySelectorAll('.view-content')[2];\r\n    var elements = document.querySelectorAll('#block-gazeta-related-articles-block');\r\n\r\n    // Check if elements exist\r\n    if (elements.length === 0) {\r\n      console.log('No elements found with the selector');\r\n      return;\r\n    }\r\n\r\n    // Loop through each matched element\r\n    elements.forEach(function(element) {\r\n      // Check if the widget is already injected\r\n      if (element.querySelector('#taboola-ancient-origin-thumbnails')) {\r\n        console.log('Widget already injected for this element.');\r\n        return;\r\n      }\r\n\r\n      // Create the <div> element\r\n      var divElement = document.createElement('div');\r\n      divElement.id = 'taboola-below-article-thumbnails-10';\r\n\r\n      // Create the <script> element\r\n      var scriptElement = document.createElement('script');\r\n      scriptElement.type = 'text/javascript';\r\n      scriptElement.text = `\r\n            window._taboola = window._taboola || [];\r\n            _taboola.push({\r\n            mode: 'alternating-thumbnails-a',\r\n            container: 'taboola-below-article-thumbnails-10',\r\n            placement: 'Below Article Thumbnails 10',\r\n                target_type: 'mix'\r\n            });\r\n        `;\r\n\r\n      // Append the <div> and <script> to the current element\r\n      element.appendChild(divElement);\r\n      element.appendChild(scriptElement);\r\n    });\r\n\r\n    console.log('Taboola thumbnails injected successfully.');\r\n  }\r\n\r\nfunction createTaboolaRELATEDFeed() {\r\n    // Select all elements matching the selector\r\n    // var elements = document.querySelectorAll('.view-content')[2];\r\n    var elements = document.querySelectorAll('#block-gazeta-aomaintheme-system-main');\r\n\r\n    // Check if elements exist\r\n    if (elements.length === 0) {\r\n      console.log('No elements found with the selector');\r\n      return;\r\n    }\r\n\r\n    // Loop through each matched element\r\n    elements.forEach(function(element) {\r\n      // Check if the widget is already injected\r\n      if (element.querySelector('#taboola-ancient-origin-thumbnails')) {\r\n        console.log('Widget already injected for this element.');\r\n        return;\r\n      }\r\n\r\n      // Create the <div> element\r\n      var divElement = document.createElement('div');\r\n      divElement.id = 'taboola-ancient-origin-thumbnails';\r\n\r\n      // Create the <script> element\r\n      var scriptElement = document.createElement('script');\r\n      scriptElement.type = 'text/javascript';\r\n      scriptElement.text = `\r\n            window._taboola = window._taboola || [];\r\n            _taboola.push({\r\n            mode: 'alternating-thumbnails-a',\r\n            container: 'taboola-ancient-origin-thumbnails',\r\n            placement: 'Ancient Origin Thumbnails',\r\n            target_type: 'mix'\r\n            });\r\n        `;\r\n\r\n      // Append the <div> and <script> to the current element\r\n      element.appendChild(divElement);\r\n      element.appendChild(scriptElement);\r\n    });\r\n\r\n    console.log('Taboola thumbnails injected successfully.');\r\n  }\r\n\r\nfunction createStickyBanner() {\r\n\r\n  const addCloseButton = (stickyBannerSizeDiv) => {\r\n    const el = document.createElement('div');\r\n    el.innerText = 'Close';\r\n    el.style.position = 'absolute';\r\n    el.style.top = '-20px';\r\n    el.style.right = '0px';\r\n    el.style.height = '20px';\r\n    el.style.width = '50px';\r\n    el.style.color = 'white';\r\n    el.style.borderRadius = '2px';\r\n    el.style.backgroundColor = 'black';\r\n    el.style.cursor = 'pointer';\r\n    el.style.fontSize = '14px';\r\n    el.style.textAlign = 'center';\r\n    el.classList.add('closeButton');\r\n    el.onclick = function() {\r\n      this.parentElement.remove();\r\n    };\r\n    stickyBannerSizeDiv.append(el);\r\n  };\r\n\r\n  const stickyBannerParent = document.createElement('div');\r\n  stickyBannerParent.classList.add('adnSticky');\r\n  stickyBannerParent.style.position = 'fixed';\r\n  stickyBannerParent.style.display = 'flex';\r\n  stickyBannerParent.style.justifyContent = 'space-evenly';\r\n  stickyBannerParent.style.bottom = '0px';\r\n  stickyBannerParent.style.width = '100%';\r\n  stickyBannerParent.style.backgroundColor = 'transparent';\r\n  stickyBannerParent.style.zIndex = '9999999999';\r\n\r\n  const stickyBannerSizeDiv = document.createElement('div');\r\n  stickyBannerSizeDiv.style.position = 'relative';\r\n\r\n  const stickyBanner = document.createElement('div');\r\n  stickyBanner.dataset.onpage = !0;\r\n  stickyBanner.dataset.adpath = '/339474670,423516288/Ancient_D10/Sticky_Footer';\r\n\r\n  stickyBannerSizeDiv.append(stickyBanner);\r\n  stickyBannerParent.append(stickyBannerSizeDiv);\r\n  document.getElementsByTagName('body')[0].append(stickyBannerParent);\r\n\r\n  let flag = true;\r\n  googletag.cmd.push(() => {\r\n    googletag.pubads().addEventListener('slotRenderEnded', (event) => {\r\n      if (\r\n        event.slot.getSlotElementId().includes('Sticky_Footer') &&\r\n        !event.isEmpty && flag\r\n      ) {\r\n        flag = false;\r\n        addCloseButton(stickyBannerSizeDiv);\r\n      }\r\n    });\r\n    googletag.enableServices();\r\n  });\r\n\r\n}\r\n\r\n// function createVideoPlayer() {\r\n\r\n// // Create a div to contain the advertisement\r\n//      var adDiv = document.createElement('div');\r\n\r\n//      window.screen.width > 980 ? adDiv.style.width = '600px': adDiv.style.width = '100%'\r\n//      adDiv.style.margin = '0 auto'; // Center the div\r\n//      adDiv.style.textAlign = 'center'; // Center content inside\r\n//      adDiv.style.border = '1px solid #ccc';\r\n//      adDiv.style.padding = '10px';\r\n//      adDiv.style.boxSizing = 'border-box';\r\n\r\n//      // Set an ID for the div to apply responsive styles\r\n//      adDiv.id = 'adContainer';\r\n\r\n//      // Create the script element for the video player\r\n//      var scriptPrim = document.createElement('script');\r\n//      scriptPrim.src = 'https://live.primis.tech/live/liveView.php?s=119210&schain=1.0,1!adnimation.com,20200002,1';\r\n//      adDiv.appendChild(scriptPrim);\r\n\r\n//      // Insert the adDiv after the #translations element\r\n//      if (document.querySelector('.node__content.clearfix > div > p:nth-of-type(3)')) {\r\n//      document.querySelector('.node__content.clearfix > div > p:nth-of-type(3)').after(adDiv);\r\n//      }\r\n// }\r\n\r\nfunction injectVDOPlayer() {\r\n  const DIV_ID = \"v-ancient-origins-net\";\r\n  const SCRIPT_PATH = \"a.vdo.ai/core/v-ancient-origins-net/vdo.ai.js\";\r\n  const TARGET_SELECTOR = \".blog_post > p:nth-child(1)\";\r\n\r\n  const target = document.querySelector(TARGET_SELECTOR);\r\n  if (!target) return; // if the selector isn't found, do nothing\r\n\r\n  // Create or reuse the container\r\n  let container = document.getElementById(DIV_ID);\r\n  if (!container) {\r\n    container = document.createElement(\"div\");\r\n    container.id = DIV_ID;\r\n  }\r\n\r\n  // Insert after the target paragraph\r\n  target.insertAdjacentElement(\"afterend\", container);\r\n\r\n  // Prevent loading the VDO script multiple times\r\n  if (document.querySelector(`script[src*=\"${SCRIPT_PATH}\"]`)) return;\r\n\r\n  // Inject the script (same behavior as your snippet)\r\n  const s = document.createElement(\"script\");\r\n  s.setAttribute(\"data-cfasync\", \"false\");\r\n  s.defer = true;\r\n  s.async = true;\r\n  s.src = window.location.protocol + \"//\" + SCRIPT_PATH;\r\n  document.head.appendChild(s);\r\n}\r\n\r\nfunction addincontentAdUnits() {\r\n\r\n  const el = document.createElement('div');\r\n  el.dataset.onpage = true;\r\n  el.dataset.adpath = '/339474670,423516288/Ancient_D10/incontent_1';\r\n  el.style.textAlign = 'center';\r\n  el.style.marginTop = '40px';\r\n  el.style.marginBottom = '40px';\r\n  el.style.minHeight = '100px';\r\n  const h2Section = document.querySelectorAll('');\r\n  h2Section.forEach(pElement =>\r\n    pElement.parentElement.insertBefore(\r\n      el.cloneNode(true), pElement.nextElementSibling));\r\n\r\n}\r\n\r\nfunction createInterstitialCmd() {\r\n\r\n  const slot = window.googletag.defineOutOfPageSlot(\r\n    '/339474670,423516288/Ancient_D10/Interstitial', window.googletag.enums.OutOfPageFormat.INTERSTITIAL);\r\n\r\n  if (!slot) {\r\n    console.error('Failed to define out of page slot - Interstitial');\r\n    return;\r\n  }\r\n\r\n  slot.addService(window.googletag.pubads());\r\n  window.googletag.enableServices();\r\n  window.googletag.display(slot);\r\n\r\n}\r\n\r\nfunction createAnyclipOutStreamPlayer() {\r\n  const s = document.createElement('script');\r\n  s.src = 'https://player.anyclip.com/anyclip-widget/lre-widget/prod/v1/src/acins.js';\r\n  s.setAttribute('pubname', '2503');\r\n  s.setAttribute('widgetname', '001Te00000GRpTZIA1_M13359');\r\n  document.body.appendChild(s);\r\n}\r\n\r\nfunction injectAnyclipPlayerInstreamPlayer() {\r\n  // Only use this selector\r\n  const selector = '.blog_post > p:nth-child(1)';\r\n  const target = document.querySelector(selector);\r\n\r\n  // Stop if selector not found\r\n  if (!target) return;\r\n\r\n  // Avoid double injection\r\n  if (document.getElementById('anyclip-player-wrapper')) return;\r\n\r\n  // Create wrapper for padding + placement control\r\n  const wrapper = document.createElement('div');\r\n  wrapper.id = 'anyclip-player-wrapper';\r\n  wrapper.style.marginTop = \"30px\";\r\n  wrapper.style.marginBottom = \"30px\";\r\n\r\n  // Insert wrapper before the <p> element\r\n  target.insertAdjacentElement('beforebegin', wrapper);\r\n\r\n  // Inject AnyClip script once\r\n  if (!document.querySelector('script.anyclip-player')) {\r\n    const script = document.createElement('script');\r\n    script.className = \"anyclip-player\";\r\n    script.type = \"text/javascript\";\r\n\r\n    // The AnyClip script URL\r\n    script.src = \"https://player.anyclip.com/anyclip-widget/lre-widget/prod/v1/src/lre.js\";\r\n\r\n    // Required attributes\r\n    script.setAttribute(\"pubname\", \"2503\");\r\n    script.setAttribute(\"widgetname\", \"001Te00000GRpTZIA1_M12633\");\r\n\r\n    // Append into wrapper so it loads exactly in the right place\r\n    wrapper.appendChild(script);\r\n  }\r\n\r\n  console.log(\"🎉 AnyClip Instream player injected.\");\r\n}\r\n\r\n  onDomReady(async () => {\r\n\r\n    createNative();\r\n    createStickyBanner();\r\n    //createVideoPlayer();\r\n    // addincontentAdUnits();\r\n    createTaboolaInContentFeed();\r\n\r\nif (window.location.href === \"https://www.ancient-origins.net/news-history-archaeology/pompeii-bath-water-00102455\") {\r\n        createTaboolaRELATEDFeed();\r\n    }\r\n    if (window.location.href !== \"https://www.ancient-origins.net/news-history-archaeology/pompeii-bath-water-00102455\") {\r\n        createTaboolaThumbnailsFeed();\r\n    }\r\n\r\n    injectVDOPlayer();\r\n\r\n// (function () {\r\n            //     const r = Math.random(); // 0 → 1\r\n\r\n            //     if (r < 0.5) {\r\n            //         console.log(\"A/B Test → Anyclip\");\r\n            //         //createAnyclipOutStreamPlayer();\r\n            //         injectAnyclipPlayerInstreamPlayer();\r\n            //     } else {\r\n            //         console.log(\"A/B Test → VDOPlayer\");\r\n            //         injectVDOPlayer();\r\n            //     }\r\n            // })();\r\n\r\n    try {\r\n      // Add custom slots creation logic here 👇\r\n    } catch(err) {\r\n      console.error('Failed to create slots:', err.stack);\r\n    }\r\n\r\n    // Must be called last\r\n    initAds();\r\n    observeSlots();\r\n  });\r\n\r\n})(window, document);\r\n\r\nfunction detectDevice() {\r\n    const ua = navigator.userAgent;\r\n    if (/Mobi/.test(ua)) return 'mobile';\r\n    if (/Tablet/.test(ua)) return 'tablet';\r\n    return 'desktop';\r\n  }\r\n\r\nasync function getUserGeo() {\r\n    if(localStorage.getItem(\"adngeo\"))\r\n        return localStorage.getItem(\"adngeo\")\r\n    try{\r\n        let res\r\n        await fetch('https://d2dvy74lyjayxz.cloudfront.net/?key=7c4d73767e64472ea502eacdbc47386b', {\r\n            method: 'GET',\r\n        })\r\n        .then((res) => {\r\n        if (!res.ok) throw new Error(`HTTP ${res.status}`);\r\n        return res.json();\r\n        })\r\n        .then((data) => {\r\n        res = data[\"country\"]\r\n        })\r\n        localStorage.setItem(\"adngeo\",res)\r\n        return res\r\n    }catch(e){\r\n        console.log(e);\r\n        if (window.USER_GEO) return window.USER_GEO;\r\n        // Option 2: fallback to 'US'\r\n        console.log(\"Returning US\");\r\n        return 'US';\r\n    }\r\n}\r\n\r\n(function () {\r\n  const endpoint = 'https://adnml.net/data';\r\n  const queue = [];\r\n  let sending = false;\r\n\r\n  const TRACKED_PREBID_EVENTS = [\r\n    'bidWon',\r\n    'bidResponse',\r\n    'noBid',\r\n    'bidTimeout',\r\n    'auctionEnd',\r\n    'requestBids',\r\n    'bidAdjustment',\r\n    'bidderDone'\r\n  ];\r\n\r\n  function normalizeAdUnitCode(adUnitCode) {\r\n    return adUnitCode.replace(/^gpt_unit_/, '').replace(/_\\d+$/, '');\r\n  }\r\n\r\n  function detectDeviceType() {\r\n    const ua = navigator.userAgent;\r\n    if (/Mobi/.test(ua)) return 'mobile';\r\n    if (/Tablet/.test(ua)) return 'tablet';\r\n    return 'desktop';\r\n  }\r\n\r\n  function detectOsType() {\r\n    const ua = navigator.userAgent.toLowerCase();\r\n    if (ua.includes('windows')) return 'Windows';\r\n    if (ua.includes('mac')) return 'macOS';\r\n    if (ua.includes('linux')) return 'Linux';\r\n    if (ua.includes('android')) return 'Android';\r\n    if (ua.includes('iphone') || ua.includes('ipad') || ua.includes('ipod')) return 'iOS';\r\n    return 'Unknown';\r\n  }\r\n\r\n  function detectCountry() {\r\n    const lang = navigator.language || '';\r\n    const parts = lang.split('-');\r\n    return (parts.length > 1 ? parts[1] : 'UNKNOWN').toUpperCase();\r\n  }\r\n\r\n  function getDaypart() {\r\n    const hour = new Date().getHours();\r\n    if (hour >= 6 && hour < 12) return 'morning';\r\n    if (hour >= 12 && hour < 18) return 'afternoon';\r\n    if (hour >= 18 && hour < 22) return 'evening';\r\n    return 'night';\r\n  }\r\n\r\n  function extractUnifiedBidData(eventType, data) {\r\n    data = JSON.parse(\r\n        JSON.stringify(data)\r\n        .replace(/\"ad\":\\s*\\{[^}]*\\}/g, '')  // Remove \"ad\": {...}\r\n        .replace(/\"ad\":\\s*\\[[^\\]]*\\]/g, '') // Remove \"ad\": [...]\r\n        .replace(/\"ad\":\\s*\"[^\"]*\"/g, '')    // Remove \"ad\": \"...\"\r\n        .replace(/\"ad\":\\s*[^,}\\]]+/g, '')   // Remove \"ad\": primitive\r\n        .replace(/,\\s*,/g, ',')              // Clean double commas\r\n        .replace(/,\\s*([}\\]])/g, '$1')       // Clean trailing commas\r\n        .replace(/(\\{)\\s*,/g, '$1')          // Clean leading commas\r\n    );\r\n\r\n    const baseData = {\r\n      eventType: eventType,\r\n      auctionId: data?.auctionId || data?.auctionId || null,\r\n      bidId: data?.bidId || data?.bidderRequestId || null,\r\n      adUnitCode: normalizeAdUnitCode(data?.adUnitCode || data?.slot?.getAdUnitPath?.() || ''),\r\n      sizes: data?.sizes || data?.size || (data?.slot?.getSizes?.() ?\r\n        data.slot.getSizes().map(size => size.getWidth ? [size.getWidth(), size.getHeight()] : size) : null),\r\n      bidder: data?.bidder || data?.bidderCode || null,\r\n      source: data?.source || 'unknown',\r\n      cpm: data?.cpm || data?.price || null,\r\n      currency: data?.currency || 'USD',\r\n      netRevenue: data?.netRevenue || null,\r\n      responseTime: data?.responseTime || data?.timeToRespond || null,\r\n      timeout: data?.timeout || null,\r\n      mediaType: data?.mediaType || null,\r\n      creativeId: data?.creativeId || data?.creative_id || null,\r\n      dealId: data?.dealId || null,\r\n      floorPrice: data?.floorData?.floorMin || data?.floor || null,\r\n      floorCurrency: data?.floorData?.floorCurrency || null,\r\n      bidCount: data?.bidderRequests?.length || data?.bids?.length || null,\r\n      winningBid: data?.eventType === 'bidWon' ? true : false,\r\n      bidRank: data?.bidRank || null,\r\n      errorCode: data?.errorCode || null,\r\n      errorMessage: data?.errorMessage || null,\r\n      rawEventData: data\r\n    };\r\n\r\n    return baseData;\r\n  }\r\n\r\n  async function sendNext() {\r\n    if (queue.length === 0) {\r\n      sending = false;\r\n      return;\r\n    }\r\n\r\n    const event = queue.shift();\r\n    console.log(\"SendNext\",event)\r\n    try {\r\n      await fetch(endpoint, {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n            \"api-key\": \"329e8145-e1c3-4262-a329-a804a3ee051c\"\r\n         },\r\n        body: JSON.stringify(event)\r\n      });\r\n    } catch (e) {\r\n      console.warn('Failed sending event', e);\r\n    } finally {\r\n      setTimeout(sendNext, 300);\r\n    }\r\n  }\r\n\r\n  function trackEvent(eventType, data) {\r\n    try {\r\n      if (eventType !== 'bidWon' && Math.random() > 0.01) {\r\n        //console.log(\"skipping\",eventType)\r\n        return;\r\n      }\r\n      console.log(\"eventType\",eventType)\r\n      const auctionData = extractUnifiedBidData(eventType, data);\r\n\r\n      const consolidatedEvent = {\r\n        eventType: eventType,\r\n        timestamp: Date.now(),\r\n        domain: location.hostname,\r\n        deviceType: detectDeviceType(),\r\n        osType: detectOsType(),\r\n        geoCountry: userGEO,\r\n        daypart: getDaypart(),\r\n        userAgent: navigator.userAgent,\r\n        referrer: document.referrer,\r\n        pageTitle: document.title,\r\n        pageUrl: location.href,\r\n        pageViewport: {\r\n          width: window.innerWidth,\r\n          height: window.innerHeight\r\n        },\r\n        auctionData: auctionData,\r\n        sessionId: getOrCreateSessionId(),\r\n        pageLoadTime: performance.now(),\r\n        connectionType: navigator.connection?.effectiveType || 'unknown'\r\n      };\r\n      console.log(\"consolidatedEvent\",consolidatedEvent)\r\n      queue.push(consolidatedEvent);\r\n\r\n      if (!sending) {\r\n        sending = true;\r\n        sendNext();\r\n      }\r\n\r\n      window.adnqueue = queue;\r\n\r\n    } catch (error) {\r\n      console.warn('Error tracking event:', eventType, error);\r\n    }\r\n  }\r\n\r\n  function getOrCreateSessionId() {\r\n    if (!window.adnSessionId) {\r\n//           width: window.innerWidth,\r\n//           height: window.innerHeight\r\n//         },\r\n//         auctionData: auctionData,\r\n//         sessionId: getOrCreateSessionId(),\r\n//         pageLoadTime: performance.now(),\r\n//         connectionType: navigator.connection?.effectiveType || 'unknown'\r\n//       };\r\n//       console.log(\"consolidatedEvent\",consolidatedEvent)\r\n//       queue.push(consolidatedEvent);\r\n\r\nwindow.adnSessionId = 'sess_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\r\n    }\r\n    return window.adnSessionId;\r\n  }\r\n\r\n  function hookPrebidEvents() {\r\n    if (window.adnpbjs && typeof adnpbjs.onEvent === 'function') {\r\n      TRACKED_PREBID_EVENTS.forEach(eventType => {\r\n        adnpbjs.onEvent(eventType, (args) => {\r\n          trackEvent(eventType, args);\r\n        });\r\n      });\r\n      console.log('Prebid event tracking initialized for:', TRACKED_PREBID_EVENTS);\r\n    } else {\r\n      setTimeout(hookPrebidEvents, 300);\r\n    }\r\n  }\r\n\r\n  function init() {\r\n    console.log('Initializing floor pricing prediction tracker...');\r\n    hookPrebidEvents();\r\n  }\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', init);\r\n  } else {\r\n    init();\r\n  }\r\n\r\n})();\r\n"]}