assets.adobedtm.com
Open in
urlscan Pro
2a02:26f0:6c00:28a::1e80
Public Scan
URL:
http://assets.adobedtm.com/launch-EN0a5ddde896c149af8d8c32b612f47af0-staging.js
Submission: On August 25 via manual from DE
Submission: On August 25 via manual from DE
Form analysis
0 forms found in the DOMText Content
(function() { window._satellite = window._satellite || {}; window._satellite.container = { "buildInfo": { "buildDate": "2021-08-24T12:20:51Z", "turbineBuildDate": "2021-08-11T20:25:49Z", "turbineVersion": "27.2.0" }, "environment": { "id": "EN0a5ddde896c149af8d8c32b612f47af0", "stage": "staging" }, "dataElements": { "isBrandDAD": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.hostname.includes("dekalbasgrowdeltapine") && !(_satellite.getVar("isBrandDEKALB") || _satellite.getVar("isBrandAsgrow") || _satellite.getVar("isBrandDeltapine")); } } }, "content: MKID": { "defaultValue": "", "storageDuration": "pageview", "modulePath": "core/src/lib/dataElements/queryStringParameter.js", "settings": { "name": "marketingId", "caseInsensitive": true } }, "Tool Name | Data Layer": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return digitalData.event[0].eventInfo.toolName; } } }, "isPageAllProduct": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { var pN = location.pathname; var products = [ "/seed-finder/corn/", "/seed-finder/soybeans/", "/seed-finder/silage/", "/seed-finder/cotton/", "/seed-finder/alfalfa/", "/seed-finder/sorghum/", "/seed-finder/canola/"]; var i = 0; for (i; i<products.length; i++) if (pN.includes(products[i])) return true; return false; } } }, "URL - document.location.href | PageInfo": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/pageInfo.js", "settings": { "attribute": "url" } }, "content: responsive UI version": { "defaultValue": "", "forceLowerCase": true, "cleanText": true, "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.radUIVersion" } }, "content: form name": { "defaultValue": "", "cleanText": true, "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.attributes.formName" } }, "Optin - isEnabled | MappingTable": { "defaultValue": "false", "storageDuration": "pageview", "modulePath": "mapping-table/src/lib/dataElements/mappingTable.js", "settings": { "0": { "input": "deruiterseeds.com/en-uk", "method": "contains", "output": "true" }, "1": { "input": "fontanelle", "method": "contains", "output": "true" }, "size": 2, "dataElement": "%URL - document.location.href | PageInfo%", "defaultValueEmpty": true } }, "Tool Name | Data Attribute": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return event.element.getAttribute("data-tool-name"); } } }, "Article Title | Data Attribute": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return event.element.getAttribute("data-article-title"); } } }, "isToolSeedFinder": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/seed-finder"); } } }, "isFinancingFormPage": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/financing.html") } } }, "content: email signups": { "defaultValue": "", "forceLowerCase": true, "cleanText": true, "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.emailsignup.WestBred" } }, "isBrandDADInProd": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return _satellite.getVar("isProduction") && _satellite.getVar("isBrandDAD"); } } }, "content: events": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.event" } }, "isPageOptimize-my-seed": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("optimize-my-seed.html"); } } }, "isPageFarmflex-seed-financing-program": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/farmflex-seed-financing-program"); } } }, "isChannelSite": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return _satellite.getVar("pageDomain").includes(".channel.com"); } } }, "isSiteDAD": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return _satellite.getVar("pageDomain").includes(".dekalbasgrowdeltapine.com"); } } }, "isAgronomy": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/agronomy"); } } }, "content: sub category 1": { "defaultValue": "null", "forceLowerCase": true, "cleanText": true, "storageDuration": "pageview", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.category.subCategory1" } }, "isSeedlingStagePage": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/seedling-stage.html"); } } }, "isProduction": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { //return _satellite.buildInfo.environment == "production"; return true; } } }, "content: sub category 2": { "defaultValue": "null", "forceLowerCase": true, "cleanText": true, "storageDuration": "pageview", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.category.subCategory2" } }, "Form Name | Data Attribute": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return $("[data-form-name]").data().formName; } } }, "Population Optimizer | Single or Multi ": { "defaultValue": "", "cleanText": true, "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { /* if ( digitalData && digitalData.event[0] && digitalData.event[0].eventInfo && digitalData.event[0].eventInfo.singleOrMulti ) { return digitalData.event[0].eventInfo.singleOrMulti; } if (digitalData && digitalData.event.length > 0) { if (digitalData.event[0].eventInfo) { return digitalData.event[0].eventInfo.singleOrMulti; } } */ return digitalData.event[0].eventInfo.singleOrMulti; } } }, "Tool Interaction | Data Layer": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return digitalData.event[0].eventInfo.toolInteraction; } } }, "content: article title": { "defaultValue": "", "forceLowerCase": true, "cleanText": true, "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.pageInfo.articleTitle" } }, "isPageHarvestResults": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/harvest-results/"); } } }, "BrandName | digitalData.page.attributes.brand": { "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.attributes.brand" } }, "content:purl": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/queryStringParameter.js", "settings": { "name": "code", "caseInsensitive": true } }, "content: user language": { "defaultValue": "", "forceLowerCase": true, "cleanText": true, "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.attributes.language" } }, "cookie domain": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "location.hostname" } }, "feedbackModalOpen | DL event": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { if( digitalData && digitalData.event[0] && digitalData.event[0].eventInfo && digitalData.event[0].eventInfo.eventName) { return digitalData.event[0].eventInfo.eventName; } } } }, "content: Seed supplier: state": { "defaultValue": "null", "forceLowerCase": true, "cleanText": true, "storageDuration": "pageview", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.seed.supplierState" } }, "content: launch library": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "_satellite.property.name" } }, "Optin - PreviousPermission | CustomCode JSON": { "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { if(localStorage.getItem("ConsentChanged") != undefined && localStorage.getItem("ConsentChanged").includes("C000")){ return { "aa": localStorage.getItem("ConsentChanged").includes("C0002"), "aam": localStorage.getItem("ConsentChanged").includes("C0004"), "adcloud": localStorage.getItem("ConsentChanged").includes("C0004"), "campaign": localStorage.getItem("ConsentChanged").includes("C0002"), "ecid": localStorage.getItem("ConsentChanged").includes("C0002"), "livefyre": localStorage.getItem("ConsentChanged").includes("C0002"), "mediaaa": localStorage.getItem("ConsentChanged").includes("C0002"), "target": localStorage.getItem("ConsentChanged").includes("C0002") } } } } }, "isPageJourney-from-need-to-seed": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("journey-from-need-to-seed.html"); } } }, "content: toolName": { "defaultValue": "", "forceLowerCase": true, "cleanText": true, "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return digitalData.event[0].eventInfo.toolName; } } }, "content: fips": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.user.profile.fips" } }, "seedFinder: eventName": { "defaultValue": "digitalData.event[0].eventInfo.eventName", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { if( digitalData != undefined && digitalData.event[0] != undefined && digitalData.event[0].eventInfo != undefined && digitalData.event[0].eventInfo.eventName != undefined ) { return digitalData.event[0].eventInfo.eventName; } } } }, "isEmailAndTextAlertsPage": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/email-and-text-alerts.html"); } } }, "pageDomain": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/pageInfo.js", "settings": { "attribute": "hostname" } }, "content: form step": { "defaultValue": "", "forceLowerCase": true, "cleanText": true, "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.attributes.formStep" } }, "isPageHarvest-contestThank-you": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/harvest-contest/thank-you"); } } }, "content: document referrer product filters": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { unescape(document.referrer).split("filter=").pop() } } }, "isOnToolPage": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { for (i = 0; i < digitalData.event.length; i++) if(hasValue(digitalData.event[i].eventInfo.toolName)) return true; return false; } } }, "content : data-link_location": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return event.element.getAttribute("data-link_location"); } } }, "Article Tool Layout | Data Attribute": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return event.element.getAttribute("data-tool-layout"); } } }, "content: path": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/pageInfo.js", "settings": { "attribute": "pathname" } }, "cookie: top level domain": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { var hostArray = document.location.host.split('.'); var domain; switch(hostArray.length) { case 2: domain = hostArray[0]+'.'+hostArray[1]; break; case 3: domain = hostArray[1]+'.'+hostArray[2]; break; case 4: domain = hostArray[1]+'.'+hostArray[2]+'.'+hostArray[3]; break; case 5: domain = hostArray[1]+'.'+hostArray[2]+'.'+hostArray[3]+'.'+hostArray[4]; break; default: _satellite.logger.warn("Either you are on non Production environment or your domain is not whitelisted for tracking."); } return domain; } } }, "Partner Name | Data Layer": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { if(digitalData != undefined && digitalData.event[0] != undefined && digitalData.event[0].eventInfo != undefined && digitalData.event[0].eventInfo.eventName != undefined){ return digitalData.event[0].eventInfo.partnerName; } } } }, "content: hostname": { "defaultValue": "", "forceLowerCase": true, "modulePath": "core/src/lib/dataElements/pageInfo.js", "settings": { "attribute": "hostname" } }, "isBrandDEKALB": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/dekalb.html") || location.pathname.includes("/dekalb/"); } } }, "isBrandDeltapineInProd": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return _satellite.getVar("isProduction") && _satellite.getVar("isBrandDeltapine"); } } }, "isArticle": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return _satellite.getVar('content: article title') != ""; } } }, "isMaturityStagePage": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/maturity-stage.html"); } } }, "Optin - \"OnetrustActiveGroups\" | JS Variable": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "OnetrustActiveGroups" } }, "isBrandAsgrowInProd": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return _satellite.getVar("isProduction") && _satellite.getVar("isBrandAsgrow"); } } }, "isVegetativeStagePage": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/vegetative-stage.html"); } } }, "TargetPropertyTokens | MappingTable": { "modulePath": "mapping-table/src/lib/dataElements/mappingTable.js", "settings": { "0": { "input": "bayer-veg-bayer.adobecqms.net", "method": "contains", "output": "dbb0b706-b9e3-11bd-7f98-aa8946bc4522" }, "1": { "input": "vegetables.bayer.com", "method": "contains", "output": "dbb0b706-b9e3-11bd-7f98-aa8946bc4522" }, "size": 2, "dataElement": "%content: hostname%", "defaultValueEmpty": true } }, "content: campaign bid qs param": { "defaultValue": "", "forceLowerCase": true, "modulePath": "core/src/lib/dataElements/queryStringParameter.js", "settings": { "name": "BID", "caseInsensitive": true } }, "isBecomeSeedsmanPage": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/become-a-seedsman.html"); } } }, "content: user agent": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return thisAgent = navigator.userAgent; } } }, "Tool Step | Data Attribute": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return event.element.getAttribute("data-tool-step"); } } }, "content : data-link_name": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { if( event && event.element && event.element.getAttribute("data-link_name")) { return event.element.getAttribute("data-link_name"); } } } }, "CookieLifetime - ECID | MappingTable": { "defaultValue": "63072000", "storageDuration": "pageview", "modulePath": "mapping-table/src/lib/dataElements/mappingTable.js", "settings": { "0": { "input": "deruiterseeds.com/fr-fr", "method": "contains", "output": "34164000" }, "size": 1, "dataElement": "%URL - document.location.href | PageInfo%", "defaultValueEmpty": true } }, "content: product crop": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { var thisProd = digitalData.product[0].productInfo.productCrop; return thisProd; } } }, "backToProducts": { "defaultValue": "", "storageDuration": "pageview", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.pageInfo.pageName" } }, "Crop Name | Data Attribute": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return event.element.getAttribute("data-crop-selected"); } } }, "content: campaign cid qs param": { "defaultValue": "", "forceLowerCase": true, "modulePath": "core/src/lib/dataElements/queryStringParameter.js", "settings": { "name": "CID", "caseInsensitive": true } }, "ProductDetail - \"digitalData.product[0].productInfo.productName\" | CustomCode": { "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { try { if(typeof digitalData.product[0].productInfo.productName != 'undefined'){ return "digitalData.product[0].productInfo.productName"; } } catch(e){ _satellite.logger.error(e); return false; } } } }, "isPageDisease-shield": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/disease-shield.html"); } } }, "content: page name": { "defaultValue": "", "forceLowerCase": true, "cleanText": true, "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.pageInfo.pageName" } }, "isPageRoundup-ready-2-xtend": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("roundup-ready-2-xtend.html"); } } }, "launch environment": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "_satellite.buildInfo.environment" } }, "isPageThank-you-subscribe": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("thank-you-subscribe.html"); } } }, "isPageWhat-is-strong-cotton": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("what-is-strong-cotton.html"); } } }, "event | eventName": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { if( digitalData != undefined && digitalData.event[0] != undefined && digitalData.event[0].eventInfo != undefined && digitalData.event[0].eventInfo.eventName != undefined ) { return digitalData.event[0].eventInfo.eventName; } } } }, "isPageProductCornDisease-shield": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/products/corn/disease-shield.html"); } } }, "content: product id": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { var thisProd = digitalData.product[0].productInfo.productId; return thisProd; } } }, "SecureSubDomain | MappingTable": { "defaultValue": "smetrics.monsanto.com", "storageDuration": "pageview", "modulePath": "mapping-table/src/lib/dataElements/mappingTable.js", "settings": { "0": { "input": "krugerseed.com", "method": "contains", "output": "smetrics.krugerseed.com" }, "1": { "input": "stoneseed.com", "method": "contains", "output": "smetrics.stoneseed.com" }, "2": { "input": "dekalbasgrowdeltapine.com", "method": "contains", "output": "smetrics.dekalbasgrowdeltapine.com" }, "3": { "input": "channel.com", "method": "contains", "output": "smetrics.channel.com" }, "4": { "input": "asgrow.com.mx", "method": "contains", "output": "smetrics.asgrow.com.mx" }, "5": { "input": "latijereta.com.ar", "method": "contains", "output": "smetrics.latijereta.com.ar" }, "6": { "input": "asgrow.com.ar", "method": "contains", "output": "smetrics.asgrow.com.ar" }, "7": { "input": "westbred.com", "method": "contains", "output": "smetrics.westbred.com" }, "8": { "input": "dekalb.com.co", "method": "contains", "output": "smetrics.dekalb.com.co" }, "9": { "input": "dekalb.com.mx", "method": "contains", "output": "smetrics.dekalb.com.mx" }, "10": { "input": "bayer.ca", "method": "contains", "output": "smetrics.bayer.ca" }, "11": { "input": "bayer.mx", "method": "contains", "output": "smetrics.bayer.mx" }, "12": { "input": "bayer.com.br", "method": "contains", "output": "smetrics.bayer.com.br" }, "13": { "input": "bayer.africa", "method": "contains", "output": "smetrics.bayer.africa" }, "14": { "input": "bayer.cz", "method": "contains", "output": "smetrics.bayer.cz" }, "15": { "input": "bayer.com.tr", "method": "contains", "output": "smetrics.bayer.com.tr" }, "16": { "input": "bayer.sk", "method": "contains", "output": "smetrics.bayer.sk" }, "size": 17, "dataElement": "%cookie domain%", "defaultValueEmpty": true } }, "isBrandDEKALBInProd": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return _satellite.getVar("isProduction") && _satellite.getVar("isBrandDEKALB"); } } }, "isFieldCheckUpSeries": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/field-check-up-series"); } } }, "content: product growing environment": { "defaultValue": "", "forceLowerCase": true, "cleanText": true, "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { var thisProd = digitalData.product[0].productInfo.productGrowingEnvironment; return thisProd; } } }, "Optin - isEnabled | CustomCode": { "storageDuration": "pageview", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { //append domains to the D.E "ByPassConsent -- DomainsList | MappingTable" where you don't want consent to work if(_satellite.getVar('Optin ByPass -- DomainsList | MappingTable') == "true"){ return false } //optin is applicable as per the domain-complaince mapping else if(_satellite.getVar("OptIn - ComplianceType | MappingTable")){ return true; } else { return false; } } } }, "content: product locale": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { var thisProd = digitalData.product[0].productInfo.productLocale; return thisProd; } } }, "RSID - ProductionEnv | MappingTable": { "defaultValue": "", "modulePath": "mapping-table/src/lib/dataElements/mappingTable.js", "settings": { "0": { "input": "asgrow.com.mx", "method": "contains", "output": "monsasgrowsaprod,monsglobalsaprod" }, "1": { "input": "dekalb.com.mx", "method": "contains", "output": "monsdekalbsaprod,monsglobalsaprod" }, "2": { "input": "agro.services", "method": "contains", "output": "monsdadprod,monsglobalnaprod" }, "3": { "input": "asgrow.com.ar", "method": "contains", "output": "monsasgrowsaprod,monsglobalsaprod" }, "4": { "input": "channel.com", "method": "contains", "output": "monsmonschannelglobalreportprod,monsglobalnaprod" }, "5": { "input": "dekalb.co.za", "method": "contains", "output": "monsdekalbaaprod,monsglobalaaprod" }, "6": { "input": "dekalb.com.ar", "method": "contains", "output": "monsdekalbsaprod,monsglobalsaprod" }, "7": { "input": "dekalb.com.br", "method": "contains", "output": "monsdekalbsaprod,monsglobalsaprod" }, "8": { "input": "dekalb.com.co", "method": "contains", "output": "monsdekalbsaprod,monsglobalsaprod" }, "9": { "input": "dekalb.co.uk", "method": "contains", "output": "monsdekalbemeprod,monsglobalemeprod" }, "10": { "input": "dekalbasgrowdeltapine.com", "method": "contains", "output": "monsdadprod,monsglobalnaprod" }, "11": { "input": "deltapine.com.br", "method": "contains", "output": "monsdeltapinesaprod,monsglobalsaprod" }, "12": { "input": "deruiter.com", "method": "contains", "output": "monsderuiterseedsprod,monsglobalvegprod" }, "13": { "input": "deruiterseeds.com", "method": "contains", "output": "monsderuiterseedsprod,monsglobalvegprod" }, "14": { "input": "fontanelle.com", "method": "contains", "output": "monsfontanelleprod,monsglobalnaprod" }, "15": { "input": "goldcountryseed.com", "method": "contains", "output": "monsgoldcountryseedprod,monsglobalnaprod" }, "16": { "input": "hubnerseed.com", "method": "contains", "output": "monshubnerseedprod,monsglobalnaprod" }, "17": { "input": "jungseedgenetics.com", "method": "contains", "output": "monsjungseedprod,monsglobalnaprod" }, "18": { "input": "krugerseed.com", "method": "contains", "output": "monskrugerseedprod,monsglobalnaprod" }, "19": { "input": "latijereta.com.ar", "method": "contains", "output": "monslatijeretaprod,monsglobalsaprod" }, "20": { "input": "lewishybrids.com", "method": "contains", "output": "monslewishybridsprod,monsglobalnaprod" }, "21": { "input": "rea-hybrids.com", "method": "contains", "output": "monsreahybridsprod,monsglobalnaprod" }, "22": { "input": "seminis.at", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "23": { "input": "seminis.co.il", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "24": { "input": "seminis.co.uk", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "25": { "input": "seminis.com.au", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "26": { "input": "seminis.com.br", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "27": { "input": "seminis.com", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "28": { "input": "seminis.de", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "29": { "input": "seminis.fr", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "30": { "input": "seminis.hu", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "31": { "input": "seminis.it", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "32": { "input": "seminis.jo", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "33": { "input": "seminis.jp", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "34": { "input": "seminis.ru", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "35": { "input": "seminis-andina.com", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "36": { "input": "seminis-las.com", "method": "contains", "output": "monsseminisprod,monsglobalvegprod" }, "37": { "input": "specialtyhybrids.com", "method": "contains", "output": "monsspecialtyhybridsprod,monsglobalnaprod" }, "38": { "input": "stewartseeds.com", "method": "contains", "output": "monsstewartseedsprod,monsglobalnaprod" }, "39": { "input": "stoneseed.com", "method": "contains", "output": "monsstoneseedprod,monsglobalnaprod" }, "40": { "input": "myfarmmyrewards.com", "method": "contains", "output": "monsmyfarmmyrewardsprod,monsglobalnaprod" }, "41": { "input": "mycrop.bayer.com", "method": "contains", "output": "monsdadprod,monsglobalnaprod" }, "42": { "input": "seedsmansource.com", "method": "contains", "output": "monsmonschannelglobalreportprod,monsglobalnaprod" }, "43": { "input": "monsoy.com.br", "method": "contains", "output": "monsmonsoy,monsglobalsaprod" }, "44": { "input": "westbred.com", "method": "contains", "output": "monswestbredprodcore3,monsglobalnaprod" }, "45": { "input": "cropscience.bayer", "method": "contains", "output": "monsbcsglobalprod" }, "46": { "input": ".adobecqms.", "method": "contains", "output": "monsglobaldev" }, "47": { "input": "agrowize.com", "method": "contains", "output": "monsglobaldev" }, "48": { "input": "vegetables.bayer.com", "method": "contains", "output": "monsglobalvegprod" }, "49": { "input": "intactarr2pro.uy", "method": "contains", "output": "monsintactalatamprod,monsglobalsaprod" }, "50": { "input": "intactarr2pro.com.py", "method": "contains", "output": "monsintactalatamprod,monsglobalsaprod" }, "51": { "input": "intactarr2pro.com.ar", "method": "contains", "output": "monsintactalatamprod,monsglobalsaprod" }, "52": { "input": "seedgrowth.bayer.com", "method": "contains", "output": "monsseedgrowthglobal" }, "53": { "input": "amazonaws.com", "method": "contains", "output": "monsglobaldev" }, "size": 54, "dataElement": "%content: hostname%", "defaultValueEmpty": true } }, "mySeedList": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.pageInfo.pageName" } }, "Optin - PreOptinApproval | CustomCode JSON": { "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { if(_satellite.getVar('OptIn - ComplianceType | MappingTable') == "CCPA"){ return { "aa":true, "aam":true, "adcloud":true, "campaign":true, "ecid":true, "livefyre":true, "mediaaa":true, "target":true } } if(_satellite.getVar('OptIn - ComplianceType | MappingTable') == "GDPR"){ return { "aa":false, "aam":false, "adcloud":false, "campaign":false, "ecid":false, "livefyre":false, "mediaaa":false, "target":false } } } } }, "isBrandAsgrow": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/asgrow.html") || location.pathname.includes("/asgrow/"); } } }, "Map Pin Click | Find Your Seedsman | Data Layer": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return digitalData.event[0].eventInfo.eventName; } } }, "TargetCategoryAffinity: Path | MappingTable": { "modulePath": "mapping-table/src/lib/dataElements/mappingTable.js", "settings": { "0": { "input": "(open-field-fresh-market|open-field-professional|acik-saha-profesyonelleri|freilandexperten|pieno-campo-mercato-fresco|pofessionnels-du-plein-champ|profesionales-de-campo-abierto|professionnels-du-plein-champ|profissionais-em-campo-aberto|specjalisci-na-otwartym-polu|szabadteri-termesztok)\\.html", "method": "regex", "output": "open field fresh market" }, "1": { "input": "(processing-professional|isleme-profesyonelleri|profesionales-de-campo-abierto|profesionales-de-procesamiento|professionisti-della-lavorazione|professionnels-de-la-transformation|professzionalis-feldolgozok|profissionais-de-beneficiamento|specjalisci-w-zakresie-przetwarzania|verarbeitungsexperten)\\.html", "method": "regex", "output": "processing professional" }, "2": { "input": "(smallholders|kleinbauern|kucuk-ureticiler|ostermelok|pequenos-agricultores|pequenos-productores|pequenos-produtores|petits-exploitants|piccoli-proprietari)\\.html", "method": "regex", "output": "smallholders" }, "3": { "input": "(greenhouse|estufa|gewachshaus|invernadero|passive-protected|sera|serra|serre|uveghaz)\\.html", "method": "regex", "output": "greenhouse" }, "4": { "input": "(high-tech-glasshouse|csucstechnologiaju-uveghaz|estufa-de-alta-tecnologia|high-tech-gewachshaus|high-tech-glasshouse|ileri-teknoloji-sera|invernadero-de-alta-tecnologia|serra-ad-alta-tecnologia|serre-de-haute-technologie|zaawansowana-technologicznie-szklarnia)\\.html", "method": "regex", "output": "high-tech glasshouse" }, "5": { "input": "(home-garden|ev-bahcesi|giardino-domestico|hogar-jardin|jardin-domestico|jardin-potager|konyhakert)\\.html", "method": "regex", "output": "home garden" }, "size": 6, "dataElement": "%content: path%", "defaultValueEmpty": true } }, "isSectionYour-local-team": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/your-local-team"); } } }, "isToolOptimizeMySeed": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/optimize-my-seed"); } } }, "Crop Selected | Data Attribute": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return event.element.getAttribute("data-crop-selected"); } } }, "Partner Name | Data Attribute": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return event.element.getAttribute("data-partner-name"); } } }, "isSectionPlotReport ": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/local-yield-results/"); } } }, "harvestResults: eventName ": { "defaultValue": "digitalData.event[0].eventInfo.eventName", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { if( digitalData && digitalData.event[0] && digitalData.event[0].eventInfo && digitalData.event[0].eventInfo.eventName) { return digitalData.event[0].eventInfo.eventName; } } } }, "isBrandDeltapine": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/deltapine.html") || location.pathname.includes("/deltapine/"); } } }, "content: response UI version": { "defaultValue": "null", "forceLowerCase": true, "cleanText": true, "storageDuration": "pageview", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.radUIVersion" } }, "content: primary category": { "defaultValue": "", "forceLowerCase": true, "cleanText": true, "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.category.primaryCategory" } }, "isSectionAgronomy": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/agronomy/"); } } }, "isPagePerformance-financing-by-john-deere-financial": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/performance-financing-by-john-deere-financial"); } } }, "content: Seed Supplier: Address": { "defaultValue": "unknown address", "forceLowerCase": true, "cleanText": true, "storageDuration": "pageview", "modulePath": "core/src/lib/dataElements/domAttribute.js", "settings": { "elementProperty": "text", "elementSelector": ".dealer-address" } }, "content: toolLayout": { "defaultValue": "", "forceLowerCase": true, "cleanText": true, "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.event[0].eventInfo.toolLayout" } }, "OptIn - ComplianceType | MappingTable": { "defaultValue": "GDPR", "storageDuration": "pageview", "modulePath": "mapping-table/src/lib/dataElements/mappingTable.js", "settings": { "0": { "input": "fontanelle", "method": "contains", "output": "CCPA" }, "1": { "input": "asgrow.com.mx", "method": "contains", "output": "GDPR" }, "2": { "input": "asgrow.com.ar", "method": "contains", "output": "GDPR" }, "3": { "input": "channel.com", "method": "contains", "output": "CCPA" }, "4": { "input": "cropscience.bayer.co.za", "method": "contains", "output": "GDPR" }, "5": { "input": "dekalbasgrowdeltapine.com", "method": "contains", "output": "CCPA" }, "6": { "input": "goldcountryseed.com", "method": "contains", "output": "CCPA" }, "7": { "input": "hubnerseed.com", "method": "contains", "output": "CCPA" }, "8": { "input": "jungseedgenetics.com", "method": "contains", "output": "CCPA" }, "9": { "input": "krugerseed.com", "method": "contains", "output": "CCPA" }, "10": { "input": "lewishybrids.com", "method": "contains", "output": "CCPA" }, "11": { "input": "rea-hybrids.com", "method": "contains", "output": "CCPA" }, "12": { "input": "specialtyhybrids.com", "method": "contains", "output": "CCPA" }, "13": { "input": "stewartseeds.com", "method": "contains", "output": "CCPA" }, "14": { "input": "stoneseed.com", "method": "contains", "output": "CCPA" }, "15": { "input": "westbred.com", "method": "contains", "output": "CCPA" }, "16": { "input": "cropscience.bayer.africa", "method": "contains", "output": "GDPR" }, "17": { "input": "cropscience.bayer.sk", "method": "contains", "output": "GDPR" }, "18": { "input": "cropscience.bayer.cz", "method": "contains", "output": "GDPR" }, "19": { "input": "cropscience.bayer.com.tr", "method": "contains", "output": "GDPR" }, "20": { "input": "seedgrowth.bayer.com", "method": "contains", "output": "CCPA" }, "21": { "input": "latijereta.com.ar", "method": "contains", "output": "GDPR" }, "size": 22, "dataElement": "%URL - document.location.href | PageInfo%", "defaultValueEmpty": true } }, "DAD | TeamLocator | toolStep": { "defaultValue": "", "forceLowerCase": true, "cleanText": true, "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { if( digitalData && digitalData.event[1] && digitalData.event[1].eventInfo && digitalData.event[1].eventInfo.toolStep) { return digitalData.event[1].eventInfo.toolStep; } } } }, "Tool Name v2 | Data Layer": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.attributes.toolName" } }, "content: user country": { "defaultValue": "", "forceLowerCase": true, "cleanText": true, "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.attributes.country" } }, "content: page last published": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/javascriptVariable.js", "settings": { "path": "digitalData.page.pageInfo.pageLastPublished" } }, "isToolSeedBagCalculator": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("bag-conversion.html"); } } }, "Optin ByPass -- DomainsList | MappingTable": { "modulePath": "mapping-table/src/lib/dataElements/mappingTable.js", "settings": { "0": { "input": "agrowize.com", "method": "contains", "output": "true" }, "1": { "input": "adobecqms", "method": "contains", "output": "true" }, "2": { "input": "amazonaws.com", "method": "contains", "output": "true" }, "size": 3, "dataElement": "%content: hostname%", "defaultValueEmpty": true } }, "NonSecureSubDomain | MappingTable": { "defaultValue": "metrics.monsanto.com", "storageDuration": "pageview", "modulePath": "mapping-table/src/lib/dataElements/mappingTable.js", "settings": { "0": { "input": "krugerseed.com", "method": "contains", "output": "metrics.krugerseed.com" }, "1": { "input": "stoneseed.com", "method": "contains", "output": "metrics.stoneseed.com" }, "2": { "input": "dekalbasgrowdeltapine.com", "method": "contains", "output": "metrics.dekalbasgrowdeltapine.com" }, "3": { "input": "channel.com", "method": "contains", "output": "metrics.channel.com" }, "4": { "input": "asgrow.com.mx", "method": "contains", "output": "metrics.asgrow.com.mx" }, "5": { "input": "latijereta.com.ar", "method": "contains", "output": "metrics.latijereta.com.ar" }, "6": { "input": "asgrow.com.ar", "method": "contains", "output": "metrics.asgrow.com.ar" }, "7": { "input": "westbred.com", "method": "contains", "output": "metrics.westbred.com" }, "8": { "input": "dekalb.com.co", "method": "contains", "output": "metrics.dekalb.com.co" }, "9": { "input": "dekalb.com.mx", "method": "contains", "output": "metrics.dekalb.com.mx" }, "10": { "input": "bayer.ca", "method": "contains", "output": "metrics.bayer.ca" }, "11": { "input": "bayer.mx", "method": "contains", "output": "metrics.bayer.mx" }, "12": { "input": "bayer.com.br", "method": "contains", "output": "metrics.bayer.com.br" }, "13": { "input": "bayer.africa", "method": "contains", "output": "metrics.bayer.africa" }, "14": { "input": "bayer.cz", "method": "contains", "output": "metrics.bayer.cz" }, "15": { "input": "bayer.com.tr", "method": "contains", "output": "metrics.bayer.com.tr" }, "16": { "input": "bayer.sk", "method": "contains", "output": "metrics.bayer.sk" }, "size": 17, "dataElement": "%cookie domain%", "defaultValueEmpty": true } }, "Tool Interaction | Data Attribute": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return event.element.getAttribute("data-tool-interation"); // NOTE: typo in the data attribute, so having to use interation instead of interaction above } } }, "isReproductiveStagePage": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/reproductive-stage.html"); } } }, "content: product name": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { var thisProd = digitalData.product[0].productInfo.productName; return thisProd; } } }, "isPageLocal-yield-results": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("local-yield-results.html"); } } }, "content: product brand": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { var thisProd = digitalData.product[0].productInfo.productBrand; return thisProd; } } }, "isHarvestViewPlotPages": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { if(location.pathname.includes('/local-yield-results/')) { return true; } } } }, "isSectionSuccess-stories": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return location.pathname.includes("/success-stories/"); } } }, "TargetVegSeedsCountryGroups | MappingTable": { "forceLowerCase": true, "cleanText": true, "modulePath": "mapping-table/src/lib/dataElements/mappingTable.js", "settings": { "0": { "input": "(veg)\\S+\\.\\S*(ar-ae)", "method": "regex", "output": "ar_ae" }, "1": { "input": "(veg)\\S+\\.\\S*(ar-bh)", "method": "regex", "output": "ar_bh" }, "2": { "input": "(veg)\\S+\\.\\S*(ar-cy)", "method": "regex", "output": "ar_cy" }, "3": { "input": "(veg)\\S+\\.\\S*(ar-eg)", "method": "regex", "output": "ar_eg" }, "4": { "input": "(veg)\\S+\\.\\S*(ar-iq)", "method": "regex", "output": "ar_iq" }, "5": { "input": "(veg)\\S+\\.\\S*(ar-jo)", "method": "regex", "output": "ar_jo" }, "6": { "input": "(veg)\\S+\\.\\S*(ar-kw)", "method": "regex", "output": "ar_kw" }, "7": { "input": "(veg)\\S+\\.\\S*(ar-lb)", "method": "regex", "output": "ar_lb" }, "8": { "input": "(veg)\\S+\\.\\S*(ar-ly)", "method": "regex", "output": "ar_ly" }, "9": { "input": "(veg)\\S+\\.\\S*(ar-om)", "method": "regex", "output": "ar_om" }, "10": { "input": "(veg)\\S+\\.\\S*(ar-ps)", "method": "regex", "output": "ar_ps" }, "11": { "input": "(veg)\\S+\\.\\S*(ar-qa)", "method": "regex", "output": "ar_qa" }, "12": { "input": "(veg)\\S+\\.\\S*(ar-sa)", "method": "regex", "output": "ar_sa" }, "13": { "input": "(veg)\\S+\\.\\S*(ar-sy)", "method": "regex", "output": "ar_sy" }, "14": { "input": "(veg)\\S+\\.\\S*(ar-ye)", "method": "regex", "output": "ar_ye" }, "15": { "input": "(veg)\\S+\\.\\S*(de-de)", "method": "regex", "output": "[\"de_de\", \"de_ch\", \"de_at\"]" }, "16": { "input": "(veg)\\S+\\.\\S*(en-au)", "method": "regex", "output": "en_au" }, "17": { "input": "(veg)\\S+\\.\\S*(en-in)", "method": "regex", "output": "en_in" }, "18": { "input": "(veg)\\S+\\.\\S*(en-lt)", "method": "regex", "output": "[\"en_ee\", \"en_lv\", \"en_lt\"]" }, "19": { "input": "(veg)\\S+\\.\\S*(en-nz)", "method": "regex", "output": "en_nz" }, "20": { "input": "(veg)\\S+\\.\\S*(en-se)", "method": "regex", "output": "[\"en_dk\", \"en_fi\", \"en_is\", \"en_no\", \"en_se\"]" }, "21": { "input": "(veg)\\S+\\.\\S*(en-th)", "method": "regex", "output": "[\"en_th\", \"en_pk\", \"en_id\", \"en_mm\", \"en_ph\", \"en_vn\"]" }, "22": { "input": "(veg)\\S+\\.\\S*(en-uk)", "method": "regex", "output": "[\"en_uk\", \"en_ie\"]" }, "23": { "input": "(veg)\\S+\\.\\S*(en-us)", "method": "regex", "output": "[\"en_us\", \"en_ca\"]" }, "24": { "input": "(veg)\\S+\\.\\S*(en-za)", "method": "regex", "output": "en_za" }, "25": { "input": "(veg)\\S+\\.\\S*(es-cl)", "method": "regex", "output": "[\"es_ar\", \"es_bo\", \"es_cl\", \"es_py\", \"es_uy\"]" }, "26": { "input": "(veg)\\S+\\.\\S*(es-co)", "method": "regex", "output": "[\"es_co\", \"es_ec\", \"es_pe\", \"es_ve\"]" }, "27": { "input": "(veg)\\S+\\.\\S*(es-es)", "method": "regex", "output": "es_es" }, "28": { "input": "(veg)\\S+\\.\\S*(es-mx)", "method": "regex", "output": "es_mx" }, "29": { "input": "(veg)\\S+\\.\\S*(fr-ca)", "method": "regex", "output": "fr_ca" }, "30": { "input": "(veg)\\S+\\.\\S*(fr-fr)", "method": "regex", "output": "fr_fr" }, "31": { "input": "(veg)\\S+\\.\\S*(fr-ma)", "method": "regex", "output": "[\"fr_mo\", \"fr_dz\", \"fr_tn\"]" }, "32": { "input": "(veg)\\S+\\.\\S*(he-il)", "method": "regex", "output": "he_il" }, "33": { "input": "(veg)\\S+\\.\\S*(hu-hu)", "method": "regex", "output": "hu_hu" }, "34": { "input": "(veg)\\S+\\.\\S*(it-it)", "method": "regex", "output": "it_it" }, "35": { "input": "(veg)\\S+\\.\\S*(nl-nl)", "method": "regex", "output": "nl_nl" }, "36": { "input": "(veg)\\S+\\.\\S*(pl-pl)", "method": "regex", "output": "pl_pl" }, "37": { "input": "(veg)\\S+\\.\\S*(pt-br)", "method": "regex", "output": "pt_br" }, "38": { "input": "(veg)\\S+\\.\\S*(ru-ru)", "method": "regex", "output": "[\"ru_ru\", \"ru_kz\", \"ru_uz\", \"ru_by\"]" }, "39": { "input": "(veg)\\S+\\.\\S*(tr-tr)", "method": "regex", "output": "tr_tr" }, "40": { "input": "(veg)\\S+\\.\\S*(uk-ua)", "method": "regex", "output": "uk_ua" }, "41": { "input": "(veg)\\S+\\.\\S*(zh-cn)", "method": "regex", "output": "zh_cn" }, "size": 42, "dataElement": "%URL - document.location.href | PageInfo%", "defaultValueEmpty": true } }, "TargetCategoryAffinity: Product Growing Env | MappingTable": { "modulePath": "mapping-table/src/lib/dataElements/mappingTable.js", "settings": { "0": { "input": "all", "method": "exact match i", "output": "greenhouse,high-tech glasshouse,home garden,open field fresh market,processing professional,smallholders" }, "1": { "input": "todos", "method": "exact match i", "output": "greenhouse,high-tech glasshouse,home garden,open field fresh market,processing professional,smallholders" }, "2": { "input": "tous", "method": "exact match i", "output": "greenhouse,high-tech glasshouse,home garden,open field fresh market,processing professional,smallholders" }, "3": { "input": "tous", "method": "exact match i", "output": "greenhouse,high-tech glasshouse,home garden,open field fresh market,processing professional,smallholders" }, "4": { "input": "alle", "method": "exact match i", "output": "greenhouse,high-tech glasshouse,home garden,open field fresh market,processing professional,smallholders" }, "5": { "input": "tümü", "method": "exact match i", "output": "greenhouse,high-tech glasshouse,home garden,open field fresh market,processing professional,smallholders" }, "6": { "input": "全部", "method": "exact match i", "output": "greenhouse,high-tech glasshouse,home garden,open field fresh market,processing professional,smallholders" }, "7": { "input": "greenhouse", "method": "exact match i", "output": "greenhouse" }, "8": { "input": "estufa", "method": "exact match i", "output": "greenhouse" }, "9": { "input": "gewächshaus", "method": "exact match i", "output": "greenhouse" }, "10": { "input": "invernadero", "method": "exact match i", "output": "greenhouse" }, "11": { "input": "serra", "method": "exact match i", "output": "greenhouse" }, "12": { "input": "serre", "method": "exact match i", "output": "greenhouse" }, "13": { "input": "uprawy tunelowe", "method": "exact match i", "output": "greenhouse" }, "14": { "input": "örtü altı", "method": "exact match i", "output": "greenhouse" }, "15": { "input": "Ð¿Ð»ÐµÐ½Ð¾Ñ‡Ð½Ð°Ñ Ñ‚ÐµÐ¿Ð»Ð¸Ñ†Ð°", "method": "exact match i", "output": "greenhouse" }, "16": { "input": "плівкова теплицÑ", "method": "exact match i", "output": "greenhouse" }, "17": { "input": "חממת פלסטיק", "method": "exact match i", "output": "greenhouse" }, "18": { "input": "بيت بلاستيكي", "method": "exact match i", "output": "greenhouse" }, "19": { "input": "日光温室", "method": "exact match i", "output": "greenhouse" }, "20": { "input": "high-tech glasshouse", "method": "exact match i", "output": "high-tech glasshouse" }, "21": { "input": "glastuinbouw", "method": "exact match i", "output": "high-tech glasshouse" }, "22": { "input": "hightech-gewächshaus", "method": "exact match i", "output": "high-tech glasshouse" }, "23": { "input": "invernadero de alta tecnologÃa", "method": "exact match i", "output": "high-tech glasshouse" }, "24": { "input": "serra riscaldata", "method": "exact match i", "output": "high-tech glasshouse" }, "25": { "input": "serre verre", "method": "exact match i", "output": "high-tech glasshouse" }, "26": { "input": "topraksız tarım", "method": "exact match i", "output": "high-tech glasshouse" }, "27": { "input": "uprawy szklarniowe", "method": "exact match i", "output": "high-tech glasshouse" }, "28": { "input": "оÑÑ‚ÐµÐºÐ»ÐµÐ½Ð½Ð°Ñ Ñ‚ÐµÐ¿Ð»Ð¸Ñ†Ð°", "method": "exact match i", "output": "high-tech glasshouse" }, "29": { "input": "玻璃温室", "method": "exact match i", "output": "high-tech glasshouse" }, "30": { "input": "home garden", "method": "exact match i", "output": "home garden" }, "31": { "input": "processing professionals", "method": "exact match i", "output": "processing professional" }, "32": { "input": "industria", "method": "exact match i", "output": "processing professional" }, "33": { "input": "industria (o confezionato)", "method": "exact match i", "output": "processing professional" }, "34": { "input": "industrie", "method": "exact match i", "output": "processing professional" }, "35": { "input": "industrie/verarbeitung", "method": "exact match i", "output": "processing professional" }, "36": { "input": "przetwórstwo", "method": "exact match i", "output": "processing professional" }, "37": { "input": "sanayici", "method": "exact match i", "output": "processing professional" }, "38": { "input": "переробка", "method": "exact match i", "output": "processing professional" }, "39": { "input": "open field fresh market", "method": "exact match i", "output": "open field fresh market" }, "40": { "input": "aire libre mercado fresco", "method": "exact match i", "output": "open field fresh market" }, "41": { "input": "açık tarla taze tüketim pazarı", "method": "exact match i", "output": "open field fresh market" }, "42": { "input": "campo aberto mercado fresco", "method": "exact match i", "output": "open field fresh market" }, "43": { "input": "campo abierto mercado de productos frescos", "method": "exact match i", "output": "open field fresh market" }, "44": { "input": "frischgemüse", "method": "exact match i", "output": "open field fresh market" }, "45": { "input": "marché de frais plein champ", "method": "exact match i", "output": "open field fresh market" }, "46": { "input": "open field", "method": "exact match i", "output": "open field fresh market" }, "47": { "input": "pieno campo mercato fresco", "method": "exact match i", "output": "open field fresh market" }, "48": { "input": "szabad föld friss zöldség-piac", "method": "exact match i", "output": "open field fresh market" }, "49": { "input": "uprawy polowe – rynek warzyw Å›wieżych", "method": "exact match i", "output": "open field fresh market" }, "50": { "input": "volle grond - versmarkt", "method": "exact match i", "output": "open field fresh market" }, "51": { "input": "відкритий ґрунт ринок Ñвіжих продуктів", "method": "exact match i", "output": "open field fresh market" }, "52": { "input": "открытый грунт рынок Ñвежих овощей", "method": "exact match i", "output": "open field fresh market" }, "53": { "input": "שדה פתוח שוק טרי", "method": "exact match i", "output": "open field fresh market" }, "54": { "input": "Øقل Ù…ÙتوØ", "method": "exact match i", "output": "open field fresh market" }, "55": { "input": "سوق Øقل المكشوÙ", "method": "exact match i", "output": "open field fresh market" }, "56": { "input": "露地鲜食市场", "method": "exact match i", "output": "open field fresh market" }, "57": { "input": "smallholder", "method": "exact match i", "output": "smallholders" }, "58": { "input": "kleinbauer", "method": "exact match i", "output": "smallholders" }, "59": { "input": "pequeño productor", "method": "exact match i", "output": "smallholders" }, "60": { "input": "pequeño agricultor", "method": "exact match i", "output": "smallholders" }, "61": { "input": "piccoli agricoltori", "method": "exact match i", "output": "smallholders" }, "62": { "input": "petit exploitant", "method": "exact match i", "output": "smallholders" }, "63": { "input": "kleine onderneming", "method": "exact match i", "output": "smallholders" }, "64": { "input": "mali producenci", "method": "exact match i", "output": "smallholders" }, "65": { "input": "küçük alanda üretenler", "method": "exact match i", "output": "smallholders" }, "66": { "input": "חקל××™× ×§×˜× ×™×", "method": "exact match i", "output": "smallholders" }, "67": { "input": "صغار المزارعين", "method": "exact match i", "output": "smallholders" }, "68": { "input": "å°å†œæˆ·", "method": "exact match i", "output": "smallholders" }, "size": 69, "dataElement": "%content: product growing environment%", "defaultValueEmpty": true } }, "feedbackModalSubmit | DL event": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { if( digitalData && digitalData.event[0] && digitalData.event[0].eventInfo && digitalData.event[0].eventInfo.aemCompFeedbackType) { return digitalData.event[0].eventInfo.aemCompFeedbackType; } } } }, "content: product filters": { "defaultValue": "", "cleanText": true, "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { //Last Updated 11-27-18 try{ if(document.referrer.indexOf('filter=')>-1){ var pf = unescape(document.referrer.split("?").pop()).split("&")[0].split("{")[1].slice(0, -1) pf0 = pf.split("[")[0] pf1 = pf.split("[")[1].replace(/,/g,'|') pf = pf0 + pf1 pf = pf.slice(0, -1) pf = pf.replace(/"/g,'') return pf } } catch(e){} } } }, "isSiteDADinProd": { "defaultValue": "", "modulePath": "core/src/lib/dataElements/customCode.js", "settings": { "source": function(event) { return _satellite.getVar("isProduction") && _satellite.getVar("isSiteDAD"); } } } }, "extensions": { "adobe-analytics": { "displayName": "Adobe Analytics", "hostedLibFilesBaseUrl": "https://assets.adobedtm.com/extensions/EPbde2f7ca14e540399dcc1f8208860b7b/", "settings": { "orgId": "8A720E205666B0F57F000101@AdobeOrg", "customSetup": { "source": function(s) { s.usePlugins = true; s.ActivityMap.regionExclusions = 'linkExcluded'; s.cookieDomainPeriods = document.location.host.split('.').length-1; s.linkTrackVars = 'pageName,eVar10,eVar44,prop31,eVar12,prop32,prop75,eVar57,prop20,prop46,prop15,events'; s.doPlugins = function() { //storing onetrustactivegroup into prop46 s.prop46 = _satellite.getVar('Optin - "OnetrustActiveGroups" | JS Variable') //brand name tracking s.prop15 = _satellite.getVar("BrandName | digitalData.page.attributes.brand"); //user opted in occurrences s.prop20 = "opted in"; s.events = s.apl(s.events,"event180"); //Performance Timing s.performanceTiming(); //Versioning s.prop75 = 'v031919a|' + s.version + '|' s.prop75 += typeof s.visitor != 'undefined' ? s.visitor.version : 'N/A' s.prop75 += '|' + _satellite.buildInfo.buildDate + '|' + _satellite.buildInfo.environment + '|' + _satellite.property.name; // Page URL s.eVar10 = document.location.host + document.location.pathname; s.prop31 = document.location.host + document.location.pathname; // Full URL s.eVar57 = document.location.href; // Page Querystring or Hash (#) s.eVar12 = (document.location.search=="")?document.location.hash:document.location.search; s.prop32 = (document.location.search=="")?document.location.hash:document.location.search; //File Download Tracking if(s.linkType === "d" && !s.dataLayerDownload){ s.events = s.apl(s.events, 'event27', ',', 0); s.eVar26 = s.linkURL; s.eVar27 = s.linkObject.text; s.linkTrackVars = s.apl(s.linkTrackVars,'eVar26,eVar27'); } //Social Sharing links if(s.linkType == "e"){ var socialLinks = s.linkURL.match(/facebook\.com|twitter\.com|linkedin\.com|whatsapp\.com/); if(socialLinks!=null){ s.abort = true; } } //User Profile Tracking s.eVar44 = _satellite.getVar('content: user profile'); // Copying events 1-500 to 501-1000 if(s.events.includes("event")){ var eventArray = [] eventArray = s.events.split(","); eventArray.forEach(iterator); s.events = s.apl(s.events,eventArray.join(",")); s.linkTrackEvents = s.apl(s.linkTrackEvents,s.events) function iterator(val, index, array){ if(val.includes(":")){ val = val.split(":")[0]; } if(val.includes("=")){ val = val.split("=")[0]; } var temp = parseInt(val.match('event(.*)')[1]) if(temp < 500){ temp = temp + 500; eventArray.push("event"+temp); } } }// end of copy 500+ event function // Youtube Player APIs for video Tracking if (typeof jQuery != "undefined") { var playerInfoList = new Array(); var players = new Array(); var playerCheckInterval, videoTitle, mediaLength, mediaOffset, videoTime, videoTimePrevious; var firstMilestoneFlag = true; var mileStones = [10,25,50,75,99]; var tag = document.createElement('script'); tag.src = "https://www.youtube.com/iframe_api"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); $("iframe[src*='enablejsapi=1']").each(function() { var player = jQuery(this).attr('id'); playerInfoList.push(player); }); var players = new Array(); window.onYouTubeIframeAPIReady = function() { for (x = 0; x < playerInfoList.length; x++) players[x] = new YT.Player(playerInfoList[x], {events: {'onStateChange': onPlayerStateChange}}); } function onPlayerStateChange(event) { videoTitle = event.target.getVideoData().title; mediaLength = Math.floor(event.target.getDuration()); mediaOffset = Math.floor(event.target.getCurrentTime()); if (event.data == YT.PlayerState.PLAYING){ if (mediaOffset == 0){ _satellite.track('trackVideoStart',{videoTitle:videoTitle}); playerCheckInterval = setInterval(mileStoneCheck, 2000); } else { clearInterval(playerCheckInterval); mediaOffset = Math.floor(event.target.getCurrentTime()) videoTimePrevious = mediaOffset for(i=0;i<mileStones.length;i++){ if(mediaOffset<=mileStones[i]){ mileStones.splice(0,i); break; } } playerCheckInterval = setInterval(mileStoneCheck, 2000) } } else if (event.data == YT.PlayerState.ENDED) { clearInterval(playerCheckInterval); _satellite.track('trackVideoEnd',{videoTitle:videoTitle}); videoTime = mediaOffset - videoTimePrevious } function mileStoneCheck() { mediaOffset = Math.floor(event.target.getCurrentTime()); var percComplete = (mediaOffset / mediaLength) * 100; var next_ms = mileStones[0]; if (next_ms <= percComplete) { if (firstMilestoneFlag){ videoTimePrevious = videoTime = mediaOffset; firstMilestoneFlag = false; } else{ videoTime = mediaOffset - videoTimePrevious; videoTimePrevious = mediaOffset; } mileStones.shift(); _satellite.track('trackVideoMilestone',{videoTitle:videoTitle,mileStone:next_ms,videoPlayTime:videoTime.toString()}); } } } //end of function onPlayerStateChange() } // end of Youtube tracking }//end of do plugin s.registerPostTrackCallback(function(s) { // include "s" parameter in function s.clearVars(); }, s); // pass the "s" variable to the function /* Plugin: getPercentPageViewed v2.01 */ s.handlePPVevents=function(){if(!s_c_il)return;for(var i=0,scill=s_c_il.length;i<scill;i++)if(typeof s_c_il[i]!="undefined"&&s_c_il[i]._c&&s_c_il[i]._c=="s_c"){var s=s_c_il[i];break}if(!s)return;if(!s.getPPVid)return;var dh=Math.max(Math.max(s.d.body.scrollHeight,s.d.documentElement.scrollHeight),Math.max(s.d.body.offsetHeight,s.d.documentElement.offsetHeight),Math.max(s.d.body.clientHeight,s.d.documentElement.clientHeight)),vph=window.innerHeight||(s.d.documentElement.clientHeight||s.d.body.clientHeight), st=window.pageYOffset||(window.document.documentElement.scrollTop||window.document.body.scrollTop),vh=st+vph,pv=Math.min(Math.round(vh/dh*100),100),c="",p=s.c_r("s_ppv").split(",")[0];if(!s.c_r("tp")||(s.unescape?s.unescape(p):decodeURIComponent(p))!=s.getPPVid||s.ppvChange=="1"&&(s.c_r("tp")&&dh!=s.c_r("tp"))){s.c_w("tp",dh);s.c_w("s_ppv","")}else c=s.c_r("s_ppv");var a=c&&c.indexOf(",")>-1?c.split(",",4):[],id=a.length>0?a[0]:escape(s.getPPVid),cv=a.length>1?parseInt(a[1]):0,p0=a.length>2?parseInt(a[2]): pv,cy=a.length>3?parseInt(a[3]):0,cn=pv>0?id+","+(pv>cv?pv:cv)+","+p0+","+(vh>cy?vh:cy):"";s.c_w("s_ppv",cn)}; s.getPercentPageViewed=function(pid,change){var s=this,ist=!s.getPPVid?true:false;pid=pid?pid:s.pageName?s.pageName:document.location.href;s.ppvChange=change?change:"1";if(typeof s.linkType!="undefined"&&s.linkType!="0"&&s.linkType!=""&&s.linkType!="e")return"";var v=s.c_r("s_ppv"),a=v.indexOf(",")>-1?v.split(",",4):[];if(a&&a.length<4){for(var i=3;i>0;i--)a[i]=i<a.length?a[i-1]:"";a[0]=""}if(a)a[0]=unescape(a[0]);if(!s.getPPVid||s.getPPVid!=pid){s.getPPVid=pid;s.c_w("s_ppv",escape(s.getPPVid));s.handlePPVevents()}if(ist)if(window.addEventListener){window.addEventListener("load", s.handlePPVevents,false);window.addEventListener("click",s.handlePPVevents,false);window.addEventListener("scroll",s.handlePPVevents,false);window.addEventListener("resize",s.handlePPVevents,false)}else if(window.attachEvent){window.attachEvent("onload",s.handlePPVevents);window.attachEvent("onclick",s.handlePPVevents);window.attachEvent("onscroll",s.handlePPVevents);window.attachEvent("onresize",s.handlePPVevents)}return pid!="-"?a:a[1]}; /* Adobe Consulting Plugin: performanceTiming v.3BETA (Requires AppMeasurement, getPreviousValue recommended) */ s.performanceTiming=function(av){var s=this;try{(av&&(s.ptv=av),"undefined"!==typeof performance)?(s.performanceClear(),performance.clearResourceTimings(),""!==s.c_r("s_ptc")&&s.performanceRead(),0===performance.timing.loadEventEnd)?s.pi=setInterval(function(){s.performanceWriteFull()},250):0<performance.timing.loadEventEnd&&(s.ptc?s.ptc===performance.timing.loadEventEnd&&1===performance.getEntries().length&&(s.pwp=setInterval(function(){s.performanceWritePart()},500)):s.performanceWriteFull()):"undefined"!==typeof s.linkType&&"e"===s.linkType&&s.performanceRead()}catch(c){}}; s.performanceClear=function(){for(var s=this,b="pt.rdr pt.apc pt.dns pt.tcp pt.req pt.rsp pt.prc pt.onl pt.tot pt.pfi pt.ppi".split(" "),a=0;a<b.length;a++)s.contextData[b[a]]="";s[s.ptv]=""}; s.performanceWriteFull=function(){var s=this;try{if(0<performance.timing.loadEventEnd&&(clearInterval(s.pi),""===s.c_r("s_ptc"))){var a=performance.timing,b="";b="pt.rdr$"+s.performanceCheck(a.fetchStart,a.navigationStart);b+="^^pt.apc$"+s.performanceCheck(a.domainLookupStart,a.fetchStart);b+="^^pt.dns$"+s.performanceCheck(a.domainLookupEnd,a.domainLookupStart);b+="^^pt.tcp$"+s.performanceCheck(a.connectEnd,a.connectStart);b+="^^pt.req$"+s.performanceCheck(a.responseStart,a.connectEnd);b+="^^pt.rsp$"+s.performanceCheck(a.responseEnd,a.responseStart);b+="^^pt.prc$"+s.performanceCheck(a.loadEventStart,a.domLoading);b+="^^pt.onl$"+s.performanceCheck(a.loadEventEnd,a.loadEventStart);b+="^^pt.tot$"+s.performanceCheck(a.loadEventEnd,a.navigationStart);s.c_w("s_ptc",b+"^^pt.pfi$1");s.ptv&&s.performanceGetEntries()}}catch(c){return}s.ptc=performance.timing.loadEventEnd}; s.performanceWritePart=function(){var s=this;0<performance.getEntries().length&&(s.ppfe===performance.getEntries().length?clearInterval(s.pwp):s.ppfe=performance.getEntries().length);try{s.tempPe=((performance.getEntries()[performance.getEntries().length-1].responseEnd-performance.getEntries()[0].startTime)/1E3).toFixed(2);s.ptv&&s.performanceGetEntries();var a="pt.rsp$"+s.tempPe+"^^pt.tot$"+s.tempPe+"^^pt.ppi$1";s.c_w("s_ptc",a)}catch(b){}}; s.performanceGetEntries=function(){var s=this;if(""===s.c_r("s_ptc"))try{if(s.c_w("s_ptc",s.tempPe),sessionStorage&&"undefined"!==typeof s.ptv){s.tempPe="";var b=performance.getEntries(),c=b.length,a;for(a=0;a<c;a++)s.tempPe+="!",s.tempPe+=-1<b[a].name.indexOf("?")?b[a].name.split("?")[0]:b[a].name,s.tempPe+="|"+(Math.round(b[a].startTime)/1E3).toFixed(1)+"|"+(Math.round(b[a].duration)/1E3).toFixed(1)+"|"+b[a].initiatorType;sessionStorage.setItem("s_pec",s.tempPe)}}catch(d){}}; s.performanceCheck=function(a,b){if(0<=a&&0<=b)return 6E4>a-b&&0<=a-b?parseFloat((a-b)/1E3).toFixed(2):600}; s.performanceRead=function(){var c=this.c_r("s_ptc").split("^^"),d=c.length,a;0<performance.timing.loadEventEnd&&clearInterval(this.pi);for(a=0;a<d;a++){var b=c[a].split("$");this.contextData[b[0]]=b[1];"pt.tot"===b[0]&&(this._totalPageLoadTime=b[1])}this.c_w("s_ptc","",0);"undefined"!==typeof this.ptv&&("undefined"!==typeof sessionStorage?(this[this.ptv]=sessionStorage.getItem("s_pec"),sessionStorage.removeItem("s_pec")):this[this.ptv]="sessionStorage Unavailable")}; } }, "libraryCode": { "type": "managed", "accounts": { "staging": [ "monsglobaldev" ], "production": [ "%RSID - ProductionEnv | MappingTable%" ], "development": [ "%RSID - ProductionEnv | MappingTable%" ] }, "useActivityMap": true, "scopeTrackerGlobally": true }, "moduleProperties": { "audienceManager": { "config": { "partner": "monsanto", "uuidCookie": { "days": 30, "name": "aam_uuid" } } } }, "trackerProperties": { "charSet": "UTF-8", "currencyCode": "USD", "trackingServer": "%NonSecureSubDomain | MappingTable%", "trackInlineStats": true, "trackDownloadLinks": true, "trackExternalLinks": true, "linkInternalFilters": [ "%cookie: top level domain%", "channel.com", "tel:", "mailto:" ], "trackingServerSecure": "%SecureSubDomain | MappingTable%", "linkDownloadFileTypes": [ "doc", "docx", "eps", "jpg", "png", "svg", "xls", "ppt", "pptx", "pdf", "xlsx", "tab", "csv", "zip", "txt", "vsd", "vxd", "xml", "js", "css", "rar", "exe", "wma", "mov", "avi", "wmv", "mp3", "wav", "m4v" ] } }, "modules": { "adobe-analytics/src/lib/actions/setVariables.js": { "name": "set-variables", "displayName": "Set Variables", "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2016 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ 'use strict'; var getTracker = require('../sharedModules/getTracker'); var applyTrackerVariables = require('../helpers/applyTrackerVariables'); module.exports = function(settings, event) { return getTracker().then(function(tracker) { turbine.logger.info('Set variables on the tracker.'); applyTrackerVariables(tracker, settings.trackerProperties); if (settings.customSetup && settings.customSetup.source) { settings.customSetup.source.call(event.element, event, tracker); } }, function(errorMessage) { turbine.logger.error( 'Cannot set variables: ' + errorMessage ); }); }; } }, "adobe-analytics/src/lib/actions/clearVariables.js": { "name": "clear-variables", "displayName": "Clear Variables", "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2016 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ 'use strict'; var getTracker = require('../sharedModules/getTracker'); module.exports = function() { return getTracker().then(function(tracker) { if (tracker.clearVars) { turbine.logger.info('Clear variables.'); tracker.clearVars(); } }, function(errorMessage) { turbine.logger.error( 'Cannot clear variables: ' + errorMessage ); }); }; } }, "adobe-analytics/src/lib/actions/sendBeacon.js": { "name": "send-beacon", "displayName": "Send Beacon", "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2016 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ 'use strict'; var getTracker = require('../sharedModules/getTracker'); var isLink = function(element) { return element && element.nodeName && element.nodeName.toLowerCase() === 'a'; }; var getLinkName = function(element) { if (isLink(element)) { return element.innerHTML; } else { return 'link clicked'; } }; var sendBeacon = function(tracker, settings, targetElement) { if (settings.type === 'page') { turbine.logger.info('Firing page view beacon.'); tracker.t(); } else { var linkSettings = { linkType: settings.linkType || 'o', linkName: settings.linkName || getLinkName(targetElement) }; turbine.logger.info( 'Firing link track beacon using the values: ' + JSON.stringify(linkSettings) + '.' ); tracker.tl( isLink(targetElement) ? targetElement : 'true', linkSettings.linkType, linkSettings.linkName ); } }; module.exports = function(settings, event) { return getTracker().then(function(tracker) { sendBeacon(tracker, settings, event.element); }, function(errorMessage) { turbine.logger.error( 'Cannot send beacon: ' + errorMessage ); }); }; } }, "adobe-analytics/src/lib/sharedModules/getTracker.js": { "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2016 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ 'use strict'; var cookie = require('@adobe/reactor-cookie'); var Promise = require('@adobe/reactor-promise'); var window = require('@adobe/reactor-window'); var settingsHelper = require('../helpers/settingsHelper'); var augmenters = require('../helpers/augmenters'); var applyTrackerVariables = require('../helpers/applyTrackerVariables'); var loadLibrary = require('../helpers/loadLibrary'); var generateVersion = require('../helpers/generateVersion'); var version = generateVersion(turbine.buildInfo.turbineBuildDate); var BEFORE_SETTINGS_LOAD_PHASE = 'beforeSettings'; var mcidInstance = turbine.getSharedModule('adobe-mcid', 'mcid-instance'); var checkEuCompliance = function(trackingCoookieName) { if (!trackingCoookieName) { return true; } var euCookieValue = cookie.get(trackingCoookieName); return euCookieValue === 'true'; }; var augmentTracker = function(tracker) { return Promise.all(augmenters.map(function(augmenterFn) { var result; // If a tracker augmenter fails, we don't want to fail too. We'll re-throw the error in a // timeout so it still hits the console but doesn't reject our promise. try { result = augmenterFn(tracker); } catch (e) { setTimeout(function() { throw e; }); } return Promise.resolve(result); })).then(function() { return tracker; }); }; var linkVisitorId = function(tracker) { if (mcidInstance) { turbine.logger.info('Setting MCID instance on the tracker.'); tracker.visitor = mcidInstance; } return tracker; }; var updateTrackerVersion = function(tracker) { turbine.logger.info('Setting version on tracker: "' + version + '".'); if (typeof tracker.tagContainerMarker !== 'undefined') { tracker.tagContainerMarker = version; } else if (typeof tracker.version === 'string' && tracker.version.substring(tracker.version.length - 5) !== ('-' + version)) { tracker.version += '-' + version; } return tracker; }; var updateTrackerVariables = function(trackerProperties, customSetup, tracker) { if (customSetup.loadPhase === BEFORE_SETTINGS_LOAD_PHASE && customSetup.source) { turbine.logger.info('Calling custom script before settings.'); customSetup.source.call(window, tracker); } applyTrackerVariables(tracker, trackerProperties || {}); if (customSetup.loadPhase !== BEFORE_SETTINGS_LOAD_PHASE && customSetup.source) { turbine.logger.info('Calling custom script after settings.'); customSetup.source.call(window, tracker); } return tracker; }; var initializeAudienceManagement = function(settings, tracker) { if (settingsHelper.isAudienceManagementEnabled(settings)) { tracker.loadModule('AudienceManagement'); turbine.logger.info('Initializing AudienceManagement module'); tracker.AudienceManagement.setup(settings.moduleProperties.audienceManager.config); } return tracker; }; var initialize = function(settings) { if (checkEuCompliance(settings.trackingCookieName)) { return loadLibrary(settings) .then(augmentTracker) .then(linkVisitorId) .then(updateTrackerVersion) .then(updateTrackerVariables.bind( null, settings.trackerProperties, settings.customSetup || {} )) .then(initializeAudienceManagement.bind(null, settings)); } else { return Promise.reject('EU compliance was not acknowledged by the user.'); } }; var promise = initialize(turbine.getExtensionSettings()); module.exports = function() { return promise; }; } , "name": "get-tracker", "shared": true }, "adobe-analytics/src/lib/sharedModules/augmentTracker.js": { "name": "augment-tracker", "shared": true, "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2017 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ 'use strict'; var augmenters = require('../helpers/augmenters'); module.exports = function(fn) { augmenters.push(fn); }; } }, "adobe-analytics/src/lib/helpers/applyTrackerVariables.js": { "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2016 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ 'use strict'; var queryString = require('@adobe/reactor-query-string'); var window = require('@adobe/reactor-window'); var eVarRegExp = /eVar([0-9]+)/; var propRegExp = /prop([0-9]+)/; var linkTrackVarsKeys = new RegExp('^(eVar[0-9]+)|(prop[0-9]+)|(hier[0-9]+)|campaign|purchaseID|' + 'channel|server|state|zip|pageType$'); var onlyUnique = function(value, index, self) { return self.indexOf(value) === index; }; var buildLinkTrackVars = function(tracker, newTrackerProperties, addEvents) { var linkTrackVarsValues = Object.keys(newTrackerProperties) .filter(linkTrackVarsKeys.test.bind(linkTrackVarsKeys)); if (addEvents) { linkTrackVarsValues.push('events'); } // Merge with the values already set on tracker. linkTrackVarsValues = linkTrackVarsValues.concat((tracker.linkTrackVars || '').split(',')); return linkTrackVarsValues.filter(function(value, index) { return value !== 'None' && value && onlyUnique(value, index, linkTrackVarsValues); }).join(','); }; var buildLinkTrackEvents = function(tracker, eventsData) { var linkTrackEventsValues = eventsData.map(function(event) { return event.name; }); // Merge with the values already set on tracker. linkTrackEventsValues = linkTrackEventsValues.concat((tracker.linkTrackEvents || '').split(',')); return linkTrackEventsValues.filter(function(value, index) { return value !== 'None' && onlyUnique(value, index, linkTrackEventsValues); }).join(','); }; var commaJoin = function(store, keyName, trackerProperties) { store[keyName] = trackerProperties[keyName].join(','); }; var variablesTransform = function(store, keyName, trackerProperties) { var dynamicVariablePrefix = trackerProperties.dynamicVariablePrefix || 'D='; trackerProperties[keyName].forEach(function(variableData) { var value; if (variableData.type === 'value') { value = variableData.value; } else { var eVarData = eVarRegExp.exec(variableData.value); if (eVarData) { value = dynamicVariablePrefix + 'v' + eVarData[1]; } else { var propData = propRegExp.exec(variableData.value); if (propData) { value = dynamicVariablePrefix + 'c' + propData[1]; } } } store[variableData.name] = value; }); }; var transformers = { linkDownloadFileTypes: commaJoin, linkExternalFilters: commaJoin, linkInternalFilters: commaJoin, hierarchies: function(store, keyName, trackerProperties) { trackerProperties[keyName].forEach(function(hierarchyData) { store[hierarchyData.name] = hierarchyData.sections.join(hierarchyData.delimiter); }); }, props: variablesTransform, eVars: variablesTransform, campaign: function(store, keyName, trackerProperties) { if (trackerProperties[keyName].type === 'queryParam') { var queryParams = queryString.parse(window.location.search); store[keyName] = queryParams[trackerProperties[keyName].value]; } else { store[keyName] = trackerProperties[keyName].value; } }, events: function(store, keyName, trackerProperties) { var events = trackerProperties[keyName].map(function(data) { var entry = data.name; if (data.id) { entry = [entry, data.id].join(':'); } if (data.value) { entry = [entry, data.value].join('='); } return entry; }); store[keyName] = events.join(','); } }; module.exports = function(tracker, trackerProperties) { var newProperties = {}; trackerProperties = trackerProperties || {}; Object.keys(trackerProperties).forEach(function(propertyName) { var transform = transformers[propertyName]; var value = trackerProperties[propertyName]; if (transform) { transform(newProperties, propertyName, trackerProperties); } else { newProperties[propertyName] = value; } }); // New events are added to existing tracker events if (newProperties.events) { if (tracker.events && tracker.events.length > 0) { newProperties.events = tracker.events + ',' + newProperties.events; } } var hasEvents = trackerProperties && trackerProperties.events && trackerProperties.events.length > 0; var linkTrackVars = buildLinkTrackVars(tracker, newProperties, hasEvents); if (linkTrackVars) { newProperties.linkTrackVars = linkTrackVars; } var linkTrackEvents = buildLinkTrackEvents(tracker, trackerProperties.events || []); if (linkTrackEvents) { newProperties.linkTrackEvents = linkTrackEvents; } turbine.logger.info( 'Applying the following properties on tracker: "' + JSON.stringify(newProperties) + '".' ); Object.keys(newProperties).forEach(function(propertyName) { tracker[propertyName] = newProperties[propertyName]; }); }; } }, "adobe-analytics/src/lib/helpers/settingsHelper.js": { "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2020 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ 'use strict'; var window = require('@adobe/reactor-window'); var settingsHelper = { LIB_TYPES: { MANAGED: 'managed', PREINSTALLED: 'preinstalled', REMOTE: 'remote', CUSTOM: 'custom' }, MANAGED_LIB_PATHS: { APP_MEASUREMENT: 'AppMeasurement.js', ACTIVITY_MAP: 'AppMeasurement_Module_ActivityMap.js', AUDIENCE_MANAGEMENT: 'AppMeasurement_Module_AudienceManagement.js', }, getReportSuites: function(reportSuitesData) { var reportSuiteValues = reportSuitesData.production; if (reportSuitesData[turbine.buildInfo.environment]) { reportSuiteValues = reportSuitesData[turbine.buildInfo.environment]; } return reportSuiteValues.join(','); }, isActivityMapEnabled: function(settings) { return !(settings.libraryCode && !settings.libraryCode.useActivityMap && settings.libraryCode.useActivityMap === false); }, isAudienceManagementEnabled: function(settings) { var isEnabled = false; // check if audience management module should be enabled if (settings && settings.moduleProperties && settings.moduleProperties.audienceManager && settings.moduleProperties.audienceManager.config && window && window._satellite && window._satellite.company && window._satellite.company.orgId) { isEnabled = true; } return isEnabled; } }; module.exports = settingsHelper; } }, "adobe-analytics/src/lib/helpers/augmenters.js": { "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2017 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ 'use strict'; module.exports = []; } }, "adobe-analytics/src/lib/helpers/loadLibrary.js": { "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2016 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ 'use strict'; var loadScript = require('@adobe/reactor-load-script'); var window = require('@adobe/reactor-window'); var Promise = require('@adobe/reactor-promise'); var settingsHelper = require('./settingsHelper'); var pollHelper = require('./pollHelper'); var createTracker = function(settings, reportSuites) { if (!window.s_gi) { throw new Error( 'Unable to create AppMeasurement tracker, `s_gi` function not found.' + window.AppMeasurement ); } turbine.logger.info('Creating AppMeasurement tracker with these report suites: "' + reportSuites + '"'); var tracker = window.s_gi(reportSuites); if (settings.libraryCode.scopeTrackerGlobally) { turbine.logger.info('Setting the tracker as window.s'); window.s = tracker; } return tracker; }; /** * @param settings * * @return array */ var getUrlsToLoad = function(settings) { var urls = []; switch (settings.libraryCode.type) { case settingsHelper.LIB_TYPES.MANAGED: // load app measurement urls.push(turbine.getHostedLibFileUrl(settingsHelper.MANAGED_LIB_PATHS.APP_MEASUREMENT)); // check if activity map should be loaded if (settingsHelper.isActivityMapEnabled(settings)) { urls.push(turbine.getHostedLibFileUrl(settingsHelper.MANAGED_LIB_PATHS.ACTIVITY_MAP)); } break; case settingsHelper.LIB_TYPES.CUSTOM: urls.push(settings.libraryCode.source); break; case settingsHelper.LIB_TYPES.REMOTE: urls.push(window.location.protocol === 'https:' ? settings.libraryCode.httpsUrl : settings.libraryCode.httpUrl); break; } // check if audience management should be loaded if (settingsHelper.isAudienceManagementEnabled(settings)) { var visitorServiceConfig = { namespace: window._satellite.company.orgId }; settings.moduleProperties.audienceManager.config.visitorService = visitorServiceConfig; urls.push(turbine.getHostedLibFileUrl(settingsHelper.MANAGED_LIB_PATHS.AUDIENCE_MANAGEMENT)); } return urls; }; var loadLibraryScripts = function(settings) { return Promise.all(getUrlsToLoad(settings).map(function(url) { turbine.logger.info("Loading script: " + url); return loadScript(url); })); }; var setReportSuitesOnTracker = function(settings, tracker) { if (settings.libraryCode.accounts) { if (!tracker.sa) { turbine.logger.warn('Cannot set report suites on tracker. `sa` method not available.'); } else { var reportSuites = settingsHelper.getReportSuites(settings.libraryCode.accounts); turbine.logger.info('Setting the following report suites on the tracker: "' + reportSuites + '"'); tracker.sa(reportSuites); } } return tracker; }; var getTrackerFromVariable = function(trackerVariableName) { if (window[trackerVariableName]) { turbine.logger.info('Found tracker located at: "' + trackerVariableName + '".'); return window[trackerVariableName]; } else { throw new Error('Cannot find the global variable name: "' + trackerVariableName + '".'); } }; // returns a promise that resolves with the tracker module.exports = function(settings) { // loads all libraries from urls in parallel var loadLibraries = loadLibraryScripts(settings); // now setup the tracker switch (settings.libraryCode.type) { case settingsHelper.LIB_TYPES.MANAGED: var reportSuites = settingsHelper.getReportSuites(settings.libraryCode.accounts); return loadLibraries .then(createTracker.bind(null, settings, reportSuites)); case settingsHelper.LIB_TYPES.PREINSTALLED: return loadLibraries .then(pollHelper.poll.bind(null, window, settings.libraryCode.trackerVariableName)) .then(setReportSuitesOnTracker.bind(null, settings)); case settingsHelper.LIB_TYPES.CUSTOM: case settingsHelper.LIB_TYPES.REMOTE: return loadLibraries .then(getTrackerFromVariable.bind(null, settings.libraryCode.trackerVariableName)) .then(setReportSuitesOnTracker.bind(null, settings)); default: throw new Error('Cannot load library. Type not supported.'); } }; } }, "adobe-analytics/src/lib/helpers/generateVersion.js": { "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2016 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ // The Launch code version is a 4 characters string. The first character will always be L // followed by year, month, and day codes. // For example: JS-1.4.3-L53O = JS 1.4.3 code, Launch 2015 March 24th release (revision 1) // More info: https://wiki.corp.adobe.com/pages/viewpage.action?spaceKey=tagmanager&title=DTM+Analytics+Code+Versions 'use strict'; var THIRD_OF_DAY = 8; //hours var getDayField = function(date) { return date.getUTCDate().toString(36); }; var getLastChar = function(str) { return str.substr(str.length - 1); }; var getRevision = function(date) { // We are under the assumption that a Turbine version will be release at least 8h apart (max 3 // releases per day). return Math.floor(date.getUTCHours() / THIRD_OF_DAY); }; var getMonthField = function(date) { var monthNumber = date.getUTCMonth() + 1; var revision = getRevision(date); var monthField = (monthNumber + revision * 12).toString(36); return getLastChar(monthField); }; var getYearField = function(date) { return (date.getUTCFullYear() - 2010).toString(36); }; module.exports = function(dateString) { var date = new Date(dateString); if (isNaN(date)) { throw new Error('Invalid date provided'); } return ('L' + getYearField(date) + getMonthField(date) + getDayField(date)).toUpperCase(); }; } }, "adobe-analytics/src/lib/helpers/pollHelper.js": { "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2020 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ 'use strict'; var Promise = require('@adobe/reactor-promise'); var MAX_ITERATIONS = 40; var INTERVAL = 250; var found = function(resolve, variableName, result) { turbine.logger.info('Found property located at: "' + variableName + '"].'); resolve(result); }; var getPromise = function(object, variableName) { return new Promise(function(resolve, reject) { if (object[variableName]) { return found(resolve, variableName, object[variableName]); } var i = 1; var intervalId = setInterval(function() { if (object[variableName]) { found(resolve, variableName, object[variableName]); clearInterval(intervalId); } // give up after 10 seconds if (i >= MAX_ITERATIONS) { clearInterval(intervalId); reject(new Error( 'Bailing out. Cannot find the variable name: "' + variableName + '"].')); } i++; }, INTERVAL); // every 1/4th second }); }; module.exports = { poll: function(object, variableName) { turbine.logger.info('Waiting for the property to become accessible at: "' + variableName + '"].'); return getPromise(object, variableName); } }; } } } }, "adobe-target": { "displayName": "Adobe Target", "hostedLibFilesBaseUrl": "https://assets.adobedtm.com/extensions/EPc2a65477976243e69d5fe1910addf5fb/", "settings": { "targetSettings": { "enabled": true, "timeout": 3000, "version": "1.8.2", "imsOrgId": "8A720E205666B0F57F000101@AdobeOrg", "clientCode": "monsanto", "secureOnly": false, "crossDomain": "disabled", "optinEnabled": true, "serverDomain": "monsanto.tt.omtrdc.net", "urlSizeLimit": 2048, "optoutEnabled": false, "globalMboxName": "target-global-mbox", "bodyHiddenStyle": "body {opacity: 0}", "deviceIdLifetime": 63244800000, "bodyHidingEnabled": true, "sessionIdLifetime": 1860000, "visitorApiTimeout": 2000, "authoringScriptUrl": "//cdn.tt.omtrdc.net/cdn/target-vec.js", "overrideMboxEdgeServer": false, "selectorsPollingTimeout": 5000, "defaultContentHiddenStyle": "visibility: hidden;", "defaultContentVisibleStyle": "visibility: visible;", "overrideMboxEdgeServerTimeout": 1860000, "supplementalDataIdParamTimeout": 30 } }, "modules": { } }, "adobe-mcid": { "displayName": "Experience Cloud ID Service", "hostedLibFilesBaseUrl": "https://assets.adobedtm.com/extensions/EPf0412a5c65e5429ab0e5ed8ba2256510/", "settings": { "orgId": "8A720E205666B0F57F000101@AdobeOrg", "variables": [ { "name": "trackingServer", "value": "%NonSecureSubDomain | MappingTable%" }, { "name": "trackingServerSecure", "value": "%SecureSubDomain | MappingTable%" }, { "name": "cookieDomain", "value": "%cookie: top level domain%" }, { "name": "marketingCloudServer", "value": "%NonSecureSubDomain | MappingTable%" }, { "name": "marketingCloudServerSecure", "value": "%SecureSubDomain | MappingTable%" }, { "name": "cookieLifetime", "value": "%CookieLifetime - ECID | MappingTable%" } ], "optInCallback": "%Optin - isEnabled | CustomCode%", "doesOptInApply": "maybe", "previousPermissions": "%Optin - PreviousPermission | CustomCode JSON%", "isOptInStorageEnabled": false, "preOptInApprovalInput": "%Optin - PreOptinApproval | CustomCode JSON%" }, "modules": { "adobe-mcid/src/lib/sharedModules/mcidInstance.js": { "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2016 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ 'use strict'; var document = require('@adobe/reactor-document'); var VisitorAPI = require('../codeLibrary/VisitorAPI'); var timeUnits = require('../../view/utils/timeUnits'); var transformArrayToObject = function(configs) { var initConfig = configs.reduce(function(obj, config) { var value = /^(true|false)$/i.test(config.value) ? JSON.parse(config.value) : config.value; obj[config.name] = value; return obj; }, {}); return initConfig; }; var initializeVisitorId = function(Visitor) { var extensionSettings = turbine.getExtensionSettings(); if (typeof extensionSettings.orgId !== 'string') { throw new TypeError('Org ID is not a string.'); } var initConfig = transformArrayToObject(extensionSettings.variables || []); var doesOptInApply = extensionSettings.doesOptInApply; if (doesOptInApply) { if (typeof doesOptInApply === 'boolean') { initConfig['doesOptInApply'] = doesOptInApply; } else if (extensionSettings.optInCallback) { initConfig['doesOptInApply'] = extensionSettings.optInCallback; } } var isOptInStorageEnabled = extensionSettings.isOptInStorageEnabled; if (isOptInStorageEnabled) { initConfig['isOptInStorageEnabled'] = isOptInStorageEnabled; } var optInCookieDomain = extensionSettings.optInCookieDomain; if (optInCookieDomain) { initConfig['optInCookieDomain'] = optInCookieDomain; } var optInStorageExpiry = extensionSettings.optInStorageExpiry; if (optInStorageExpiry) { var timeUnit = extensionSettings.timeUnit; if (timeUnit && timeUnits[timeUnit]) { var seconds = optInStorageExpiry * timeUnits[timeUnit]; initConfig['optInStorageExpiry'] = seconds; } } else if (isOptInStorageEnabled === true) { // default is 13 months initConfig['optInStorageExpiry'] = 13 * 30 * 24 * 3600; } var previousPermissions = extensionSettings.previousPermissions; if (previousPermissions) { initConfig['previousPermissions'] = previousPermissions; } var preOptInApprovals = extensionSettings.preOptInApprovals; if (preOptInApprovals) { initConfig['preOptInApprovals'] = preOptInApprovals; } else { var preOptInApprovalInput = extensionSettings.preOptInApprovalInput; if (preOptInApprovalInput) { initConfig['preOptInApprovals'] = preOptInApprovalInput; } } var isIabContext = extensionSettings.isIabContext; if (isIabContext) { initConfig['isIabContext'] = isIabContext; } var instance = Visitor.getInstance(extensionSettings.orgId, initConfig); turbine.logger.info('Created instance using orgId: "' + extensionSettings.orgId + '"'); turbine.logger.info('Set variables: ' + JSON.stringify(initConfig)); // getMarketingCloudVisitorID is called automatically when the instance is created, but // we call it here so that we can log the ID once it has been retrieved from the server. // Calling getMarketingCloudVisitorID multiple times will not result in multiple requests // to the server. instance.getMarketingCloudVisitorID(function(id) { turbine.logger.info('Obtained Marketing Cloud Visitor Id: ' + id); }, true); return instance; }; var excludePathsMatched = function(path) { var extensionSettings = turbine.getExtensionSettings(); var pathExclusions = extensionSettings.pathExclusions || []; return pathExclusions.some(function(pathExclusion) { if (pathExclusion.valueIsRegex) { return new RegExp(pathExclusion.value, 'i').test(path); } else { return pathExclusion.value === path; } }); }; var visitorIdInstance = null; // Overwrite the getVisitorId exposed in Turbine. This is largely for backward compatibility // since DTM supported this method on _satellite. _satellite.getVisitorId = function() { return visitorIdInstance; }; if (excludePathsMatched(document.location.pathname)) { turbine.logger.warn('MCID library not loaded. One of the path exclusions matches the ' + 'current path.'); } else { visitorIdInstance = initializeVisitorId(VisitorAPI); } module.exports = visitorIdInstance; } , "name": "mcid-instance", "shared": true }, "adobe-mcid/src/lib/codeLibrary/VisitorAPI.js": { "script": function(module, exports, require, turbine) { /* istanbul ignore next */ module.exports = function() { var e=function(){"use strict";function e(t){"@babel/helpers - typeof";return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function n(){return{callbacks:{},add:function(e,t){this.callbacks[e]=this.callbacks[e]||[];var n=this.callbacks[e].push(t)-1,i=this;return function(){i.callbacks[e].splice(n,1)}},execute:function(e,t){if(this.callbacks[e]){t=void 0===t?[]:t,t=t instanceof Array?t:[t];try{for(;this.callbacks[e].length;){var n=this.callbacks[e].shift();"function"==typeof n?n.apply(null,t):n instanceof Array&&n[1].apply(n[0],t)}delete this.callbacks[e]}catch(e){}}},executeAll:function(e,t){(t||e&&!U.isObjectEmpty(e))&&Object.keys(this.callbacks).forEach(function(t){var n=void 0!==e[t]?e[t]:"";this.execute(t,n)},this)},hasCallbacks:function(){return Boolean(Object.keys(this.callbacks).length)}}}function i(e,t,n){var i=null==e?void 0:e[t];return void 0===i?n:i}function r(e){for(var t=/^\d+$/,n=0,i=e.length;n<i;n++)if(!t.test(e[n]))return!1;return!0}function a(e,t){for(;e.length<t.length;)e.push("0");for(;t.length<e.length;)t.push("0")}function o(e,t){for(var n=0;n<e.length;n++){var i=parseInt(e[n],10),r=parseInt(t[n],10);if(i>r)return 1;if(r>i)return-1}return 0}function s(e,t){if(e===t)return 0;var n=e.toString().split("."),i=t.toString().split(".");return r(n.concat(i))?(a(n,i),o(n,i)):NaN}function c(e){return e===Object(e)&&0===Object.keys(e).length}function u(e){return"function"==typeof e||e instanceof Array&&e.length}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0};this.log=Ie("log",e,t),this.warn=Ie("warn",e,t),this.error=Ie("error",e,t)}function d(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.cookieName,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=n.cookies;if(!t||!i)return{get:Ne,set:Ne,remove:Ne};var r={remove:function(){i.remove(t)},get:function(){var e=i.get(t),n={};try{n=JSON.parse(e)}catch(e){n={}}return n},set:function(e,n){n=n||{};var a=r.get(),o=Object.assign(a,e);i.set(t,JSON.stringify(o),{domain:n.optInCookieDomain||"",cookieLifetime:n.optInStorageExpiry||3419e4,expires:!0})}};return r}function f(e){this.name=this.constructor.name,this.message=e,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(e).stack}function p(){function e(e,t){var n=Ae(e);return n.length?n.every(function(e){return!!t[e]}):Oe(t)}function t(){M(A),O(de.COMPLETE),_(h.status,h.permissions),s&&m.set(h.permissions,{optInCookieDomain:c,optInStorageExpiry:u}),C.execute(He)}function n(e){return function(n,i){if(!Me(n))throw new Error("[OptIn] Invalid category(-ies). Please use the `OptIn.Categories` enum.");return O(de.CHANGED),Object.assign(A,ke(Ae(n),e)),i||t(),h}}var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=i.doesOptInApply,a=i.previousPermissions,o=i.preOptInApprovals,s=i.isOptInStorageEnabled,c=i.optInCookieDomain,u=i.optInStorageExpiry,l=i.isIabContext,f=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},p=f.cookies,g=xe(a);Fe(g,"Invalid `previousPermissions`!"),Fe(o,"Invalid `preOptInApprovals`!");var m=d({cookieName:"adobeujs-optin"},{cookies:p}),h=this,_=le(h),C=_e(),S=Le(g),I=Le(o),v=s?m.get():{},D={},y=function(e,t){return Pe(e)||t&&Pe(t)?de.COMPLETE:de.PENDING}(S,v),b=function(e,t,n){var i=ke(he,!r);return r?Object.assign({},i,e,t,n):i}(I,S,v),A=Ee(b),O=function(e){return y=e},M=function(e){return b=e};h.deny=n(!1),h.approve=n(!0),h.denyAll=h.deny.bind(h,he),h.approveAll=h.approve.bind(h,he),h.isApproved=function(t){return e(t,h.permissions)},h.isPreApproved=function(t){return e(t,I)},h.fetchPermissions=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t?h.on(de.COMPLETE,e):Ne;return!r||r&&h.isComplete||!!o?e(h.permissions):t||C.add(He,function(){return e(h.permissions)}),n},h.complete=function(){h.status===de.CHANGED&&t()},h.registerPlugin=function(e){if(!e||!e.name||"function"!=typeof e.onRegister)throw new Error(Be);D[e.name]||(D[e.name]=e,e.onRegister.call(e,h))},h.execute=Ue(D),h.memoizeContent=function(e){we(e)&&m.set(e,{optInCookieDomain:c,optInStorageExpiry:u})},h.getMemoizedContent=function(e){var t=m.get();if(t)return t[e]},Object.defineProperties(h,{permissions:{get:function(){return b}},status:{get:function(){return y}},Categories:{get:function(){return fe}},doesOptInApply:{get:function(){return!!r}},isPending:{get:function(){return h.status===de.PENDING}},isComplete:{get:function(){return h.status===de.COMPLETE}},__plugins:{get:function(){return Object.keys(D)}},isIabContext:{get:function(){return l}}})}function g(e,t){function n(){r=null,e.call(e,new f("The call took longer than you wanted!"))}function i(){r&&(clearTimeout(r),e.apply(e,arguments))}if(void 0===t)return e;var r=setTimeout(n,t);return i}function m(){if(window.__tcfapi)return window.__tcfapi;var e=window;if(e===window.top)return void ye.error("__tcfapi not found");for(var t;!t;){e=e.parent;try{e.frames.__tcfapiLocator&&(t=e)}catch(e){}if(e===window.top)break}if(!t)return void ye.error("__tcfapi not found");var n={};return window.__tcfapi=function(e,i,r,a){var o=Math.random()+"",s={__tcfapiCall:{command:e,parameter:a,version:i,callId:o}};n[o]=r,t.postMessage(s,"*")},window.addEventListener("message",function(e){var t=e.data;if("string"==typeof t)try{t=JSON.parse(e.data)}catch(e){}if(t.__tcfapiReturn){var i=t.__tcfapiReturn;"function"==typeof n[i.callId]&&(n[i.callId](i.returnValue,i.success),delete n[i.callId])}},!1),window.__tcfapi}function h(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],i=!0===e.vendor.consents[t],r=n.every(function(t){return!0===e.purpose.consents[t]});return i&&r}function _(){var e=this;e.name="iabPlugin",e.version="0.0.2";var t,n=_e(),i={transparencyAndConsentData:null},r=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return i[e]=t};e.fetchConsentData=function(e){var t=e.callback,n=e.timeout,i=g(t,n);a({callback:i})},e.isApproved=function(e){var t=e.callback,n=e.category,r=e.timeout;if(i.transparencyAndConsentData)return t(null,h(i.transparencyAndConsentData,pe[n],ge[n]));var o=g(function(e,i){t(e,h(i,pe[n],ge[n]))},r);a({category:n,callback:o})},e.onRegister=function(n){t=n;var i=Object.keys(pe),r=function(e,t){!e&&t&&(i.forEach(function(e){var i=h(t,pe[e],ge[e]);n[i?"approve":"deny"](e,!0)}),n.complete())};e.fetchConsentData({callback:r})};var a=function(e){var a=e.callback;if(i.transparencyAndConsentData)return a(null,i.transparencyAndConsentData);n.add("FETCH_CONSENT_DATA",a),o(function(e,a){if(a){var o=Ee(e),s=t.getMemoizedContent("iabConsentHash"),c=De(o.tcString).toString(32);o.consentString=e.tcString,o.hasConsentChangedSinceLastCmpPull=s!==c,r("transparencyAndConsentData",o),t.memoizeContent({iabConsentHash:c})}n.execute("FETCH_CONSENT_DATA",[null,i.transparencyAndConsentData])})},o=function(e){var t=Ve(pe),n=m();"function"==typeof n&&n("getTCData",2,e,t)}}var C="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};Object.assign=Object.assign||function(e){for(var t,n,i=1;i<arguments.length;++i){n=arguments[i];for(t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e};var S,I,v={HANDSHAKE:"HANDSHAKE",GETSTATE:"GETSTATE",PARENTSTATE:"PARENTSTATE"},D={MCMID:"MCMID",MCAID:"MCAID",MCAAMB:"MCAAMB",MCAAMLH:"MCAAMLH",MCOPTOUT:"MCOPTOUT",CUSTOMERIDS:"CUSTOMERIDS"},y={MCMID:"getMarketingCloudVisitorID",MCAID:"getAnalyticsVisitorID",MCAAMB:"getAudienceManagerBlob",MCAAMLH:"getAudienceManagerLocationHint",MCOPTOUT:"isOptedOut",ALLFIELDS:"getVisitorValues"},b={CUSTOMERIDS:"getCustomerIDs"},A={MCMID:"getMarketingCloudVisitorID",MCAAMB:"getAudienceManagerBlob",MCAAMLH:"getAudienceManagerLocationHint",MCOPTOUT:"isOptedOut",MCAID:"getAnalyticsVisitorID",CUSTOMERIDS:"getCustomerIDs",ALLFIELDS:"getVisitorValues"},O={MC:"MCMID",A:"MCAID",AAM:"MCAAMB"},M={MCMID:"MCMID",MCOPTOUT:"MCOPTOUT",MCAID:"MCAID",MCAAMLH:"MCAAMLH",MCAAMB:"MCAAMB"},k={UNKNOWN:0,AUTHENTICATED:1,LOGGED_OUT:2},E={GLOBAL:"global"},T={LAX:"Lax",STRICT:"Strict",NONE:"None"},L={MESSAGES:v,STATE_KEYS_MAP:D,ASYNC_API_MAP:y,SYNC_API_MAP:b,ALL_APIS:A,FIELDGROUP_TO_FIELD:O,FIELDS:M,AUTH_STATE:k,OPT_OUT:E,SAME_SITE_VALUES:T},P=L.STATE_KEYS_MAP,R=function(e){function t(){}function n(t,n){var i=this;return function(){var r=e(0,t),a={};return a[t]=r,i.setStateAndPublish(a),n(r),r}}this.getMarketingCloudVisitorID=function(e){e=e||t;var i=this.findField(P.MCMID,e),r=n.call(this,P.MCMID,e);return void 0!==i?i:r()},this.getVisitorValues=function(e){this.getMarketingCloudVisitorID(function(t){e({MCMID:t})})}},w=L.MESSAGES,N=L.ASYNC_API_MAP,x=L.SYNC_API_MAP,F=function(){function e(){}function t(e,t){var n=this;return function(){return n.callbackRegistry.add(e,t),n.messageParent(w.GETSTATE),""}}function n(n){this[N[n]]=function(i){i=i||e;var r=this.findField(n,i),a=t.call(this,n,i);return void 0!==r?r:a()}}function i(t){this[x[t]]=function(){return this.findField(t,e)||{}}}Object.keys(N).forEach(n,this),Object.keys(x).forEach(i,this)},j=L.ASYNC_API_MAP,V=function(){Object.keys(j).forEach(function(e){this[j[e]]=function(t){this.callbackRegistry.add(e,t)}},this)},U=function(e,t){return t={exports:{}},e(t,t.exports),t.exports}(function(t,n){n.isObjectEmpty=function(e){return e===Object(e)&&0===Object.keys(e).length},n.isValueEmpty=function(e){return""===e||n.isObjectEmpty(e)};var i=function(){var e=navigator.appName,t=navigator.userAgent;return"Microsoft Internet Explorer"===e||t.indexOf("MSIE ")>=0||t.indexOf("Trident/")>=0&&t.indexOf("Windows NT 6")>=0};n.getIeVersion=function(){return document.documentMode?document.documentMode:i()?7:null},n.encodeAndBuildRequest=function(e,t){return e.map(encodeURIComponent).join(t)},n.isObject=function(t){return null!==t&&"object"===e(t)&&!1===Array.isArray(t)},n.defineGlobalNamespace=function(){return window.adobe=n.isObject(window.adobe)?window.adobe:{},window.adobe},n.pluck=function(e,t){return t.reduce(function(t,n){return e[n]&&(t[n]=e[n]),t},Object.create(null))},n.parseOptOut=function(e,t,n){t||(t=n,e.d_optout&&e.d_optout instanceof Array&&(t=e.d_optout.join(",")));var i=parseInt(e.d_ottl,10);return isNaN(i)&&(i=7200),{optOut:t,d_ottl:i}},n.normalizeBoolean=function(e){var t=e;return"true"===e?t=!0:"false"===e&&(t=!1),t}}),H=(U.isObjectEmpty,U.isValueEmpty,U.getIeVersion,U.encodeAndBuildRequest,U.isObject,U.defineGlobalNamespace,U.pluck,U.parseOptOut,U.normalizeBoolean,n),B=L.MESSAGES,G={0:"prefix",1:"orgID",2:"state"},Y=function(e,t){this.parse=function(e){try{var t={};return e.data.split("|").forEach(function(e,n){if(void 0!==e){t[G[n]]=2!==n?e:JSON.parse(e)}}),t}catch(e){}},this.isInvalid=function(n){var i=this.parse(n);if(!i||Object.keys(i).length<2)return!0;var r=e!==i.orgID,a=!t||n.origin!==t,o=-1===Object.keys(B).indexOf(i.prefix);return r||a||o},this.send=function(n,i,r){var a=i+"|"+e;r&&r===Object(r)&&(a+="|"+JSON.stringify(r));try{n.postMessage(a,t)}catch(e){}}},q=L.MESSAGES,X=function(e,t,n,i){function r(e){Object.assign(p,e)}function a(e){Object.assign(p.state,e),Object.assign(p.state.ALLFIELDS,e),p.callbackRegistry.executeAll(p.state)}function o(e){if(!h.isInvalid(e)){m=!1;var t=h.parse(e);p.setStateAndPublish(t.state)}}function s(e){!m&&g&&(m=!0,h.send(i,e))}function c(){r(new R(n._generateID)),p.getMarketingCloudVisitorID(),p.callbackRegistry.executeAll(p.state,!0),C.removeEventListener("message",u)}function u(e){if(!h.isInvalid(e)){var t=h.parse(e);m=!1,C.clearTimeout(p._handshakeTimeout),C.removeEventListener("message",u),r(new F(p)),C.addEventListener("message",o),p.setStateAndPublish(t.state),p.callbackRegistry.hasCallbacks()&&s(q.GETSTATE)}}function l(){g&&postMessage?(C.addEventListener("message",u),s(q.HANDSHAKE),p._handshakeTimeout=setTimeout(c,250)):c()}function d(){C.s_c_in||(C.s_c_il=[],C.s_c_in=0),p._c="Visitor",p._il=C.s_c_il,p._in=C.s_c_in,p._il[p._in]=p,C.s_c_in++}function f(){function e(e){0!==e.indexOf("_")&&"function"==typeof n[e]&&(p[e]=function(){})}Object.keys(n).forEach(e),p.getSupplementalDataID=n.getSupplementalDataID,p.isAllowed=function(){return!0}}var p=this,g=t.whitelistParentDomain;p.state={ALLFIELDS:{}},p.version=n.version,p.marketingCloudOrgID=e,p.cookieDomain=n.cookieDomain||"",p._instanceType="child";var m=!1,h=new Y(e,g);p.callbackRegistry=H(),p.init=function(){d(),f(),r(new V(p)),l()},p.findField=function(e,t){if(void 0!==p.state[e])return t(p.state[e]),p.state[e]},p.messageParent=s,p.setStateAndPublish=a},W=L.MESSAGES,K=L.ALL_APIS,J=L.ASYNC_API_MAP,z=L.FIELDGROUP_TO_FIELD,Q=function(e,t){function n(){var t={};return Object.keys(K).forEach(function(n){var i=K[n],r=e[i]();U.isValueEmpty(r)||(t[n]=r)}),t}function i(){var t=[];return e._loading&&Object.keys(e._loading).forEach(function(n){if(e._loading[n]){var i=z[n];t.push(i)}}),t.length?t:null}function r(t){return function n(r){var a=i();if(a){var o=J[a[0]];e[o](n,!0)}else t()}}function a(e,i){var r=n();t.send(e,i,r)}function o(e){c(e),a(e,W.HANDSHAKE)}function s(e){r(function(){a(e,W.PARENTSTATE)})()}function c(n){function i(i){r.call(e,i),t.send(n,W.PARENTSTATE,{CUSTOMERIDS:e.getCustomerIDs()})}var r=e.setCustomerIDs;e.setCustomerIDs=i}return function(e){if(!t.isInvalid(e)){(t.parse(e).prefix===W.HANDSHAKE?o:s)(e.source)}}},$=function(e,t){function n(e){return function(n){i[e]=n,r++,r===a&&t(i)}}var i={},r=0,a=Object.keys(e).length;Object.keys(e).forEach(function(t){var i=e[t];if(i.fn){var r=i.args||[];r.unshift(n(t)),i.fn.apply(i.context||null,r)}})},Z={get:function(e){e=encodeURIComponent(e);var t=(";"+document.cookie).split(" ").join(";"),n=t.indexOf(";"+e+"="),i=n<0?n:t.indexOf(";",n+1);return n<0?"":decodeURIComponent(t.substring(n+2+e.length,i<0?t.length:i))},set:function(e,t,n){var r=i(n,"cookieLifetime"),a=i(n,"expires"),o=i(n,"domain"),s=i(n,"secure"),c=i(n,"sameSite"),u=s?"Secure":"",l=c?"SameSite="+c+";":"";if(a&&"SESSION"!==r&&"NONE"!==r){var d=""!==t?parseInt(r||0,10):-60;if(d)a=new Date,a.setTime(a.getTime()+1e3*d);else if(1===a){a=new Date;var f=a.getYear();a.setYear(f+2+(f<1900?1900:0))}}else a=0;return e&&"NONE"!==r?(document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(t)+"; path=/;"+(a?" expires="+a.toGMTString()+";":"")+(o?" domain="+o+";":"")+l+u,this.get(e)===t):0},remove:function(e,t){var n=i(t,"domain");n=n?" domain="+n+";":"";var r=i(t,"secure"),a=i(t,"sameSite"),o=r?"Secure":"",s=a?"SameSite="+a+";":"";document.cookie=encodeURIComponent(e)+"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;"+n+s+o}},ee=function(e,t){var n;!e&&C.location&&(e=C.location.hostname),n=e;var i,r=n.split("."),a=t||{};for(i=r.length-2;i>=0;i--)if(a.domain=r.slice(i).join("."),Z.set("test","cookie",a))return Z.remove("test",a),a.domain;return""},te={compare:s,isLessThan:function(e,t){return s(e,t)<0},areVersionsDifferent:function(e,t){return 0!==s(e,t)},isGreaterThan:function(e,t){return s(e,t)>0},isEqual:function(e,t){return 0===s(e,t)}},ne=!!C.postMessage,ie={postMessage:function(e,t,n){var i=1;t&&(ne?n.postMessage(e,t.replace(/([^:]+:\/\/[^\/]+).*/,"$1")):t&&(n.location=t.replace(/#.*$/,"")+"#"+ +new Date+i+++"&"+e))},receiveMessage:function(e,t){var n;try{ne&&(e&&(n=function(n){if("string"==typeof t&&n.origin!==t||"[object Function]"===Object.prototype.toString.call(t)&&!1===t(n.origin))return!1;e(n)}),C.addEventListener?C[e?"addEventListener":"removeEventListener"]("message",n):C[e?"attachEvent":"detachEvent"]("onmessage",n))}catch(e){}}},re=function(e){var t,n,i="0123456789",r="",a="",o=8,s=10,c=10;if(1==e){for(i+="ABCDEF",t=0;16>t;t++)n=Math.floor(Math.random()*o),r+=i.substring(n,n+1),n=Math.floor(Math.random()*o),a+=i.substring(n,n+1),o=16;return r+"-"+a}for(t=0;19>t;t++)n=Math.floor(Math.random()*s),r+=i.substring(n,n+1),0===t&&9==n?s=3:(1==t||2==t)&&10!=s&&2>n?s=10:2<t&&(s=10),n=Math.floor(Math.random()*c),a+=i.substring(n,n+1),0===t&&9==n?c=3:(1==t||2==t)&&10!=c&&2>n?c=10:2<t&&(c=10);return r+a},ae=function(e,t){return{corsMetadata:function(){var e="none",t=!0;return"undefined"!=typeof XMLHttpRequest&&XMLHttpRequest===Object(XMLHttpRequest)&&("withCredentials"in new XMLHttpRequest?e="XMLHttpRequest":"undefined"!=typeof XDomainRequest&&XDomainRequest===Object(XDomainRequest)&&(t=!1),Object.prototype.toString.call(C.HTMLElement).indexOf("Constructor")>0&&(t=!1)),{corsType:e,corsCookiesEnabled:t}}(),getCORSInstance:function(){return"none"===this.corsMetadata.corsType?null:new C[this.corsMetadata.corsType]},fireCORS:function(t,n,i){function r(e){var n;try{if((n=JSON.parse(e))!==Object(n))return void a.handleCORSError(t,null,"Response is not JSON")}catch(e){return void a.handleCORSError(t,e,"Error parsing response as JSON")}try{for(var i=t.callback,r=C,o=0;o<i.length;o++)r=r[i[o]];r(n)}catch(e){a.handleCORSError(t,e,"Error forming callback function")}}var a=this;n&&(t.loadErrorHandler=n);try{var o=this.getCORSInstance();o.open("get",t.corsUrl+"&ts="+(new Date).getTime(),!0),"XMLHttpRequest"===this.corsMetadata.corsType&&(o.withCredentials=!0,o.timeout=e.loadTimeout,o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.onreadystatechange=function(){4===this.readyState&&200===this.status&&r(this.responseText)}),o.onerror=function(e){a.handleCORSError(t,e,"onerror")},o.ontimeout=function(e){a.handleCORSError(t,e,"ontimeout")},o.send(),e._log.requests.push(t.corsUrl)}catch(e){this.handleCORSError(t,e,"try-catch")}},handleCORSError:function(t,n,i){e.CORSErrors.push({corsData:t,error:n,description:i}),t.loadErrorHandler&&("ontimeout"===i?t.loadErrorHandler(!0):t.loadErrorHandler(!1))}}},oe={POST_MESSAGE_ENABLED:!!C.postMessage,DAYS_BETWEEN_SYNC_ID_CALLS:1,MILLIS_PER_DAY:864e5,ADOBE_MC:"adobe_mc",ADOBE_MC_SDID:"adobe_mc_sdid",VALID_VISITOR_ID_REGEX:/^[0-9a-fA-F\-]+$/,ADOBE_MC_TTL_IN_MIN:5,VERSION_REGEX:/vVersion\|((\d+\.)?(\d+\.)?(\*|\d+))(?=$|\|)/,FIRST_PARTY_SERVER_COOKIE:"s_ecid"},se=function(e,t){var n=C.document;return{THROTTLE_START:3e4,MAX_SYNCS_LENGTH:649,throttleTimerSet:!1,id:null,onPagePixels:[],iframeHost:null,getIframeHost:function(e){if("string"==typeof e){var t=e.split("/");return t[0]+"//"+t[2]}},subdomain:null,url:null,getUrl:function(){var t,i="http://fast.",r="?d_nsid="+e.idSyncContainerID+"#"+encodeURIComponent(n.location.origin);return this.subdomain||(this.subdomain="nosubdomainreturned"),e.loadSSL&&(i=e.idSyncSSLUseAkamai?"https://fast.":"https://"),t=i+this.subdomain+".demdex.net/dest5.html"+r,this.iframeHost=this.getIframeHost(t),this.id="destination_publishing_iframe_"+this.subdomain+"_"+e.idSyncContainerID,t},checkDPIframeSrc:function(){var t="?d_nsid="+e.idSyncContainerID+"#"+encodeURIComponent(n.location.href);"string"==typeof e.dpIframeSrc&&e.dpIframeSrc.length&&(this.id="destination_publishing_iframe_"+(e._subdomain||this.subdomain||(new Date).getTime())+"_"+e.idSyncContainerID,this.iframeHost=this.getIframeHost(e.dpIframeSrc),this.url=e.dpIframeSrc+t)},idCallNotProcesssed:null,doAttachIframe:!1,startedAttachingIframe:!1,iframeHasLoaded:null,iframeIdChanged:null,newIframeCreated:null,originalIframeHasLoadedAlready:null,iframeLoadedCallbacks:[],regionChanged:!1,timesRegionChanged:0,sendingMessages:!1,messages:[],messagesPosted:[],messagesReceived:[],messageSendingInterval:oe.POST_MESSAGE_ENABLED?null:100,onPageDestinationsFired:[],jsonForComparison:[],jsonDuplicates:[],jsonWaiting:[],jsonProcessed:[],canSetThirdPartyCookies:!0,receivedThirdPartyCookiesNotification:!1,readyToAttachIframePreliminary:function(){return!(e.idSyncDisableSyncs||e.disableIdSyncs||e.idSyncDisable3rdPartySyncing||e.disableThirdPartyCookies||e.disableThirdPartyCalls)},readyToAttachIframe:function(){return this.readyToAttachIframePreliminary()&&(this.doAttachIframe||e._doAttachIframe)&&(this.subdomain&&"nosubdomainreturned"!==this.subdomain||e._subdomain)&&this.url&&!this.startedAttachingIframe},attachIframe:function(){function e(){r=n.createElement("iframe"),r.sandbox="allow-scripts allow-same-origin",r.title="Adobe ID Syncing iFrame",r.id=i.id,r.name=i.id+"_name",r.style.cssText="display: none; width: 0; height: 0;",r.src=i.url,i.newIframeCreated=!0,t(),n.body.appendChild(r)}function t(e){r.addEventListener("load",function(){r.className="aamIframeLoaded",i.iframeHasLoaded=!0,i.fireIframeLoadedCallbacks(e),i.requestToProcess()})}this.startedAttachingIframe=!0;var i=this,r=n.getElementById(this.id);r?"IFRAME"!==r.nodeName?(this.id+="_2",this.iframeIdChanged=!0,e()):(this.newIframeCreated=!1,"aamIframeLoaded"!==r.className?(this.originalIframeHasLoadedAlready=!1,t("The destination publishing iframe already exists from a different library, but hadn't loaded yet.")):(this.originalIframeHasLoadedAlready=!0,this.iframeHasLoaded=!0,this.iframe=r,this.fireIframeLoadedCallbacks("The destination publishing iframe already exists from a different library, and had loaded alresady."),this.requestToProcess())):e(),this.iframe=r},fireIframeLoadedCallbacks:function(e){this.iframeLoadedCallbacks.forEach(function(t){"function"==typeof t&&t({message:e||"The destination publishing iframe was attached and loaded successfully."})}),this.iframeLoadedCallbacks=[]},requestToProcess:function(t){function n(){r.jsonForComparison.push(t),r.jsonWaiting.push(t),r.processSyncOnPage(t)}var i,r=this;if(t===Object(t)&&t.ibs)if(i=JSON.stringify(t.ibs||[]),this.jsonForComparison.length){var a,o,s,c=!1;for(a=0,o=this.jsonForComparison.length;a<o;a++)if(s=this.jsonForComparison[a],i===JSON.stringify(s.ibs||[])){c=!0;break}c?this.jsonDuplicates.push(t):n()}else n();if((this.receivedThirdPartyCookiesNotification||!oe.POST_MESSAGE_ENABLED||this.iframeHasLoaded)&&this.jsonWaiting.length){var u=this.jsonWaiting.shift();this.process(u),this.requestToProcess()}e.idSyncDisableSyncs||e.disableIdSyncs||!this.iframeHasLoaded||!this.messages.length||this.sendingMessages||(this.throttleTimerSet||(this.throttleTimerSet=!0,setTimeout(function(){r.messageSendingInterval=oe.POST_MESSAGE_ENABLED?null:150},this.THROTTLE_START)),this.sendingMessages=!0,this.sendMessages())},getRegionAndCheckIfChanged:function(t,n){var i=e._getField("MCAAMLH"),r=t.d_region||t.dcs_region;return i?r&&(e._setFieldExpire("MCAAMLH",n),e._setField("MCAAMLH",r),parseInt(i,10)!==r&&(this.regionChanged=!0,this.timesRegionChanged++,e._setField("MCSYNCSOP",""),e._setField("MCSYNCS",""),i=r)):(i=r)&&(e._setFieldExpire("MCAAMLH",n),e._setField("MCAAMLH",i)),i||(i=""),i},processSyncOnPage:function(e){var t,n,i,r;if((t=e.ibs)&&t instanceof Array&&(n=t.length))for(i=0;i<n;i++)r=t[i],r.syncOnPage&&this.checkFirstPartyCookie(r,"","syncOnPage")},process:function(e){var t,n,i,r,a,o=encodeURIComponent,s=!1;if((t=e.ibs)&&t instanceof Array&&(n=t.length))for(s=!0,i=0;i<n;i++)r=t[i],a=[o("ibs"),o(r.id||""),o(r.tag||""),U.encodeAndBuildRequest(r.url||[],","),o(r.ttl||""),"","",r.fireURLSync?"true":"false"],r.syncOnPage||(this.canSetThirdPartyCookies?this.addMessage(a.join("|")):r.fireURLSync&&this.checkFirstPartyCookie(r,a.join("|")));s&&this.jsonProcessed.push(e)},checkFirstPartyCookie:function(t,n,i){var r="syncOnPage"===i,a=r?"MCSYNCSOP":"MCSYNCS";e._readVisitor();var o,s,c=e._getField(a),u=!1,l=!1,d=Math.ceil((new Date).getTime()/oe.MILLIS_PER_DAY);c?(o=c.split("*"),s=this.pruneSyncData(o,t.id,d),u=s.dataPresent,l=s.dataValid,u&&l||this.fireSync(r,t,n,o,a,d)):(o=[],this.fireSync(r,t,n,o,a,d))},pruneSyncData:function(e,t,n){var i,r,a,o=!1,s=!1;for(r=0;r<e.length;r++)i=e[r],a=parseInt(i.split("-")[1],10),i.match("^"+t+"-")?(o=!0,n<a?s=!0:(e.splice(r,1),r--)):n>=a&&(e.splice(r,1),r--);return{dataPresent:o,dataValid:s}},manageSyncsSize:function(e){if(e.join("*").length>this.MAX_SYNCS_LENGTH)for(e.sort(function(e,t){return parseInt(e.split("-")[1],10)-parseInt(t.split("-")[1],10)});e.join("*").length>this.MAX_SYNCS_LENGTH;)e.shift()},fireSync:function(t,n,i,r,a,o){var s=this;if(t){if("img"===n.tag){var c,u,l,d,f=n.url,p=e.loadSSL?"https:":"http:";for(c=0,u=f.length;c<u;c++){l=f[c],d=/^\/\//.test(l);var g=new Image;g.addEventListener("load",function(t,n,i,r){return function(){s.onPagePixels[t]=null,e._readVisitor();var o,c=e._getField(a),u=[];if(c){o=c.split("*");var l,d,f;for(l=0,d=o.length;l<d;l++)f=o[l],f.match("^"+n.id+"-")||u.push(f)}s.setSyncTrackingData(u,n,i,r)}}(this.onPagePixels.length,n,a,o)),g.src=(d?p:"")+l,this.onPagePixels.push(g)}}}else this.addMessage(i),this.setSyncTrackingData(r,n,a,o)},addMessage:function(t){var n=encodeURIComponent,i=n(e._enableErrorReporting?"---destpub-debug---":"---destpub---");this.messages.push((oe.POST_MESSAGE_ENABLED?"":i)+t)},setSyncTrackingData:function(t,n,i,r){t.push(n.id+"-"+(r+Math.ceil(n.ttl/60/24))),this.manageSyncsSize(t),e._setField(i,t.join("*"))},sendMessages:function(){var e,t=this,n="",i=encodeURIComponent;this.regionChanged&&(n=i("---destpub-clear-dextp---"),this.regionChanged=!1),this.messages.length?oe.POST_MESSAGE_ENABLED?(e=n+i("---destpub-combined---")+this.messages.join("%01"),this.postMessage(e),this.messages=[],this.sendingMessages=!1):(e=this.messages.shift(),this.postMessage(n+e),setTimeout(function(){t.sendMessages()},this.messageSendingInterval)):this.sendingMessages=!1},postMessage:function(e){ie.postMessage(e,this.url,this.iframe.contentWindow),this.messagesPosted.push(e)},receiveMessage:function(e){var t,n=/^---destpub-to-parent---/;"string"==typeof e&&n.test(e)&&(t=e.replace(n,"").split("|"),"canSetThirdPartyCookies"===t[0]&&(this.canSetThirdPartyCookies="true"===t[1],this.receivedThirdPartyCookiesNotification=!0,this.requestToProcess()),this.messagesReceived.push(e))},processIDCallData:function(i){(null==this.url||i.subdomain&&"nosubdomainreturned"===this.subdomain)&&("string"==typeof e._subdomain&&e._subdomain.length?this.subdomain=e._subdomain:this.subdomain=i.subdomain||"",this.url=this.getUrl()),i.ibs instanceof Array&&i.ibs.length&&(this.doAttachIframe=!0),this.readyToAttachIframe()&&(e.idSyncAttachIframeOnWindowLoad?(t.windowLoaded||"complete"===n.readyState||"loaded"===n.readyState)&&this.attachIframe():this.attachIframeASAP()),"function"==typeof e.idSyncIDCallResult?e.idSyncIDCallResult(i):this.requestToProcess(i),"function"==typeof e.idSyncAfterIDCallResult&&e.idSyncAfterIDCallResult(i)},canMakeSyncIDCall:function(t,n){return e._forceSyncIDCall||!t||n-t>oe.DAYS_BETWEEN_SYNC_ID_CALLS},attachIframeASAP:function(){function e(){t.startedAttachingIframe||(n.body?t.attachIframe():setTimeout(e,30))}var t=this;e()}}},ce={audienceManagerServer:{},audienceManagerServerSecure:{},cookieDomain:{},cookieLifetime:{},cookieName:{},doesOptInApply:{type:"boolean"},disableThirdPartyCalls:{type:"boolean"},discardTrackingServerECID:{type:"boolean"},idSyncAfterIDCallResult:{},idSyncAttachIframeOnWindowLoad:{type:"boolean"},idSyncContainerID:{},idSyncDisable3rdPartySyncing:{type:"boolean"},disableThirdPartyCookies:{type:"boolean"},idSyncDisableSyncs:{type:"boolean"},disableIdSyncs:{type:"boolean"},idSyncIDCallResult:{},idSyncSSLUseAkamai:{type:"boolean"},isCoopSafe:{type:"boolean"},isIabContext:{type:"boolean"},isOptInStorageEnabled:{type:"boolean"},loadSSL:{type:"boolean"},loadTimeout:{},marketingCloudServer:{},marketingCloudServerSecure:{},optInCookieDomain:{},optInStorageExpiry:{},overwriteCrossDomainMCIDAndAID:{type:"boolean"},preOptInApprovals:{},previousPermissions:{},resetBeforeVersion:{},sdidParamExpiry:{},serverState:{},sessionCookieName:{},secureCookie:{type:"boolean"},sameSiteCookie:{},takeTimeoutMetrics:{},trackingServer:{},trackingServerSecure:{},useLocalStorage:{type:"boolean"},whitelistIframeDomains:{},whitelistParentDomain:{}},ue={getConfigNames:function(){return Object.keys(ce)},getConfigs:function(){return ce},normalizeConfig:function(e,t){return ce[e]&&"boolean"===ce[e].type?"function"!=typeof t?t:t():t}},le=function(e){var t={};return e.on=function(e,n,i){if(!n||"function"!=typeof n)throw new Error("[ON] Callback should be a function.");t.hasOwnProperty(e)||(t[e]=[]);var r=t[e].push({callback:n,context:i})-1;return function(){t[e].splice(r,1),t[e].length||delete t[e]}},e.off=function(e,n){t.hasOwnProperty(e)&&(t[e]=t[e].filter(function(e){if(e.callback!==n)return e}))},e.publish=function(e){if(t.hasOwnProperty(e)){var n=[].slice.call(arguments,1);t[e].slice(0).forEach(function(e){e.callback.apply(e.context,n)})}},e.publish},de={PENDING:"pending",CHANGED:"changed",COMPLETE:"complete"},fe={AAM:"aam",ADCLOUD:"adcloud",ANALYTICS:"aa",CAMPAIGN:"campaign",ECID:"ecid",LIVEFYRE:"livefyre",TARGET:"target",MEDIA_ANALYTICS:"mediaaa"},pe=(S={},t(S,fe.AAM,565),t(S,fe.ECID,565),S),ge=(I={},t(I,fe.AAM,[1,10]),t(I,fe.ECID,[1,10]),I),me=["videoaa","iabConsentHash"],he=function(e){return Object.keys(e).map(function(t){return e[t]})}(fe),_e=function(){var e={};return e.callbacks=Object.create(null),e.add=function(t,n){if(!u(n))throw new Error("[callbackRegistryFactory] Make sure callback is a function or an array of functions.");e.callbacks[t]=e.callbacks[t]||[];var i=e.callbacks[t].push(n)-1;return function(){e.callbacks[t].splice(i,1)}},e.execute=function(t,n){if(e.callbacks[t]){n=void 0===n?[]:n,n=n instanceof Array?n:[n];try{for(;e.callbacks[t].length;){var i=e.callbacks[t].shift();"function"==typeof i?i.apply(null,n):i instanceof Array&&i[1].apply(i[0],n)}delete e.callbacks[t]}catch(e){}}},e.executeAll=function(t,n){(n||t&&!c(t))&&Object.keys(e.callbacks).forEach(function(n){var i=void 0!==t[n]?t[n]:"";e.execute(n,i)},e)},e.hasCallbacks=function(){return Boolean(Object.keys(e.callbacks).length)},e},Ce=function(){},Se=function(e){var t=window,n=t.console;return!!n&&"function"==typeof n[e]},Ie=function(e,t,n){return n()?function(){if(Se(e)){for(var n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];console[e].apply(console,[t].concat(i))}}:Ce},ve=l,De=function(){for(var e=[],t=0;t<256;t++){for(var n=t,i=0;i<8;i++)n=1&n?3988292384^n>>>1:n>>>1;e.push(n)}return function(t,n){t=unescape(encodeURIComponent(t)),n||(n=0),n^=-1;for(var i=0;i<t.length;i++){var r=255&(n^t.charCodeAt(i));n=n>>>8^e[r]}return(n^=-1)>>>0}}(),ye=new ve("[ADOBE OPT-IN]"),be=function(t,n){return e(t)===n},Ae=function(e,t){return e instanceof Array?e:be(e,"string")?[e]:t||[]},Oe=function(e){var t=Object.keys(e);return!!t.length&&t.every(function(t){return!0===e[t]})},Me=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!(!e||Te(e))&&Ae(e).every(function(e){return he.indexOf(e)>-1||t&&me.indexOf(e)>-1})},ke=function(e,t){return e.reduce(function(e,n){return e[n]=t,e},{})},Ee=function(e){return JSON.parse(JSON.stringify(e))},Te=function(e){return"[object Array]"===Object.prototype.toString.call(e)&&!e.length},Le=function(e){if(we(e))return e;try{return JSON.parse(e)}catch(e){return{}}},Pe=function(e){return void 0===e||(we(e)?Me(Object.keys(e),!0):Re(e))},Re=function(e){try{var t=JSON.parse(e);return!!e&&be(e,"string")&&Me(Object.keys(t),!0)}catch(e){return!1}},we=function(e){return null!==e&&be(e,"object")&&!1===Array.isArray(e)},Ne=function(){},xe=function(e){return be(e,"function")?e():e},Fe=function(e,t){Pe(e)||ye.error("".concat(t))},je=function(e){return Object.keys(e).map(function(t){return e[t]})},Ve=function(e){return je(e).filter(function(e,t,n){return n.indexOf(e)===t})},Ue=function(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.command,i=t.params,r=void 0===i?{}:i,a=t.callback,o=void 0===a?Ne:a;if(!n||-1===n.indexOf("."))throw new Error("[OptIn.execute] Please provide a valid command.");try{var s=n.split("."),c=e[s[0]],u=s[1];if(!c||"function"!=typeof c[u])throw new Error("Make sure the plugin and API name exist.");var l=Object.assign(r,{callback:o});c[u].call(c,l)}catch(e){ye.error("[execute] Something went wrong: "+e.message)}}};f.prototype=Object.create(Error.prototype), f.prototype.constructor=f;var He="fetchPermissions",Be="[OptIn#registerPlugin] Plugin is invalid.";p.Categories=fe,p.TimeoutError=f;var Ge=Object.freeze({OptIn:p,IabPlugin:_}),Ye=function(e,t){e.publishDestinations=function(n){var i=arguments[1],r=arguments[2];try{r="function"==typeof r?r:n.callback}catch(e){r=function(){}}var a=t;if(!a.readyToAttachIframePreliminary())return void r({error:"The destination publishing iframe is disabled in the Visitor library."});if("string"==typeof n){if(!n.length)return void r({error:"subdomain is not a populated string."});if(!(i instanceof Array&&i.length))return void r({error:"messages is not a populated array."});var o=!1;if(i.forEach(function(e){"string"==typeof e&&e.length&&(a.addMessage(e),o=!0)}),!o)return void r({error:"None of the messages are populated strings."})}else{if(!U.isObject(n))return void r({error:"Invalid parameters passed."});var s=n;if("string"!=typeof(n=s.subdomain)||!n.length)return void r({error:"config.subdomain is not a populated string."});var c=s.urlDestinations;if(!(c instanceof Array&&c.length))return void r({error:"config.urlDestinations is not a populated array."});var u=[];c.forEach(function(e){U.isObject(e)&&(e.hideReferrer?e.message&&a.addMessage(e.message):u.push(e))});!function e(){u.length&&setTimeout(function(){var t=new Image,n=u.shift();t.src=n.url,a.onPageDestinationsFired.push(n),e()},100)}()}a.iframe?(r({message:"The destination publishing iframe is already attached and loaded."}),a.requestToProcess()):!e.subdomain&&e._getField("MCMID")?(a.subdomain=n,a.doAttachIframe=!0,a.url=a.getUrl(),a.readyToAttachIframe()?(a.iframeLoadedCallbacks.push(function(e){r({message:"Attempted to attach and load the destination publishing iframe through this API call. Result: "+(e.message||"no result")})}),a.attachIframe()):r({error:"Encountered a problem in attempting to attach and load the destination publishing iframe through this API call."})):a.iframeLoadedCallbacks.push(function(e){r({message:"Attempted to attach and load the destination publishing iframe through normal Visitor API processing. Result: "+(e.message||"no result")})})}},qe=function e(t){function n(e,t){return e>>>t|e<<32-t}for(var i,r,a=Math.pow,o=a(2,32),s="",c=[],u=8*t.length,l=e.h=e.h||[],d=e.k=e.k||[],f=d.length,p={},g=2;f<64;g++)if(!p[g]){for(i=0;i<313;i+=g)p[i]=g;l[f]=a(g,.5)*o|0,d[f++]=a(g,1/3)*o|0}for(t+="€";t.length%64-56;)t+="\0";for(i=0;i<t.length;i++){if((r=t.charCodeAt(i))>>8)return;c[i>>2]|=r<<(3-i)%4*8}for(c[c.length]=u/o|0,c[c.length]=u,r=0;r<c.length;){var m=c.slice(r,r+=16),h=l;for(l=l.slice(0,8),i=0;i<64;i++){var _=m[i-15],C=m[i-2],S=l[0],I=l[4],v=l[7]+(n(I,6)^n(I,11)^n(I,25))+(I&l[5]^~I&l[6])+d[i]+(m[i]=i<16?m[i]:m[i-16]+(n(_,7)^n(_,18)^_>>>3)+m[i-7]+(n(C,17)^n(C,19)^C>>>10)|0);l=[v+((n(S,2)^n(S,13)^n(S,22))+(S&l[1]^S&l[2]^l[1]&l[2]))|0].concat(l),l[4]=l[4]+v|0}for(i=0;i<8;i++)l[i]=l[i]+h[i]|0}for(i=0;i<8;i++)for(r=3;r+1;r--){var D=l[i]>>8*r&255;s+=(D<16?0:"")+D.toString(16)}return s},Xe=function(e,t){return"SHA-256"!==t&&"SHA256"!==t&&"sha256"!==t&&"sha-256"!==t||(e=qe(e)),e},We=function(e){return String(e).trim().toLowerCase()},Ke=Ge.OptIn;U.defineGlobalNamespace(),window.adobe.OptInCategories=Ke.Categories;var Je=function(t,n,i){function r(){S._customerIDsHashChanged=!1}function a(e){var t=e;return function(e){var n=e||A.location.href;try{var i=S._extractParamFromUri(n,t);if(i)return q.parsePipeDelimetedKeyValues(i)}catch(e){}}}function o(e){function t(e,t,n){e&&e.match(oe.VALID_VISITOR_ID_REGEX)&&(n===T&&(b=!0),t(e))}t(e[T],S.setMarketingCloudVisitorID,T),S._setFieldExpire(x,-1),t(e[w],S.setAnalyticsVisitorID)}function s(e){e=e||{},S._supplementalDataIDCurrent=e.supplementalDataIDCurrent||"",S._supplementalDataIDCurrentConsumed=e.supplementalDataIDCurrentConsumed||{},S._supplementalDataIDLast=e.supplementalDataIDLast||"",S._supplementalDataIDLastConsumed=e.supplementalDataIDLastConsumed||{}}function c(e){function t(e,t,n){return n=n?n+="|":n,n+=e+"="+encodeURIComponent(t)}function n(e,n){var i=n[0],r=n[1];return null!=r&&r!==F&&(e=t(i,r,e)),e}var i=e.reduce(n,"");return function(e){var t=q.getTimestampInSeconds();return e=e?e+="|":e,e+="TS="+t}(i)}function u(e){var t=e.minutesToLive,n="";return(S.idSyncDisableSyncs||S.disableIdSyncs)&&(n=n||"Error: id syncs have been disabled"),"string"==typeof e.dpid&&e.dpid.length||(n=n||"Error: config.dpid is empty"),"string"==typeof e.url&&e.url.length||(n=n||"Error: config.url is empty"),void 0===t?t=20160:(t=parseInt(t,10),(isNaN(t)||t<=0)&&(n=n||"Error: config.minutesToLive needs to be a positive number")),{error:n,ttl:t}}function l(){return!!S.configs.doesOptInApply&&!(I.optIn.isComplete&&d())}function d(){return S.configs.doesOptInApply&&S.configs.isIabContext?I.optIn.isApproved(I.optIn.Categories.ECID)&&y:I.optIn.isApproved(I.optIn.Categories.ECID)}function f(){[["getMarketingCloudVisitorID"],["setCustomerIDs",void 0],["syncIdentity",void 0],["getAnalyticsVisitorID"],["getAudienceManagerLocationHint"],["getLocationHint"],["getAudienceManagerBlob"]].forEach(function(e){var t=e[0],n=2===e.length?e[1]:"",i=S[t];S[t]=function(e){return d()&&S.isAllowed()?i.apply(S,arguments):("function"==typeof e&&S._callCallback(e,[n]),n)}})}function p(){var e=S._getAudienceManagerURLData(),t=e.url;return S._loadData(E,t,null,e)}function g(e,t){if(y=!0,e)throw new Error("[IAB plugin] : "+e);t&&t.gdprApplies&&(v=t.consentString,D=t.hasConsentChangedSinceLastCmpPull?1:0),p(),_()}function m(e,t){if(y=!0,e)throw new Error("[IAB plugin] : "+e);t.gdprApplies&&(v=t.consentString,D=t.hasConsentChangedSinceLastCmpPull?1:0),S.init(),_()}function h(){I.optIn.isComplete&&(I.optIn.isApproved(I.optIn.Categories.ECID)?S.configs.isIabContext?I.optIn.execute({command:"iabPlugin.fetchConsentData",callback:m}):(S.init(),_()):S.configs.isIabContext?I.optIn.execute({command:"iabPlugin.fetchConsentData",callback:g}):(f(),_()))}function _(){I.optIn.off("complete",h)}if(!i||i.split("").reverse().join("")!==t)throw new Error("Please use `Visitor.getInstance` to instantiate Visitor.");var S=this,I=window.adobe,v="",D=0,y=!1,b=!1;S.version="5.2.0";var A=C,O=A.Visitor;O.version=S.version,O.AuthState=L.AUTH_STATE,O.OptOut=L.OPT_OUT,A.s_c_in||(A.s_c_il=[],A.s_c_in=0),S._c="Visitor",S._il=A.s_c_il,S._in=A.s_c_in,S._il[S._in]=S,A.s_c_in++,S._instanceType="regular",S._log={requests:[]},S.marketingCloudOrgID=t,S.cookieName="AMCV_"+t,S.sessionCookieName="AMCVS_"+t;var M={};n&&n.secureCookie&&n.sameSiteCookie&&(M={sameSite:n.sameSiteCookie,secure:n.secureCookie}),S.cookieDomain=S.useLocalStorage?"":ee(null,M),S.loadSSL=!0,S.loadTimeout=3e4,S.CORSErrors=[],S.marketingCloudServer=S.audienceManagerServer="dpm.demdex.net",S.sdidParamExpiry=30;var k=null,E="MC",T="MCMID",P="MCIDTS",R="A",w="MCAID",N="AAM",x="MCAAMB",F="NONE",j=function(e){return!Object.prototype[e]},V=ae(S);S.FIELDS=L.FIELDS,S.cookieRead=function(e){return S.useLocalStorage?e===S.sessionCookieName?sessionStorage.getItem(e):localStorage.getItem(e):Z.get(e)},S.cookieWrite=function(e,t,n){var i=""+t;if(S.useLocalStorage)return e===S.sessionCookieName?sessionStorage.setItem(e,i):localStorage.setItem(e,i);var r=S.cookieLifetime?(""+S.cookieLifetime).toUpperCase():"",a={expires:n,domain:S.cookieDomain,cookieLifetime:r};return S.configs&&S.configs.secureCookie&&"https:"===location.protocol&&(a.secure=!0),S.configs&&S.configs.sameSiteCookie&&"https:"===location.protocol&&(a.sameSite=L.SAME_SITE_VALUES[S.configs.sameSiteCookie.toUpperCase()]||"Lax"),Z.set(e,i,a)},S.removeCookie=function(e){if(S.useLocalStorage)return e===S.sessionCookieName?sessionStorage.removeItem(e):localStorage.removeItem(e);var t={domain:S.cookieDomain};return S.configs&&S.configs.secureCookie&&"https:"===location.protocol&&(t.secure=!0),S.configs&&S.configs.sameSiteCookie&&"https:"===location.protocol&&(t.sameSite=L.SAME_SITE_VALUES[S.configs.sameSiteCookie.toUpperCase()]||"Lax"),Z.remove(e,t)},S.resetState=function(e){e?S._mergeServerState(e):s()},S._isAllowedDone=!1,S._isAllowedFlag=!1,S.isAllowed=function(){return S._isAllowedDone||(S._isAllowedDone=!0,(S.cookieRead(S.cookieName)||S.cookieWrite(S.cookieName,"T",1))&&(S._isAllowedFlag=!0)),"T"===S.cookieRead(S.cookieName)&&S.removeCookie(S.cookieName),S._isAllowedFlag},S.setMarketingCloudVisitorID=function(e){S._setMarketingCloudFields(e)},S._use1stPartyMarketingCloudServer=!1,S.getMarketingCloudVisitorID=function(e,t){S.marketingCloudServer&&S.marketingCloudServer.indexOf(".demdex.net")<0&&(S._use1stPartyMarketingCloudServer=!0);var n=S._getAudienceManagerURLData("_setMarketingCloudFields"),i=n.url;return S._getRemoteField(T,i,e,t,n)};var H=function(e,t){var n={};S.getMarketingCloudVisitorID(function(){t.forEach(function(e){n[e]=S._getField(e,!0)}),-1!==t.indexOf("MCOPTOUT")?S.isOptedOut(function(t){n.MCOPTOUT=t,e(n)},null,!0):e(n)},!0)};S.getVisitorValues=function(e,t){var n={MCMID:{fn:S.getMarketingCloudVisitorID,args:[!0],context:S},MCOPTOUT:{fn:S.isOptedOut,args:[void 0,!0],context:S},MCAID:{fn:S.getAnalyticsVisitorID,args:[!0],context:S},MCAAMLH:{fn:S.getAudienceManagerLocationHint,args:[!0],context:S},MCAAMB:{fn:S.getAudienceManagerBlob,args:[!0],context:S}},i=t&&t.length?U.pluck(n,t):n;t&&-1===t.indexOf("MCAID")?H(e,t):$(i,e)},S._currentCustomerIDs={},S._customerIDsHashChanged=!1,S._newCustomerIDsHash="",S.setCustomerIDs=function(t,n){if(!S.isOptedOut()&&t){if(!U.isObject(t)||U.isObjectEmpty(t))return!1;S._readVisitor();var i,a,o,s;for(i in t)if(j(i)&&(S._currentCustomerIDs.dataSources=S._currentCustomerIDs.dataSources||{},a=t[i],n=a.hasOwnProperty("hashType")?a.hashType:n,a))if("object"===e(a)){var c={};if(a.id){if(n){if(!(s=Xe(We(a.id),n)))return;a.id=s,c.hashType=n}c.id=a.id}void 0!=a.authState&&(c.authState=a.authState),S._currentCustomerIDs.dataSources[i]=c}else if(n){if(!(s=Xe(We(a),n)))return;S._currentCustomerIDs.dataSources[i]={id:s,hashType:n}}else S._currentCustomerIDs.dataSources[i]={id:a};var u=S.getCustomerIDs(!0),l=S._getField("MCCIDH"),d="";l||(l=0);for(o in u){var f=u[o];if(!U.isObjectEmpty(f))for(i in f)j(i)&&(a=f[i],d+=(d?"|":"")+i+"|"+(a.id?a.id:"")+(a.authState?a.authState:""))}S._newCustomerIDsHash=String(S._hash(d)),S._newCustomerIDsHash!==l&&(S._customerIDsHashChanged=!0,S._mapCustomerIDs(r))}},S.syncIdentity=function(t,n){if(!S.isOptedOut()&&t){if(!U.isObject(t)||U.isObjectEmpty(t))return!1;S._readVisitor();var i,a,o,s,c;for(i in t)if(j(i)&&(S._currentCustomerIDs.nameSpaces=S._currentCustomerIDs.nameSpaces||{},a=t[i],n=a.hasOwnProperty("hashType")?a.hashType:n,a&&"object"===e(a))){var u={};if(a.id){if(n){if(!(o=Xe(We(a.id),n)))return;a.id=o,u.hashType=n}u.id=a.id}void 0!=a.authState&&(u.authState=a.authState),a.dataSource&&(S._currentCustomerIDs.dataSources=S._currentCustomerIDs.dataSources||{},s=a.dataSource,S._currentCustomerIDs.dataSources[s]=u),S._currentCustomerIDs.nameSpaces[i]=u}var l=S.getCustomerIDs(!0),d=S._getField("MCCIDH"),f="";d||(d="0");for(c in l){var p=l[c];if(!U.isObjectEmpty(p))for(i in p)j(i)&&(a=p[i],f+=(f?"|":"")+i+"|"+(a.id?a.id:"")+(a.authState?a.authState:""))}S._newCustomerIDsHash=String(S._hash(f)),S._newCustomerIDsHash!==d&&(S._customerIDsHashChanged=!0,S._mapCustomerIDs(r))}},S.getCustomerIDs=function(e){S._readVisitor();var t,n,i={dataSources:{},nameSpaces:{}},r=S._currentCustomerIDs.dataSources;for(t in r)j(t)&&(n=r[t],n.id&&(i.dataSources[t]||(i.dataSources[t]={}),i.dataSources[t].id=n.id,void 0!=n.authState?i.dataSources[t].authState=n.authState:i.dataSources[t].authState=O.AuthState.UNKNOWN,n.hashType&&(i.dataSources[t].hashType=n.hashType)));var a=S._currentCustomerIDs.nameSpaces;for(t in a)j(t)&&(n=a[t],n.id&&(i.nameSpaces[t]||(i.nameSpaces[t]={}),i.nameSpaces[t].id=n.id,void 0!=n.authState?i.nameSpaces[t].authState=n.authState:i.nameSpaces[t].authState=O.AuthState.UNKNOWN,n.hashType&&(i.nameSpaces[t].hashType=n.hashType)));return e?i:i.dataSources},S.setAnalyticsVisitorID=function(e){S._setAnalyticsFields(e)},S.getAnalyticsVisitorID=function(e,t,n){if(!q.isTrackingServerPopulated()&&!n)return S._callCallback(e,[""]),"";var i="";if(n||(i=S.getMarketingCloudVisitorID(function(t){S.getAnalyticsVisitorID(e,!0)})),i||n){var r=n?S.marketingCloudServer:S.trackingServer,a="";S.loadSSL&&(n?S.marketingCloudServerSecure&&(r=S.marketingCloudServerSecure):S.trackingServerSecure&&(r=S.trackingServerSecure));var o={};if(r){var s="http"+(S.loadSSL?"s":"")+"://"+r+"/id",c="d_visid_ver="+S.version+"&mcorgid="+encodeURIComponent(S.marketingCloudOrgID)+(i?"&mid="+encodeURIComponent(i):"")+(S.idSyncDisable3rdPartySyncing||S.disableThirdPartyCookies?"&d_coppa=true":""),u=["s_c_il",S._in,"_set"+(n?"MarketingCloud":"Analytics")+"Fields"];a=s+"?"+c+"&callback=s_c_il%5B"+S._in+"%5D._set"+(n?"MarketingCloud":"Analytics")+"Fields",o.corsUrl=s+"?"+c,o.callback=u}return o.url=a,S._getRemoteField(n?T:w,a,e,t,o)}return""},S.getAudienceManagerLocationHint=function(e,t){if(S.getMarketingCloudVisitorID(function(t){S.getAudienceManagerLocationHint(e,!0)})){var n=S._getField(w);if(!n&&q.isTrackingServerPopulated()&&(n=S.getAnalyticsVisitorID(function(t){S.getAudienceManagerLocationHint(e,!0)})),n||!q.isTrackingServerPopulated()){var i=S._getAudienceManagerURLData(),r=i.url;return S._getRemoteField("MCAAMLH",r,e,t,i)}}return""},S.getLocationHint=S.getAudienceManagerLocationHint,S.getAudienceManagerBlob=function(e,t){if(S.getMarketingCloudVisitorID(function(t){S.getAudienceManagerBlob(e,!0)})){var n=S._getField(w);if(!n&&q.isTrackingServerPopulated()&&(n=S.getAnalyticsVisitorID(function(t){S.getAudienceManagerBlob(e,!0)})),n||!q.isTrackingServerPopulated()){var i=S._getAudienceManagerURLData(),r=i.url;return S._customerIDsHashChanged&&S._setFieldExpire(x,-1),S._getRemoteField(x,r,e,t,i)}}return""},S._supplementalDataIDCurrent="",S._supplementalDataIDCurrentConsumed={},S._supplementalDataIDLast="",S._supplementalDataIDLastConsumed={},S.getSupplementalDataID=function(e,t){S._supplementalDataIDCurrent||t||(S._supplementalDataIDCurrent=S._generateID(1));var n=S._supplementalDataIDCurrent;return S._supplementalDataIDLast&&!S._supplementalDataIDLastConsumed[e]?(n=S._supplementalDataIDLast,S._supplementalDataIDLastConsumed[e]=!0):n&&(S._supplementalDataIDCurrentConsumed[e]&&(S._supplementalDataIDLast=S._supplementalDataIDCurrent,S._supplementalDataIDLastConsumed=S._supplementalDataIDCurrentConsumed,S._supplementalDataIDCurrent=n=t?"":S._generateID(1),S._supplementalDataIDCurrentConsumed={}),n&&(S._supplementalDataIDCurrentConsumed[e]=!0)),n};var B=!1;S._liberatedOptOut=null,S.getOptOut=function(e,t){var n=S._getAudienceManagerURLData("_setMarketingCloudFields"),i=n.url;if(d())return S._getRemoteField("MCOPTOUT",i,e,t,n);if(S._registerCallback("liberatedOptOut",e),null!==S._liberatedOptOut)return S._callAllCallbacks("liberatedOptOut",[S._liberatedOptOut]),B=!1,S._liberatedOptOut;if(B)return null;B=!0;var r="liberatedGetOptOut";return n.corsUrl=n.corsUrl.replace(/\.demdex\.net\/id\?/,".demdex.net/optOutStatus?"),n.callback=[r],C[r]=function(e){if(e===Object(e)){var t,n,i=U.parseOptOut(e,t,F);t=i.optOut,n=1e3*i.d_ottl,S._liberatedOptOut=t,setTimeout(function(){S._liberatedOptOut=null},n)}S._callAllCallbacks("liberatedOptOut",[t]),B=!1},V.fireCORS(n),null},S.isOptedOut=function(e,t,n){t||(t=O.OptOut.GLOBAL);var i=S.getOptOut(function(n){var i=n===O.OptOut.GLOBAL||n.indexOf(t)>=0;S._callCallback(e,[i])},n);return i?i===O.OptOut.GLOBAL||i.indexOf(t)>=0:null};var G={subscribed:!1,callbacks:[]};S.onReceiveEcid=function(e){if(d())return S.getMarketingCloudVisitorID(e,!0);G.subscribed=!0,e&&"function"==typeof e&&G.callbacks.push(e)},S._fields=null,S._fieldsExpired=null,S._hash=function(e){var t,n,i=0;if(e)for(t=0;t<e.length;t++)n=e.charCodeAt(t),i=(i<<5)-i+n,i&=i;return i},S._generateID=re,S._generateLocalMID=function(){var e=S._generateID(0);return W.isClientSideMarketingCloudVisitorID=!0,e},S._callbackList=null,S._callCallback=function(e,t){try{"function"==typeof e?e.apply(A,t):e[1].apply(e[0],t)}catch(e){}},S._registerCallback=function(e,t){t&&(null==S._callbackList&&(S._callbackList={}),void 0==S._callbackList[e]&&(S._callbackList[e]=[]),S._callbackList[e].push(t))},S._callAllCallbacks=function(e,t){if(null!=S._callbackList){var n=S._callbackList[e];if(n)for(;n.length>0;)S._callCallback(n.shift(),t)}},S._addQuerystringParam=function(e,t,n,i){var r=encodeURIComponent(t)+"="+encodeURIComponent(n),a=q.parseHash(e),o=q.hashlessUrl(e);if(-1===o.indexOf("?"))return o+"?"+r+a;var s=o.split("?"),c=s[0]+"?",u=s[1];return c+q.addQueryParamAtLocation(u,r,i)+a},S._extractParamFromUri=function(e,t){var n=new RegExp("[\\?&#]"+t+"=([^&#]*)"),i=n.exec(e);if(i&&i.length)return decodeURIComponent(i[1])},S._parseAdobeMcFromUrl=a(oe.ADOBE_MC),S._parseAdobeMcSdidFromUrl=a(oe.ADOBE_MC_SDID),S._attemptToPopulateSdidFromUrl=function(e){var n=S._parseAdobeMcSdidFromUrl(e),i=1e9;n&&n.TS&&(i=q.getTimestampInSeconds()-n.TS),n&&n.SDID&&n.MCORGID===t&&i<S.sdidParamExpiry&&(S._supplementalDataIDCurrent=n.SDID,S._supplementalDataIDCurrentConsumed.SDID_URL_PARAM=!0)},S._attemptToPopulateIdsFromUrl=function(){var e=S._parseAdobeMcFromUrl();if(e&&e.TS){var n=q.getTimestampInSeconds(),i=n-e.TS;if(Math.floor(i/60)>oe.ADOBE_MC_TTL_IN_MIN||e.MCORGID!==t)return;o(e)}},S._mergeServerState=function(e){if(e)try{if(e=function(e){return q.isObject(e)?e:JSON.parse(e)}(e),e[S.marketingCloudOrgID]){var t=e[S.marketingCloudOrgID];!function(e){q.isObject(e)&&S.setCustomerIDs(e)}(t.customerIDs),s(t.sdid)}}catch(e){throw new Error("`serverState` has an invalid format.")}},S._timeout=null,S._loadData=function(e,t,n,i){t=S._addQuerystringParam(t,"d_fieldgroup",e,1),i.url=S._addQuerystringParam(i.url,"d_fieldgroup",e,1),i.corsUrl=S._addQuerystringParam(i.corsUrl,"d_fieldgroup",e,1),W.fieldGroupObj[e]=!0,i===Object(i)&&i.corsUrl&&"XMLHttpRequest"===V.corsMetadata.corsType&&V.fireCORS(i,n,e)},S._clearTimeout=function(e){null!=S._timeout&&S._timeout[e]&&(clearTimeout(S._timeout[e]),S._timeout[e]=0)},S._settingsDigest=0,S._getSettingsDigest=function(){if(!S._settingsDigest){var e=S.version;S.audienceManagerServer&&(e+="|"+S.audienceManagerServer),S.audienceManagerServerSecure&&(e+="|"+S.audienceManagerServerSecure),S._settingsDigest=S._hash(e)}return S._settingsDigest},S._readVisitorDone=!1,S._readVisitor=function(){if(!S._readVisitorDone){S._readVisitorDone=!0;var e,t,n,i,r,a,o=S._getSettingsDigest(),s=!1,c=S.cookieRead(S.cookieName),u=new Date;if(c||b||S.discardTrackingServerECID||(c=S.cookieRead(oe.FIRST_PARTY_SERVER_COOKIE)),null==S._fields&&(S._fields={}),c&&"T"!==c)for(c=c.split("|"),c[0].match(/^[\-0-9]+$/)&&(parseInt(c[0],10)!==o&&(s=!0),c.shift()),c.length%2==1&&c.pop(),e=0;e<c.length;e+=2)t=c[e].split("-"),n=t[0],i=c[e+1],t.length>1?(r=parseInt(t[1],10),a=t[1].indexOf("s")>0):(r=0,a=!1),s&&("MCCIDH"===n&&(i=""),r>0&&(r=u.getTime()/1e3-60)),n&&i&&(S._setField(n,i,1),r>0&&(S._fields["expire"+n]=r+(a?"s":""),(u.getTime()>=1e3*r||a&&!S.cookieRead(S.sessionCookieName))&&(S._fieldsExpired||(S._fieldsExpired={}),S._fieldsExpired[n]=!0)));!S._getField(w)&&q.isTrackingServerPopulated()&&(c=S.cookieRead("s_vi"))&&(c=c.split("|"),c.length>1&&c[0].indexOf("v1")>=0&&(i=c[1],e=i.indexOf("["),e>=0&&(i=i.substring(0,e)),i&&i.match(oe.VALID_VISITOR_ID_REGEX)&&S._setField(w,i)))}},S._appendVersionTo=function(e){var t="vVersion|"+S.version,n=e?S._getCookieVersion(e):null;return n?te.areVersionsDifferent(n,S.version)&&(e=e.replace(oe.VERSION_REGEX,t)):e+=(e?"|":"")+t,e},S._writeVisitor=function(){var e,t,n=S._getSettingsDigest();for(e in S._fields)j(e)&&S._fields[e]&&"expire"!==e.substring(0,6)&&(t=S._fields[e],n+=(n?"|":"")+e+(S._fields["expire"+e]?"-"+S._fields["expire"+e]:"")+"|"+t);n=S._appendVersionTo(n),S.cookieWrite(S.cookieName,n,1)},S._getField=function(e,t){return null==S._fields||!t&&S._fieldsExpired&&S._fieldsExpired[e]?null:S._fields[e]},S._setField=function(e,t,n){null==S._fields&&(S._fields={}),S._fields[e]=t,n||S._writeVisitor()},S._getFieldList=function(e,t){var n=S._getField(e,t);return n?n.split("*"):null},S._setFieldList=function(e,t,n){S._setField(e,t?t.join("*"):"",n)},S._getFieldMap=function(e,t){var n=S._getFieldList(e,t);if(n){var i,r={};for(i=0;i<n.length;i+=2)r[n[i]]=n[i+1];return r}return null},S._setFieldMap=function(e,t,n){var i,r=null;if(t){r=[];for(i in t)j(i)&&(r.push(i),r.push(t[i]))}S._setFieldList(e,r,n)},S._setFieldExpire=function(e,t,n){var i=new Date;i.setTime(i.getTime()+1e3*t),null==S._fields&&(S._fields={}),S._fields["expire"+e]=Math.floor(i.getTime()/1e3)+(n?"s":""),t<0?(S._fieldsExpired||(S._fieldsExpired={}),S._fieldsExpired[e]=!0):S._fieldsExpired&&(S._fieldsExpired[e]=!1),n&&(S.cookieRead(S.sessionCookieName)||S.cookieWrite(S.sessionCookieName,"1"))},S._findVisitorID=function(t){return t&&("object"===e(t)&&(t=t.d_mid?t.d_mid:t.visitorID?t.visitorID:t.id?t.id:t.uuid?t.uuid:""+t),t&&"NOTARGET"===(t=t.toUpperCase())&&(t=F),t&&(t===F||t.match(oe.VALID_VISITOR_ID_REGEX))||(t="")),t},S._setFields=function(t,n){if(S._clearTimeout(t),null!=S._loading&&(S._loading[t]=!1),W.fieldGroupObj[t]&&W.setState(t,!1),t===E){!0!==W.isClientSideMarketingCloudVisitorID&&(W.isClientSideMarketingCloudVisitorID=!1);var i=S._getField(T);if(!i||S.overwriteCrossDomainMCIDAndAID){if(!(i="object"===e(n)&&n.mid?n.mid:S._findVisitorID(n))){if(S._use1stPartyMarketingCloudServer&&!S.tried1stPartyMarketingCloudServer)return S.tried1stPartyMarketingCloudServer=!0,void S.getAnalyticsVisitorID(null,!1,!0);i=S._generateLocalMID()}S._setField(T,i)}i&&i!==F||(i=""),"object"===e(n)&&((n.d_region||n.dcs_region||n.d_blob||n.blob)&&S._setFields(N,n),S._use1stPartyMarketingCloudServer&&n.mid&&S._setFields(R,{id:n.id})),S._callAllCallbacks(T,[i])}if(t===N&&"object"===e(n)){var r=604800;void 0!=n.id_sync_ttl&&n.id_sync_ttl&&(r=parseInt(n.id_sync_ttl,10));var a=X.getRegionAndCheckIfChanged(n,r);S._callAllCallbacks("MCAAMLH",[a]);var o=S._getField(x);(n.d_blob||n.blob)&&(o=n.d_blob,o||(o=n.blob),S._setFieldExpire(x,r),S._setField(x,o)),o||(o=""),S._callAllCallbacks(x,[o]),!n.error_msg&&S._newCustomerIDsHash&&S._setField("MCCIDH",S._newCustomerIDsHash)}if(t===R){var s=S._getField(w);s&&!S.overwriteCrossDomainMCIDAndAID||(s=S._findVisitorID(n),s?s!==F&&S._setFieldExpire(x,-1):s=F,S._setField(w,s)),s&&s!==F||(s=""),S._callAllCallbacks(w,[s])}if(S.idSyncDisableSyncs||S.disableIdSyncs)X.idCallNotProcesssed=!0;else{X.idCallNotProcesssed=!1;var c={};c.ibs=n.ibs,c.subdomain=n.subdomain,X.processIDCallData(c)}if(n===Object(n)){var u,l;d()&&S.isAllowed()&&(u=S._getField("MCOPTOUT"));var f=U.parseOptOut(n,u,F);u=f.optOut,l=f.d_ottl,S._setFieldExpire("MCOPTOUT",l,!0),S._setField("MCOPTOUT",u),S._callAllCallbacks("MCOPTOUT",[u])}},S._loading=null,S._getRemoteField=function(e,t,n,i,r){var a,o="",s=q.isFirstPartyAnalyticsVisitorIDCall(e),c={MCAAMLH:!0,MCAAMB:!0};if(d()&&S.isAllowed()){S._readVisitor(),o=S._getField(e,!0===c[e]);if(function(){return(!o||S._fieldsExpired&&S._fieldsExpired[e])&&(!S.disableThirdPartyCalls||s)}()){if(e===T||"MCOPTOUT"===e?a=E:"MCAAMLH"===e||e===x?a=N:e===w&&(a=R),a)return!t||null!=S._loading&&S._loading[a]||(null==S._loading&&(S._loading={}),S._loading[a]=!0,a===N&&(D=0),S._loadData(a,t,function(t){if(!S._getField(e)){t&&W.setState(a,!0);var n="";e===T?n=S._generateLocalMID():a===N&&(n={error_msg:"timeout"}),S._setFields(a,n)}},r)),S._registerCallback(e,n),o||(t||S._setFields(a,{id:F}),"")}else o||(e===T?(S._registerCallback(e,n),o=S._generateLocalMID(),S.setMarketingCloudVisitorID(o)):e===w?(S._registerCallback(e,n),o="",S.setAnalyticsVisitorID(o)):(o="",i=!0))}return e!==T&&e!==w||o!==F||(o="",i=!0),n&&i&&S._callCallback(n,[o]),e===T&&G.subscribed&&(G.callbacks&&G.callbacks.length&&G.callbacks.forEach(function(e){S._callCallback(e,[o])}),G.subscribed=!1,G.callbacks.length=0),o},S._setMarketingCloudFields=function(e){S._readVisitor(),S._setFields(E,e)},S._mapCustomerIDs=function(e){S.getAudienceManagerBlob(e,!0)},S._setAnalyticsFields=function(e){S._readVisitor(),S._setFields(R,e)},S._setAudienceManagerFields=function(e){S._readVisitor(),S._setFields(N,e)},S._getAudienceManagerURLData=function(e){var t=S.audienceManagerServer,n="",i=S._getField(T),r=S._getField(x,!0),a=S._getField(w),o=a&&a!==F?"&d_cid_ic=AVID%01"+encodeURIComponent(a):"";if(S.loadSSL&&S.audienceManagerServerSecure&&(t=S.audienceManagerServerSecure),t){var s,c,u,l=S.getCustomerIDs(!0);if(l)for(c in l){var d=l[c];if(!U.isObjectEmpty(d)){var f="nameSpaces"===c?"&d_cid_ns=":"&d_cid_ic=";for(s in d)j(s)&&(u=d[s],o+=f+encodeURIComponent(s)+"%01"+encodeURIComponent(u.id?u.id:"")+(u.authState?"%01"+u.authState:""))}}e||(e="_setAudienceManagerFields");var p="http"+(S.loadSSL?"s":"")+"://"+t+"/id",g="d_visid_ver="+S.version+(v&&-1!==p.indexOf("demdex.net")?"&gdpr=1&gdpr_consent="+v:"")+(D&&-1!==p.indexOf("demdex.net")?"&d_cf="+D:"")+"&d_rtbd=json&d_ver=2"+(!i&&S._use1stPartyMarketingCloudServer?"&d_verify=1":"")+"&d_orgid="+encodeURIComponent(S.marketingCloudOrgID)+"&d_nsid="+(S.idSyncContainerID||0)+(i?"&d_mid="+encodeURIComponent(i):"")+(S.idSyncDisable3rdPartySyncing||S.disableThirdPartyCookies?"&d_coppa=true":"")+(!0===k?"&d_coop_safe=1":!1===k?"&d_coop_unsafe=1":"")+(r?"&d_blob="+encodeURIComponent(r):"")+o,m=["s_c_il",S._in,e];return n=p+"?"+g+"&d_cb=s_c_il%5B"+S._in+"%5D."+e,{url:n,corsUrl:p+"?"+g,callback:m}}return{url:n}},S.appendVisitorIDsTo=function(e){try{var t=[[T,S._getField(T)],[w,S._getField(w)],["MCORGID",S.marketingCloudOrgID]];return S._addQuerystringParam(e,oe.ADOBE_MC,c(t))}catch(t){return e}},S.appendSupplementalDataIDTo=function(e,t){if(!(t=t||S.getSupplementalDataID(q.generateRandomString(),!0)))return e;try{var n=c([["SDID",t],["MCORGID",S.marketingCloudOrgID]]);return S._addQuerystringParam(e,oe.ADOBE_MC_SDID,n)}catch(t){return e}};var q={parseHash:function(e){var t=e.indexOf("#");return t>0?e.substr(t):""},hashlessUrl:function(e){var t=e.indexOf("#");return t>0?e.substr(0,t):e},addQueryParamAtLocation:function(e,t,n){var i=e.split("&");return n=null!=n?n:i.length,i.splice(n,0,t),i.join("&")},isFirstPartyAnalyticsVisitorIDCall:function(e,t,n){if(e!==w)return!1;var i;return t||(t=S.trackingServer),n||(n=S.trackingServerSecure),!("string"!=typeof(i=S.loadSSL?n:t)||!i.length)&&(i.indexOf("2o7.net")<0&&i.indexOf("omtrdc.net")<0)},isObject:function(e){return Boolean(e&&e===Object(e))},removeCookie:function(e){Z.remove(e,{domain:S.cookieDomain})},isTrackingServerPopulated:function(){return!!S.trackingServer||!!S.trackingServerSecure},getTimestampInSeconds:function(){return Math.round((new Date).getTime()/1e3)},parsePipeDelimetedKeyValues:function(e){return e.split("|").reduce(function(e,t){var n=t.split("=");return e[n[0]]=decodeURIComponent(n[1]),e},{})},generateRandomString:function(e){e=e||5;for(var t="",n="abcdefghijklmnopqrstuvwxyz0123456789";e--;)t+=n[Math.floor(Math.random()*n.length)];return t},normalizeBoolean:function(e){return"true"===e||"false"!==e&&e},parseBoolean:function(e){return"true"===e||"false"!==e&&null},replaceMethodsWithFunction:function(e,t){for(var n in e)e.hasOwnProperty(n)&&"function"==typeof e[n]&&(e[n]=t);return e}};S._helpers=q;var X=se(S,O);S._destinationPublishing=X,S.timeoutMetricsLog=[];var W={isClientSideMarketingCloudVisitorID:null,MCIDCallTimedOut:null,AnalyticsIDCallTimedOut:null,AAMIDCallTimedOut:null,fieldGroupObj:{},setState:function(e,t){switch(e){case E:!1===t?!0!==this.MCIDCallTimedOut&&(this.MCIDCallTimedOut=!1):this.MCIDCallTimedOut=t;break;case R:!1===t?!0!==this.AnalyticsIDCallTimedOut&&(this.AnalyticsIDCallTimedOut=!1):this.AnalyticsIDCallTimedOut=t;break;case N:!1===t?!0!==this.AAMIDCallTimedOut&&(this.AAMIDCallTimedOut=!1):this.AAMIDCallTimedOut=t}}};S.isClientSideMarketingCloudVisitorID=function(){return W.isClientSideMarketingCloudVisitorID},S.MCIDCallTimedOut=function(){return W.MCIDCallTimedOut},S.AnalyticsIDCallTimedOut=function(){return W.AnalyticsIDCallTimedOut},S.AAMIDCallTimedOut=function(){return W.AAMIDCallTimedOut},S.idSyncGetOnPageSyncInfo=function(){return S._readVisitor(),S._getField("MCSYNCSOP")},S.idSyncByURL=function(e){if(!S.isOptedOut()){var t=u(e||{});if(t.error)return t.error;var n,i,r=e.url,a=encodeURIComponent,o=X;return r=r.replace(/^https:/,"").replace(/^http:/,""),n=U.encodeAndBuildRequest(["",e.dpid,e.dpuuid||""],","),i=["ibs",a(e.dpid),"img",a(r),t.ttl,"",n],o.addMessage(i.join("|")),o.requestToProcess(),"Successfully queued"}},S.idSyncByDataSource=function(e){if(!S.isOptedOut())return e===Object(e)&&"string"==typeof e.dpuuid&&e.dpuuid.length?(e.url="//dpm.demdex.net/ibs:dpid="+e.dpid+"&dpuuid="+e.dpuuid,S.idSyncByURL(e)):"Error: config or config.dpuuid is empty"},Ye(S,X),S._getCookieVersion=function(e){e=e||S.cookieRead(S.cookieName);var t=oe.VERSION_REGEX.exec(e);return t&&t.length>1?t[1]:null},S._resetAmcvCookie=function(e){var t=S._getCookieVersion();t&&!te.isLessThan(t,e)||S.removeCookie(S.cookieName)},S.setAsCoopSafe=function(){k=!0},S.setAsCoopUnsafe=function(){k=!1},function(){if(S.configs=Object.create(null),q.isObject(n))for(var e in n)j(e)&&(S[e]=n[e],S.configs[e]=n[e])}(),f();var K;S.init=function(){l()&&(I.optIn.fetchPermissions(h,!0),!I.optIn.isApproved(I.optIn.Categories.ECID))||K||(K=!0,function(){if(q.isObject(n)){S.idSyncContainerID=S.idSyncContainerID||0,k="boolean"==typeof S.isCoopSafe?S.isCoopSafe:q.parseBoolean(S.isCoopSafe),S.resetBeforeVersion&&S._resetAmcvCookie(S.resetBeforeVersion),S._attemptToPopulateIdsFromUrl(),S._attemptToPopulateSdidFromUrl(),S._readVisitor();var e=S._getField(P),t=Math.ceil((new Date).getTime()/oe.MILLIS_PER_DAY);S.idSyncDisableSyncs||S.disableIdSyncs||!X.canMakeSyncIDCall(e,t)||(S._setFieldExpire(x,-1),S._setField(P,t)),S.getMarketingCloudVisitorID(),S.getAudienceManagerLocationHint(),S.getAudienceManagerBlob(),S._mergeServerState(S.serverState)}else S._attemptToPopulateIdsFromUrl(),S._attemptToPopulateSdidFromUrl()}(),function(){if(!S.idSyncDisableSyncs&&!S.disableIdSyncs){X.checkDPIframeSrc();var e=function(){var e=X;e.readyToAttachIframe()&&e.attachIframe()};A.addEventListener("load",function(){O.windowLoaded=!0,e()});try{ie.receiveMessage(function(e){X.receiveMessage(e.data)},X.iframeHost)}catch(e){}}}(),function(){S.whitelistIframeDomains&&oe.POST_MESSAGE_ENABLED&&(S.whitelistIframeDomains=S.whitelistIframeDomains instanceof Array?S.whitelistIframeDomains:[S.whitelistIframeDomains],S.whitelistIframeDomains.forEach(function(e){var n=new Y(t,e),i=Q(S,n);ie.receiveMessage(i,e)}))}())}};Je.config=ue,C.Visitor=Je;var ze=Je,Qe=function(e){if(U.isObject(e))return Object.keys(e).filter(function(t){return""!==e[t]&&ue.getConfigs()[t]}).reduce(function(t,n){var i=ue.normalizeConfig(n,e[n]),r=U.normalizeBoolean(i);return t[n]=r,t},Object.create(null))},$e=Ge.OptIn,Ze=Ge.IabPlugin;return ze.getInstance=function(e,t){if(!e)throw new Error("Visitor requires Adobe Marketing Cloud Org ID.");e.indexOf("@")<0&&(e+="@AdobeOrg");var n=function(){var t=C.s_c_il;if(t)for(var n=0;n<t.length;n++){var i=t[n];if(i&&"Visitor"===i._c&&i.marketingCloudOrgID===e)return i}}();if(n)return n;var i=Qe(t)||{};!function(e){C.adobe.optIn=C.adobe.optIn||function(){var t=U.pluck(e,["doesOptInApply","previousPermissions","preOptInApprovals","isOptInStorageEnabled","optInStorageExpiry","isIabContext"]),n=e.optInCookieDomain||e.cookieDomain;n=n||ee(),n=n===window.location.hostname?"":n,t.optInCookieDomain=n;var i=new $e(t,{cookies:Z});if(t.isIabContext&&t.doesOptInApply){var r=new Ze;i.registerPlugin(r)}return i}()}(i||{});var r=e,a=r.split("").reverse().join(""),o=new ze(e,null,a);i.cookieDomain&&(o.cookieDomain=i.cookieDomain),i.sameSiteCookie&&i.secureCookie&&(o.configs={sameSiteCookie:i.sameSiteCookie,secureCookie:i.secureCookie}),function(){C.s_c_il.splice(--C.s_c_in,1)}();var s=U.getIeVersion();if("number"==typeof s&&s<10)return o._helpers.replaceMethodsWithFunction(o,function(){});var c=function(){try{return C.self!==C.parent}catch(e){return!0}}()&&!function(e){return e.cookieWrite("TEST_AMCV_COOKIE","T",1),"T"===e.cookieRead("TEST_AMCV_COOKIE")&&(e.removeCookie("TEST_AMCV_COOKIE"),!0) }(o)&&C.parent?new X(e,i,o,C.parent):new ze(e,i,a);return o=null,c.init(),c},function(){function e(){ze.windowLoaded=!0}C.addEventListener?C.addEventListener("load",e):C.attachEvent&&C.attachEvent("onload",e),ze.codeLoadEnd=(new Date).getTime()}(),ze}(); return Visitor; }(); } }, "adobe-mcid/src/view/utils/timeUnits.js": { "script": function(module, exports, require, turbine) { /************************************************************************* * ADOBE CONFIDENTIAL * ___________________ * * Copyright 2018 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by all applicable intellectual property * laws, including trade secret and copyright laws. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ var timeUnits = { Hours: 3600, Days: 24 * 3600, Weeks: 7 * 24 * 3600, Months: 30 * 24 * 3600, Years: 365 * 24 * 3600 }; module.exports = timeUnits; } } } }, "core": { "displayName": "Core", "hostedLibFilesBaseUrl": "https://assets.adobedtm.com/extensions/EP2348d2a246a14598a388a7b6b9a290a6/", "modules": { "core/src/lib/dataElements/customCode.js": { "name": "custom-code", "displayName": "Custom Code", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; /** * The custom data element. * @param {Object} settings The data element settings object. * @param {string} settings.source The function that should be called which will return a value. * @param {string} event The event (if any) that triggered the evaluation of the data element. * @returns {string} */ module.exports = function (settings, event) { return settings.source(event); }; } }, "core/src/lib/dataElements/queryStringParameter.js": { "name": "query-string-parameter", "displayName": "Query String Parameter", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var window = require('@adobe/reactor-window'); var queryString = require('@adobe/reactor-query-string'); /** * The query string parameter data element. * @param {Object} settings The data element settings object. * @param {string} settings.name The query string parameter name. * @param {string} [settings.caseInsensitive] Whether casing should be ignored. * @returns {string} */ module.exports = function (settings) { var queryParams = queryString.parse(window.location.search); if (settings.caseInsensitive) { var lowerCaseName = settings.name.toLowerCase(); var keys = Object.keys(queryParams); for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (key.toLowerCase() === lowerCaseName) { return queryParams[key]; } } } else { return queryParams[settings.name]; } }; } }, "core/src/lib/dataElements/pageInfo.js": { "name": "page-info", "displayName": "Page Info", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var document = require('@adobe/reactor-document'); /** * The page info data element. * @param {Object} settings The data element settings object. * @param {string} settings.attribute The attribute that should be returned. * @returns {string} */ module.exports = function (settings) { switch (settings.attribute) { case 'url': return document.location.href; case 'hostname': return document.location.hostname; case 'pathname': return document.location.pathname; case 'protocol': return document.location.protocol; case 'referrer': return document.referrer; case 'title': return document.title; } }; } }, "core/src/lib/dataElements/javascriptVariable.js": { "name": "javascript-variable", "displayName": "JavaScript Variable", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var getObjectProperty = require('../helpers/getObjectProperty.js'); /** * The variable data element. * @param {Object} settings The data element settings object. * @param {string} settings.path The global path to the variable holding the data element value. * @returns {string} */ module.exports = function (settings) { return getObjectProperty(window, settings.path); }; } }, "core/src/lib/dataElements/domAttribute.js": { "name": "dom-attribute", "displayName": "DOM Attribute", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; /** * The dom data element. * @param {Object} settings The data element settings object. * @param {string} settings.elementSelector The CSS selector for a DOM element. * @param {string} settings.elementProperty The name of the property or attribute of the DOM * element. * @returns {string} */ module.exports = function (settings) { var element = document.querySelector(settings.elementSelector); if (element) { var property = settings.elementProperty; if (property === 'text') { return element.innerText || element.textContent; } else if (property in element) { return element[property]; } else { return element.getAttribute ? element.getAttribute(property) : undefined; } } }; } }, "core/src/lib/actions/customCode.js": { "name": "custom-code", "displayName": "Custom Code", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var document = require('@adobe/reactor-document'); var Promise = require('@adobe/reactor-promise'); var decorateCode = require('./helpers/decorateCode'); var loadCodeSequentially = require('./helpers/loadCodeSequentially'); var postscribe = require('../../../node_modules/postscribe/dist/postscribe'); var unescapeHTMLEntities = require('./helpers/unescapeHtmlCode'); var cspNonce; var postscribeWrite = (function () { var write = function (source) { postscribe(document.body, source, { beforeWriteToken: function (token) { var tagName = token.tagName && token.tagName.toLowerCase(); if (cspNonce && tagName === 'script') { token.attrs.nonce = cspNonce; } // There is an issue in Postscribe where script and style attributes // are not unescaped. That causes problems when loading scripts from external // sources. See https://jira.corp.adobe.com/browse/DTM-15058. if (tagName === 'script' || tagName === 'style') { Object.keys(token.attrs || {}).forEach(function (key) { token.attrs[key] = unescapeHTMLEntities(token.attrs[key]); }); if (token.src) { token.src = unescapeHTMLEntities(token.src); } } return token; }, error: function (error) { turbine.logger.error(error.msg); } }); }; var queue = []; // If the Launch library is loaded asynchronously, it may finish loading before document.body // is available. This means the custom code action may be running before document.body is // available, in which case can't write the custom code to document.body. We could, in this // case, write it to document.head since it will for sure be available, but the user's custom // code may have something like an img tag for sending a beacon (this use case was seen in DTM). // Adding display elements like an img tag to document.head is against HTML spec, though it // does seem like an image request is still made. We opted instead to ensure we comply with // HTML spec and wait until we see that document.body is available before writing. var flushQueue = function () { if (document.body) { while (queue.length) { write(queue.shift()); } } else { // 20 is an arbitrarily small amount of time but not too aggressive. setTimeout(flushQueue, 20); } }; return function (source) { queue.push(source); flushQueue(); }; })(); var libraryWasLoadedAsynchronously = (function () { // document.currentScript is not supported by IE if (document.currentScript) { return document.currentScript.async; } else { var scripts = document.querySelectorAll('script'); for (var i = 0; i < scripts.length; i++) { var script = scripts[i]; // Find the script that loaded our library. Take into account embed scripts migrated // from DTM. We'll also consider that they may have added a querystring for cache-busting // or whatever. if (/(launch|satelliteLib)-[^\/]+.js(\?.*)?$/.test(script.src)) { return script.async; } } // We couldn't find the Launch script, so we'll assume it was loaded asynchronously. This // is the safer assumption. return true; } })(); /** * The custom code action. This loads and executes custom JavaScript or HTML provided by the user. * @param {Object} settings Action settings. * @params {boolean} settings.isExternal When true, <code>settings.source</code> contains the * code itself. When false, <code>settings.source</code> contains a relative path to the file * containing the user's code. * @param {string} settings.source If <code>settings.external</code> is <code>false</code>, * this will be the user's code. Otherwise, it will be a relative path to the file containing * the user's code. * @param {string} settings.language The language of the user's code. Must be either javascript or * html. * @param {Object} event The underlying event object that triggered the rule. * @param {Object} event.element The element that the rule was targeting. * @param {Object} event.target The element on which the event occurred. * <code>javascript</code> or <code>html</code>. */ module.exports = function (settings, event) { // ensure the nonce is up-to-date when the function is used cspNonce = turbine.getExtensionSettings().cspNonce; var decoratedResult; var action = { settings: settings, event: event }; var source = action.settings.source; if (!source) { return; } if (action.settings.isExternal) { return loadCodeSequentially(source).then(function (source) { if (source) { decoratedResult = decorateCode(action, source); postscribeWrite(decoratedResult.code); return decoratedResult.promise; } return Promise.resolve(); }); } else { decoratedResult = decorateCode(action, source); // This area has been modified several times, so here are some helpful details: // 1. Custom code will be included into the main launch library if it's for a rule that uses the // Library Loaded or Page Bottom event. isExternal will be false. However, keep in mind that // the same rule may have other events that are not Library Loaded or Page Bottom. This means // we could see isExternal = false on the action when the event that fired the rule is // a click, for example. // 2. When users load a library synchronously which has a rule using the Library Loaded // or Page Bottom event with a Custom Code action, they expect the custom code to be written // to the document in a blocking fashion (prevent the parser from continuing until their // custom code is executed). In other words, they expect document.write to be used. When // the library is loaded asynchronously, they do not have this expectation. However, note // that if the Library Loaded event is used and the website does not call // _satellite.pageBottom(), page bottom rules will be run when the DOMContentLoaded event // is fired (at which point we can't use document.write or it will wipe out website content). // 3. Calls to document.write will be ignored by the browser if the Launch library is loaded // asynchronously, even if the calls are made before DOMContentLoaded. // 4. There's a bug in IE 10 where readyState is sometimes set to "interactive" too // early (before DOMContentLoaded has fired). https://bugs.jquery.com/ticket/12282 // This may cause Postscribe to be used sometimes when document.write() could have been // used instead, but we have concluded that IE 10 usage is low enough and the risk small // enough that this behavior is tolerable. if (!libraryWasLoadedAsynchronously && document.readyState === 'loading') { // Document object in XML files is different from the ones in HTML files. Documents served // with the `application/xhtml+xml` MIME type don't have the `document.write` method. // More info: // https://www.w3.org/MarkUp/2004/xhtml-faq#docwrite // https://developer.mozilla.org/en-US/docs/Archive/Web/Writing_JavaScript_for_HTML // Also, when rule component sequencing is enabled, there is an issue in Edge Legacy // where the whole page gets erased: https://jira.corp.adobe.com/browse/DTM-13527. // We decided to not use document.write at all when rule component sequencing is enabled. if ( document.write && turbine.propertySettings.ruleComponentSequencingEnabled === false ) { document.write(decoratedResult.code); } else { postscribeWrite(decoratedResult.code); } } else { postscribeWrite(decoratedResult.code); } return decoratedResult.promise; } }; } }, "core/src/lib/conditions/valueComparison.js": { "name": "value-comparison", "displayName": "Value Comparison", "script": function(module, exports, require, turbine) { /*************************************************************************************** * (c) 2018 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ /*eslint eqeqeq:0*/ 'use strict'; var isString = require('../helpers/stringAndNumberUtils').isString; var isNumber = require('../helpers/stringAndNumberUtils').isNumber; var castToStringIfNumber = require('../helpers/stringAndNumberUtils') .castToStringIfNumber; var castToNumberIfString = require('../helpers/stringAndNumberUtils') .castToNumberIfString; var updateCase = function (operand, caseInsensitive) { return caseInsensitive && isString(operand) ? operand.toLowerCase() : operand; }; var guardStringCompare = function (compare) { return function (leftOperand, rightOperand, caseInsensitive) { leftOperand = castToStringIfNumber(leftOperand); rightOperand = castToStringIfNumber(rightOperand); return ( isString(leftOperand) && isString(rightOperand) && compare(leftOperand, rightOperand, caseInsensitive) ); }; }; var guardNumberCompare = function (compare) { return function (leftOperand, rightOperand) { leftOperand = castToNumberIfString(leftOperand); rightOperand = castToNumberIfString(rightOperand); return ( isNumber(leftOperand) && isNumber(rightOperand) && compare(leftOperand, rightOperand) ); }; }; var guardCaseSensitivity = function (compare) { return function (leftOperand, rightOperand, caseInsensitive) { return compare( updateCase(leftOperand, caseInsensitive), updateCase(rightOperand, caseInsensitive) ); }; }; var conditions = { equals: guardCaseSensitivity(function (leftOperand, rightOperand) { return leftOperand == rightOperand; }), doesNotEqual: function () { return !conditions.equals.apply(null, arguments); }, contains: guardStringCompare( guardCaseSensitivity(function (leftOperand, rightOperand) { return leftOperand.indexOf(rightOperand) !== -1; }) ), doesNotContain: function () { return !conditions.contains.apply(null, arguments); }, startsWith: guardStringCompare( guardCaseSensitivity(function (leftOperand, rightOperand) { return leftOperand.indexOf(rightOperand) === 0; }) ), doesNotStartWith: function () { return !conditions.startsWith.apply(null, arguments); }, endsWith: guardStringCompare( guardCaseSensitivity(function (leftOperand, rightOperand) { return ( leftOperand.substring( leftOperand.length - rightOperand.length, leftOperand.length ) === rightOperand ); }) ), doesNotEndWith: function () { return !conditions.endsWith.apply(null, arguments); }, matchesRegex: guardStringCompare(function ( leftOperand, rightOperand, caseInsensitive ) { // Doing something like new RegExp(/ab+c/, 'i') throws an error in some browsers (e.g., IE11), // so we don't want to instantiate the regex until we know we're working with a string. return new RegExp(rightOperand, caseInsensitive ? 'i' : '').test( leftOperand ); }), doesNotMatchRegex: function () { return !conditions.matchesRegex.apply(null, arguments); }, lessThan: guardNumberCompare(function (leftOperand, rightOperand) { return leftOperand < rightOperand; }), lessThanOrEqual: guardNumberCompare(function (leftOperand, rightOperand) { return leftOperand <= rightOperand; }), greaterThan: guardNumberCompare(function (leftOperand, rightOperand) { return leftOperand > rightOperand; }), greaterThanOrEqual: guardNumberCompare(function (leftOperand, rightOperand) { return leftOperand >= rightOperand; }), isTrue: function (leftOperand) { return leftOperand === true; }, isTruthy: function (leftOperand) { return Boolean(leftOperand); }, isFalse: function (leftOperand) { return leftOperand === false; }, isFalsy: function (leftOperand) { return !leftOperand; } }; module.exports = function (settings) { return conditions[settings.comparison.operator]( settings.leftOperand, settings.rightOperand, Boolean(settings.comparison.caseInsensitive) ); }; } }, "core/src/lib/events/domReady.js": { "name": "dom-ready", "displayName": "DOM Ready", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var pageLifecycleEvents = require('./helpers/pageLifecycleEvents'); /** * DOM ready event. This event occurs as soon as HTML document has been completely loaded and * parsed, without waiting for stylesheets, images, and subframes to finish loading. * @param {Object} settings The event settings object. * @param {ruleTrigger} trigger The trigger callback. */ module.exports = function (settings, trigger) { pageLifecycleEvents.registerDomReadyTrigger(trigger); }; } }, "core/src/lib/conditions/customCode.js": { "name": "custom-code", "displayName": "Custom Code", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; /** * Custom code condition. This executes condition code provided by the user. * @param {Object} settings Condition settings. * @param {Function} settings.source The custom script function. * @param {Object} event The underlying event object that triggered the rule. * @param {Object} event.element The element that the rule was targeting. * @param {Object} event.target The element on which the event occurred. * @returns {boolean} */ module.exports = function (settings, event) { // `this` and `target` are provided separately from event for backward-compatibility. return settings.source.call(event.element, event, event.target); }; } }, "core/src/lib/events/directCall.js": { "name": "direct-call", "displayName": "Direct Call", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; /** * Object where the key is the call name and the value is an array of all rule trigger functions * for that call name. * @type {Object} */ var triggersByIdentifier = {}; window._satellite = window._satellite || {}; /** * Public function intended to be called by the user. * @param {string} identifier The identifier passed to _satellite.track(). * @param {*} [detail] Any detail that should be passed along to conditions and actions. */ window._satellite.track = function (identifier, detail) { identifier = identifier.trim(); var triggers = triggersByIdentifier[identifier]; if (triggers) { var syntheticEvent = { identifier: identifier, detail: detail }; triggers.forEach(function (trigger) { trigger(syntheticEvent); }); var logMessage = 'Rules using the direct call event type with identifier "' + identifier + '" have been triggered' + (detail ? ' with additional detail:' : '.'); var logArgs = [logMessage]; if (detail) { logArgs.push(detail); } turbine.logger.log.apply(turbine.logger, logArgs); } else { turbine.logger.log( '"' + identifier + '" does not match any direct call identifiers.' ); } }; /** * Direct call event. This event occurs as soon as the user calls _satellite.track(). * @param {Object} settings The event settings object. * @param {string} settings.identifier The identifier passed to _satellite.track(). * @param {ruleTrigger} trigger The trigger callback. */ module.exports = function (settings, trigger) { var triggers = triggersByIdentifier[settings.identifier]; if (!triggers) { triggers = triggersByIdentifier[settings.identifier] = []; } triggers.push(trigger); }; } }, "core/src/lib/events/libraryLoaded.js": { "name": "library-loaded", "displayName": "Library Loaded (Page Top)", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var pageLifecycleEvents = require('./helpers/pageLifecycleEvents'); /** * Library loaded event. This event occurs as soon as the runtime library is loaded. * @param {Object} settings The event settings object. * @param {ruleTrigger} trigger The trigger callback. */ module.exports = function (settings, trigger) { pageLifecycleEvents.registerLibraryLoadedTrigger(trigger); }; } }, "core/src/lib/conditions/domain.js": { "name": "domain", "displayName": "Domain", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var document = require('@adobe/reactor-document'); var matchOperatorsRegex = /[|\\{}()[\]^$+*?.-]/g; var escapeForRegex = function (string) { if (typeof string !== 'string') { throw new TypeError('Expected a string'); } return string.replace(matchOperatorsRegex, '\\$&'); }; /** * Domain condition. Determines if the actual domain matches at least one acceptable domain. * @param {Object} settings Condition settings. * @param {string[]} settings.domains An array of acceptable domains. * @returns {boolean} */ module.exports = function (settings) { var domain = document.location.hostname; return settings.domains.some(function (acceptableDomain) { // If document.location.hostname is example.com and the acceptableDomain is ample.com, the // condition would pass without (^|\.), which is incorrect. We can't only use ^ though because // if document.location.hostname is niner.example.com and the acceptableDomain is example.com, // the condition should pass. See the tests for examples of why this pattern is necessary. return domain.match( new RegExp('(^|\\.)' + escapeForRegex(acceptableDomain) + '$', 'i') ); }); }; } }, "core/src/lib/conditions/path.js": { "name": "path", "displayName": "Path Without Query String", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var document = require('@adobe/reactor-document'); var textMatch = require('../helpers/textMatch'); /** * Path condition. Determines if the actual path matches at least one acceptable path. * @param {Object} settings Condition settings. * @param {Object[]} settings.paths Acceptable paths. * @param {string} settings.paths[].value An acceptable path value. * @param {boolean} [settings.paths[].valueIsRegex=false] Whether <code>value</code> on the object * instance is intended to be a regular expression. * @returns {boolean} */ module.exports = function (settings) { var path = document.location.pathname; return settings.paths.some(function (acceptablePath) { var acceptableValue = acceptablePath.valueIsRegex ? new RegExp(acceptablePath.value, 'i') : acceptablePath.value; return textMatch(path, acceptableValue); }); }; } }, "core/src/lib/events/click.js": { "name": "click", "displayName": "Click", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var window = require('@adobe/reactor-window'); var bubbly = require('./helpers/createBubbly')(); var WeakMap = require('./helpers/weakMap'); var evaluatedEvents = new WeakMap(); var MIDDLE_MOUSE_BUTTON = 2; var castToNumberIfString = require('../helpers/stringAndNumberUtils') .castToNumberIfString; /** * Determines whether an element is a link that would navigate the user's current window to a * different URL. * @param {MouseEvent} e * @returns {boolean} */ var getDelayableLink = function (e) { // user is modifying click with the keyboard, don't delay the navigation if (e.ctrlKey || e.metaKey || e.button === MIDDLE_MOUSE_BUTTON) { return undefined; } var node = e.target; while (node) { var tagName = node.tagName; if (tagName && tagName.toLowerCase() === 'a') { var href = node.getAttribute('href'); var target = node.getAttribute('target'); if ( href && (!target || target === '_self' || (target === '_top' && window.top === window) || target === window.name) ) { return node; } else { // Found hyperlink conditions in which we don't want to delay navigation return undefined; } } node = node.parentNode; } }; document.addEventListener('click', bubbly.evaluateEvent, true); /** * The click event. This event occurs when a user has clicked an element. * @param {Object} settings - The event settings object. * @param {string} [settings.elementSelector] - The CSS selector the element must match in order for * the rule to fire. * @param {Object[]} settings.elementProperties - Property values the element must have in order * for the rule to fire. * @param {string} settings.elementProperties[].name - The property name. * @param {string} settings.elementProperties[].value - The property value. * @param {number|string} [settings.anchorDelay] - When present and a link is clicked, actual * navigation will be postponed for a period of time equal with its value. This is typically used to * allow time for scripts within the rule to execute, beacons to be sent to servers, etc. * @param {boolean} settings.elementProperties[].valueIsRegex=false - Whether <code>value</code> * on the object instance is intended to be a regular expression. * @param {boolean} settings.bubbleFireIfParent=true - Whether the rule should fire if * the event originated from a descendant element. * @param {boolean} settings.bubbleFireIfChildFired=true - Whether the rule should fire * if the same event has already triggered a rule targeting a descendant element. * @param {boolean} settings.bubbleStop=false - Whether the event should not trigger * rules on ancestor elements. * @param {function} trigger - The trigger callback. */ module.exports = function (settings, trigger) { bubbly.addListener(settings, function (syntheticEvent) { var nativeEvent = syntheticEvent.nativeEvent; // AppMeasurement captures the click events, and tries to detect if the element clicked is an A // tag that contains an exit link. When that happens, it stops the initial event, sends a // beacon, clones the initial event and fires it again. // Reactor detects the click events first, because its listeners are set on the capture phase. // We need to ignore the cloned event, otherwise the same rule will fire twice. AppMeasurement // sets `s_fe` attribute on the cloned event, and that is the flag we'll use to ignore these // fake events. // https://git.corp.adobe.com/analytics-platform/appmeasurement/blob/master/bin/js/src/AppMeasurement.js#L3196 if (nativeEvent.s_fe) { return; } var anchorDelay = castToNumberIfString(settings.anchorDelay); if (anchorDelay) { if (!evaluatedEvents.has(nativeEvent)) { var delayableLink = getDelayableLink(nativeEvent); if (delayableLink) { nativeEvent.preventDefault(); setTimeout(function () { window.location = delayableLink.href; }, anchorDelay); } evaluatedEvents.set(nativeEvent, true); } } trigger(syntheticEvent); }); }; /** * @private * Clears all listeners. This should only be used in tests. */ module.exports.__reset = bubbly.__reset; } }, "core/src/lib/events/pageBottom.js": { "name": "page-bottom", "displayName": "Page Bottom", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var pageLifecycleEvents = require('./helpers/pageLifecycleEvents'); /** * Page bottom event. This event occurs as soon as the user calls _satellite.pageBottom() (which is * supposed to be at the bottom of the page). * @param {Object} settings The event settings object. * @param {ruleTrigger} trigger The trigger callback. */ module.exports = function (settings, trigger) { pageLifecycleEvents.registerPageBottomTrigger(trigger); }; } }, "core/src/lib/events/windowLoaded.js": { "name": "window-loaded", "displayName": "Window Loaded", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var pageLifecycleEvents = require('./helpers/pageLifecycleEvents'); /** * Window loaded event. This event occurs at the end of the document loading process. At this point, * all of the objects in the document are loaded in the DOM, and all images, scripts, links, * and sub-frames have finished loading. * @param {Object} settings The event settings object. * @param {ruleTrigger} trigger The trigger callback. */ module.exports = function (settings, trigger) { pageLifecycleEvents.registerWindowLoadedTrigger(trigger); }; } }, "core/src/lib/events/entersViewport.js": { "name": "enters-viewport", "displayName": "Enters Viewport", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var document = require('@adobe/reactor-document'); var window = require('@adobe/reactor-window'); var WeakMap = require('./helpers/weakMap'); var debounce = require('./helpers/debounce'); var enableWeakMapDefaultValue = require('./helpers/enableWeakMapDefaultValue'); var matchesSelector = require('./helpers/matchesSelector'); var matchesProperties = require('./helpers/matchesProperties'); var castToNumberIfString = require('../helpers/stringAndNumberUtils') .castToNumberIfString; var POLL_INTERVAL = 3000; var DEBOUNCE_DELAY = 200; var frequencies = { FIRST_ENTRY: 'firstEntry', EVERY_ENTRY: 'everyEntry' }; var isIE10 = window.navigator.appVersion.indexOf('MSIE 10') !== -1; var stateByElement = enableWeakMapDefaultValue(new WeakMap(), function () { return { // When a user configures the event to fire the rule after an element has been inside // the viewport for a certain period of time, we run a timeout for that period of time after // we first see the element in the viewport. This array contains the IDs for all the timeouts // for the element. timeoutIds: [], // When a user configures the event to only fire a rule once, after the rule has been triggered, // we store the "listener" in this array so that we know it's been fired and shouldn't be fired // again. completedListeners: [], // Whether the element is currently inside the viewport. inViewport: false }; }); var listenersBySelector = {}; /** * Gets the offset of the element. * @param elem * @returns {{top: number, left: number}} */ var offset = function (elem) { var box; try { box = elem.getBoundingClientRect(); } catch (e) { // ignore } var docElem = document.documentElement; var body = document.body; var clientTop = docElem.clientTop || body.clientTop || 0; var clientLeft = docElem.clientLeft || body.clientLeft || 0; var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop; var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft; var top = box.top + scrollTop - clientTop; var left = box.left + scrollLeft - clientLeft; return { top: top, left: left }; }; /** * Viewport height. * @returns {number} */ var getViewportHeight = function () { var height = window.innerHeight; // Safari, Opera var mode = document.compatMode; if (mode) { // IE, Gecko height = mode === 'CSS1Compat' ? document.documentElement.clientHeight // Standards : document.body.clientHeight; // Quirks } return height; }; /** * Scroll top. * @returns {number} */ var getScrollTop = function () { return document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop; }; /** * Whether an element is in the viewport. * @param element The element to evaluate. * @param viewportHeight The viewport height. Passed in for optimization purposes. * @param scrollTop The scroll top. Passed in for optimization purposes. * @returns {boolean} */ var elementIsInView = function (element, viewportHeight, scrollTop) { var top = offset(element).top; var height = element.offsetHeight; return ( document.body.contains(element) && !(scrollTop > top + height || scrollTop + viewportHeight < top) ); }; /** * Handle when a targeted element is inside the viewport. */ var handleElementInsideViewport = function (element) { var elementState = stateByElement.get(element); if (elementState.inViewport) { return; } elementState.inViewport = true; // Evaluate the element against all stored listeners to see which ones should be triggered // due to the element being in the viewport. Object.keys(listenersBySelector).forEach(function (selector) { if (!matchesSelector(element, selector)) { return; } listenersBySelector[selector].forEach(function (listener) { if (!matchesProperties(element, listener.settings.elementProperties)) { return; } // If the listener was already triggered and shouldn't be triggered again, bail. if (elementState.completedListeners.indexOf(listener) !== -1) { return; } var delayComplete = function () { var frequency = listener.settings.frequency || frequencies.FIRST_ENTRY; // When a user configures the event to only fire a rule once, then after the rule // has been triggered we store the "listener" in this array so that we know it's // been triggered and shouldn't be triggered in the future. if (frequency === frequencies.FIRST_ENTRY) { elementState.completedListeners.push(listener); } listener.trigger({ element: element, target: element, delay: listener.settings.delay }); }; if (listener.settings.delay) { var timeoutId = setTimeout(function () { // One last check to make sure the element is still in view. if (elementIsInView(element, getViewportHeight(), getScrollTop())) { delayComplete(); } }, listener.settings.delay); elementState.timeoutIds.push(timeoutId); } else { delayComplete(); } }); }); }; /** * Handle when a targeted element is outside the viewport. */ var handleElementOutsideViewport = function (element) { var elementState = stateByElement.get(element); elementState.inViewport = false; if (elementState.timeoutIds.length) { elementState.timeoutIds.forEach(clearTimeout); elementState.timeoutIds = []; } }; /** * Checks to see if a rule's target selector matches an element in the viewport. If that element * has not been in the viewport prior, either (a) trigger the rule immediately if the user has not * elected to delay for a period of time or (b) start the delay period if the user has elected * to delay for a period of time. After an element being in the viewport triggers a rule, it * can't trigger the same rule again. If another element matching the same selector comes into * the viewport, it may trigger the same rule again. */ var checkForElementsInViewport = debounce(function () { var selectors = Object.keys(listenersBySelector); if (!selectors.length) { return; } // Find all the elements pertaining to rules using Enters Viewport. var elements = document.querySelectorAll(selectors.join(',')); // Cached and re-used for optimization. var viewportHeight = getViewportHeight(); var scrollTop = getScrollTop(); for (var i = 0; i < elements.length; i++) { var element = elements[i]; if (elementIsInView(element, viewportHeight, scrollTop)) { handleElementInsideViewport(element); } else { handleElementOutsideViewport(element); } } }, DEBOUNCE_DELAY); var initializeContentListeners = function () { checkForElementsInViewport(); setInterval(checkForElementsInViewport, POLL_INTERVAL); window.addEventListener('resize', checkForElementsInViewport); window.addEventListener('scroll', checkForElementsInViewport); }; // There's a bug in IE 10 where readyState is sometimes set to "interactive" too // early (before DOMContentLoaded has fired). To make sure the document is ready, // we'll wait until the window has loaded. // https://bugs.jquery.com/ticket/12282 if (isIE10) { if (document.readyState === 'complete') { initializeContentListeners(); } else { window.addEventListener('load', initializeContentListeners); } } else { if (document.readyState !== 'loading') { initializeContentListeners(); } else { document.addEventListener('DOMContentLoaded', initializeContentListeners); } } /** * Enters viewport event. This event occurs when an element has entered the viewport. The rule * will run once and only once for each element that matches the settings. If multiple * elements match the settings, the rule will fire for each matching element. * @param {Object} settings The event config object. * @param {string} settings.elementSelector The CSS selector the element must match in order for * the rule to fire. * targeting. * @param {Object[]} [settings.elementProperties] Property values the element must have in order * for the rule to fire. * @param {string} settings.elementProperties[].name The property name. * @param {string} settings.elementProperties[].value The property value. * @param {boolean} [settings.elementProperties[].valueIsRegex=false] Whether <code>value</code> * on the object instance is intended to be a regular expression. * @param {number|string} [settings.delay] The number of milliseconds the element must be * within the viewport before declaring that the event has occurred. * @param {ruleTrigger} trigger The trigger callback. */ module.exports = function (settings, trigger) { var listeners = listenersBySelector[settings.elementSelector]; if (!listeners) { listeners = listenersBySelector[settings.elementSelector] = []; } settings.delay = castToNumberIfString(settings.delay); listeners.push({ settings: settings, trigger: trigger }); }; } }, "core/src/lib/events/historyChange.js": { "name": "history-change", "displayName": "History Change", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var debounce = require('./helpers/debounce'); var once = require('./helpers/once'); var history = window.history; var lastURI = window.location.href; var triggers = []; /** * Replaces a method on an object with a proxy method only calls the original method but also * another explicitly defined function. * @param {Object} object The object containing the method to replace. * @param {String} methodName The name of the method to replace with the proxy method. * @param {Function} fn A function that should be called after the original method is called. */ var callThrough = function (object, methodName, fn) { var original = object[methodName]; object[methodName] = function () { var returnValue = original.apply(object, arguments); fn.apply(null, arguments); return returnValue; }; }; /** * Calls all the trigger methods if the URI has changed. */ var callTriggersIfURIChanged = debounce(function () { var uri = window.location.href; if (lastURI !== uri) { triggers.forEach(function (trigger) { trigger(); }); lastURI = uri; } }, 0); /** * Starts watching for history changes. */ var watchForHistoryChange = once(function () { if (history) { if (history.pushState) { callThrough(history, 'pushState', callTriggersIfURIChanged); } if (history.replaceState) { callThrough(history, 'replaceState', callTriggersIfURIChanged); } } window.addEventListener('popstate', callTriggersIfURIChanged); window.addEventListener('hashchange', callTriggersIfURIChanged); }); /** * History change event. This event occurs when the URL hash is changed or the URL is changed * through the <code>history</code> API. * @param {Object} settings The event settings object. * @param {ruleTrigger} trigger The trigger callback. */ module.exports = function (settings, trigger) { watchForHistoryChange(); triggers.push(trigger); }; } }, "core/src/lib/events/dataElementChange.js": { "name": "data-element-change", "displayName": "Data Element Change", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var POLL_INTERVAL = 1000; var triggersByName = {}; var cachedStringifiedValueByName = {}; setInterval(function () { Object.keys(triggersByName).forEach(function (name) { var stringifiedValue = JSON.stringify(turbine.getDataElementValue(name)); if (stringifiedValue !== cachedStringifiedValueByName[name]) { var syntheticEvent = { dataElementName: name }; triggersByName[name].forEach(function (trigger) { trigger(syntheticEvent); }); cachedStringifiedValueByName[name] = stringifiedValue; } }); }, POLL_INTERVAL); /** * Data element change event. This event occurs whenever the given data element's value has changed. * @param {Object} settings The event settings object. * @param {string} settings.name The name of the data element. * @param {ruleTrigger} trigger The trigger callback. */ module.exports = function (settings, trigger) { var name = settings.name; var triggers = triggersByName[name]; if (!triggers) { triggers = triggersByName[name] = []; cachedStringifiedValueByName[name] = JSON.stringify( turbine.getDataElementValue(name) ); } triggers.push(trigger); }; } }, "core/src/lib/conditions/dateRange.js": { "name": "date-range", "displayName": "Date Range", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; /** * Date range condition. Determines if we are within a specific date range. * @param {Object} settings Condition settings. * @param {string} [settings.start] A date, in ISO 8601, indicating when the condition should * start returning true. * @param {string} [settings.end] A date, in ISO 8601, indicating when the condition should * stop returning true. * @returns {boolean} */ module.exports = function (settings) { var now = new Date(); if (settings.start && now < new Date(settings.start)) { return false; } if (settings.end && now > new Date(settings.end)) { return false; } return true; }; } }, "core/src/lib/conditions/protocol.js": { "name": "protocol", "displayName": "Protocol", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; /** * Protocol condition. Determines if the actual protocol matches at least one acceptable * protocol. * @param {Object} settings Condition settings. * @param {string} settings.protocol An acceptable protocol. * @returns {boolean} */ module.exports = function (settings) { return ( document.location.protocol.toLowerCase() === settings.protocol.toLowerCase() ); }; } }, "core/src/lib/conditions/maxFrequency.js": { "name": "max-frequency", "displayName": "Max Frequency", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var visitorTracking = require('../helpers/visitorTracking'); var getNamespacedStorage = require('../helpers/getNamespacedStorage'); var maxFrequencyLocalStorage = getNamespacedStorage( 'localStorage', 'maxFrequency' ); var millisByUnit = { second: 1000, minute: 60000, // 60 seconds hour: 3600000, // 60 minutes day: 86400000, // 24 hours week: 604800000, // 7 days month: 2678400000 // 31 days }; /** * Max frequency condition. Allows the condition to return true at a maximum frequency. * @param {Object} settings Condition settings. * @param {number} [settings.count] The number of units that defines the maximum frequency. This is * required if <code>settings.unit</code> is not <code>visitor</code> and not used if * <code>settings.unit</code> is <code>visitor</code>. * @param {string} settings.unit The unit that defines the maximum frequency. * @returns {boolean} */ module.exports = function (settings, event) { // Note that our storage key incorporates the rule ID instead of the rule component ID // (because a rule component ID isn't available). The storage key ALSO // incorporates the value of settings.unit. This means that multiple Max Frequency // conditions on the same rule could potentially conflict by using the same key, but only // if they're using the same unit. This would be a very strange use case and would result // in unexpected behavior. For example, if a rule had two Max Frequency conditions using the // pageView unit and one of the conditions used a count of 3 and the other used a count of 4, // the actions of the rule would never be executed. var storageKey = event.$rule.id + '.' + settings.unit; switch (settings.unit) { case 'pageView': var pageViewCount = visitorTracking.getLifetimePageViewCount(); var lastRecordedPageViewCount = Number( maxFrequencyLocalStorage.getItem(storageKey) || 0 ); if (pageViewCount - lastRecordedPageViewCount >= settings.count) { maxFrequencyLocalStorage.setItem(storageKey, pageViewCount); return true; } break; case 'session': var sessionCount = visitorTracking.getSessionCount(); var lastRecordedSessionCount = Number( maxFrequencyLocalStorage.getItem(storageKey) || 0 ); if (sessionCount - lastRecordedSessionCount >= settings.count) { maxFrequencyLocalStorage.setItem(storageKey, sessionCount); return true; } break; case 'visitor': // We don't support settings.count for visitor because that would require a server-side // component to track the number of visitors. if (!maxFrequencyLocalStorage.getItem(storageKey)) { maxFrequencyLocalStorage.setItem(storageKey, 'true'); return true; } break; case 'second': case 'minute': case 'hour': case 'day': case 'week': case 'month': var time = new Date().getTime(); var lastRecordedTime = Number( maxFrequencyLocalStorage.getItem(storageKey) || 0 ); if ( lastRecordedTime <= time - settings.count * millisByUnit[settings.unit] ) { maxFrequencyLocalStorage.setItem(storageKey, time); return true; } break; } return false; }; } }, "core/src/lib/events/customEvent.js": { "name": "custom-event", "displayName": "Custom Event", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var bubbly = require('./helpers/createBubbly')(); var typesWatched = []; /** * The custom event. When an event is seen with the specified type, the rule will be executed. * @param {Object} settings The event settings object. * @param {string} settings.type The custom event type. * @param {string} [settings.elementSelector] The CSS selector the element must match in order for * the rule to fire. * @param {Object[]} [settings.elementProperties] Property values the element must have in order * for the rule to fire. * @param {string} settings.elementProperties[].name The property name. * @param {string} settings.elementProperties[].value The property value. * @param {boolean} [settings.elementProperties[].valueIsRegex=false] Whether <code>value</code> * on the object instance is intended to be a regular expression. * @param {boolean} [settings.bubbleFireIfParent=true] Whether the rule should fire if * the event originated from a descendant element. * @param {boolean} [settings.bubbleFireIfChildFired=true] Whether the rule should fire * if the same event has already triggered a rule targeting a descendant element. * @param {boolean} [settings.bubbleStop=false] Whether the event should not trigger * rules on ancestor elements. * @param {ruleTrigger} trigger The trigger callback. */ module.exports = function (settings, trigger) { var type = settings.type; if (typesWatched.indexOf(type) === -1) { typesWatched.push(type); window.addEventListener(type, bubbly.evaluateEvent, true); } bubbly.addListener(settings, function (event) { if (event.nativeEvent.type === type) { // Copying detail up to the top-level makes it easier for users to consume and // makes it backward-compatible with DTM. event.detail = event.nativeEvent.detail; trigger(event); } }); }; } }, "core/src/lib/conditions/pathAndQuerystring.js": { "name": "path-and-querystring", "displayName": "Path And Query String", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var document = require('@adobe/reactor-document'); var textMatch = require('../helpers/textMatch'); /** * Path and query string condition. Provided for legacy reasons. Determines if the actual path + * query string matches at least one acceptable path + query string. * @param {Object} settings Condition settings. * @param {Object[]} settings.paths Acceptable paths. * @param {string} settings.paths[].value An acceptable path value. * @param {boolean} [settings.paths[].valueIsRegex=false] Whether <code>value</code> on the object * instance is intended to be a regular expression. * @returns {boolean} */ module.exports = function (settings) { var path = document.location.pathname + document.location.search; return settings.paths.some(function (acceptablePath) { var acceptableValue = acceptablePath.valueIsRegex ? new RegExp(acceptablePath.value, 'i') : acceptablePath.value; return textMatch(path, acceptableValue); }); }; } }, "core/src/lib/conditions/variable.js": { "name": "variable", "displayName": "Variable", "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var getObjectProperty = require('../helpers/getObjectProperty'); var textMatch = require('../helpers/textMatch'); /** * Variable condition. Determines if a particular JS variable's actual value matches * an acceptable value. * @param {Object} settings Condition settings. * @param {number} settings.name The name of the JS variable (e.g., event.target.id). * @param {string} settings.value An acceptable JS variable value. * @param {boolean} [settings.valueIsRegex=false] Whether <code>settings.value</code> is intended to * be a regular expression. * @returns {boolean} */ module.exports = function (settings) { var acceptableValue = settings.valueIsRegex ? new RegExp(settings.value, 'i') : settings.value; return textMatch(getObjectProperty(window, settings.name), acceptableValue); }; } }, "core/src/lib/helpers/getObjectProperty.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; /** * Returns the deep property value of an object. * @param obj The object where the property will be searched. * @param property The property name to be returned. It can contain dots. (eg. prop.subprop1) * @returns {*} */ module.exports = function (obj, property) { var propertyChain = property.split('.'); var currentValue = obj; for (var i = 0, len = propertyChain.length; i < len; i++) { if (currentValue == null) { return undefined; } currentValue = currentValue[propertyChain[i]]; } return currentValue; }; } }, "core/src/lib/actions/helpers/decorateCode.js": { "script": function(module, exports, require, turbine) { /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ 'use strict'; var decorateGlobalJavaScriptCode = require('./decorators/decorateGlobalJavaScriptCode'); var decorateNonGlobalJavaScriptCode = require('./decorators/decorateNonGlobalJavaScriptCode'); var decorateHtmlCode = require('./decorators/decorateHtmlCode'); var decorators = { javascript: function (action, source) { return action.settings.global ? decorateGlobalJavaScriptCode(action, source) : decorateNonGlobalJavaScriptCode(action, source); }, html: decorateHtmlCode }; module.exports = function (action, source) { return decorators[action.settings.language](action, source); }; } }, "core/src/lib/actions/helpers/loadCodeSequentially.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var Promise = require('@adobe/reactor-promise'); var getSourceByUrl = require('./getSourceByUrl'); var previousExecuteCodePromise = Promise.resolve(); module.exports = function (sourceUrl) { var sequentiallyLoadCodePromise = new Promise(function (resolve) { var loadCodePromise = getSourceByUrl(sourceUrl); Promise.all([loadCodePromise, previousExecuteCodePromise]).then(function ( values ) { var source = values[0]; resolve(source); }); }); previousExecuteCodePromise = sequentiallyLoadCodePromise; return sequentiallyLoadCodePromise; }; } }, "core/node_modules/postscribe/dist/postscribe.js": { "script": function(module, exports, require, turbine) { /** * @file postscribe * @description Asynchronously write javascript, even with document.write. * @version v2.0.8 * @see {@link https://krux.github.io/postscribe} * @license MIT * @author Derek Brans * @copyright 2016 Krux Digital, Inc */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["postscribe"] = factory(); else root["postscribe"] = factory(); })(this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _postscribe = __webpack_require__(1); var _postscribe2 = _interopRequireDefault(_postscribe); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } module.exports = _postscribe2['default']; /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; exports.__esModule = true; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports['default'] = postscribe; var _writeStream = __webpack_require__(2); var _writeStream2 = _interopRequireDefault(_writeStream); var _utils = __webpack_require__(4); var utils = _interopRequireWildcard(_utils); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * A function that intentionally does nothing. */ function doNothing() {} /** * Available options and defaults. * * @type {Object} */ var OPTIONS = { /** * Called when an async script has loaded. */ afterAsync: doNothing, /** * Called immediately before removing from the write queue. */ afterDequeue: doNothing, /** * Called sync after a stream's first thread release. */ afterStreamStart: doNothing, /** * Called after writing buffered document.write calls. */ afterWrite: doNothing, /** * Allows disabling the autoFix feature of prescribe */ autoFix: true, /** * Called immediately before adding to the write queue. */ beforeEnqueue: doNothing, /** * Called before writing a token. * * @param {Object} tok The token */ beforeWriteToken: function beforeWriteToken(tok) { return tok; }, /** * Called before writing buffered document.write calls. * * @param {String} str The string */ beforeWrite: function beforeWrite(str) { return str; }, /** * Called when evaluation is finished. */ done: doNothing, /** * Called when a write results in an error. * * @param {Error} e The error */ error: function error(e) { throw new Error(e.msg); }, /** * Whether to let scripts w/ async attribute set fall out of the queue. */ releaseAsync: false }; var nextId = 0; var queue = []; var active = null; function nextStream() { var args = queue.shift(); if (args) { var options = utils.last(args); options.afterDequeue(); args.stream = runStream.apply(undefined, args); options.afterStreamStart(); } } function runStream(el, html, options) { active = new _writeStream2['default'](el, options); // Identify this stream. active.id = nextId++; active.name = options.name || active.id; postscribe.streams[active.name] = active; // Override document.write. var doc = el.ownerDocument; var stash = { close: doc.close, open: doc.open, write: doc.write, writeln: doc.writeln }; function _write(str) { str = options.beforeWrite(str); active.write(str); options.afterWrite(str); } _extends(doc, { close: doNothing, open: doNothing, write: function write() { for (var _len = arguments.length, str = Array(_len), _key = 0; _key < _len; _key++) { str[_key] = arguments[_key]; } return _write(str.join('')); }, writeln: function writeln() { for (var _len2 = arguments.length, str = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { str[_key2] = arguments[_key2]; } return _write(str.join('') + '\n'); } }); // Override window.onerror var oldOnError = active.win.onerror || doNothing; // This works together with the try/catch around WriteStream::insertScript // In modern browsers, exceptions in tag scripts go directly to top level active.win.onerror = function (msg, url, line) { options.error({ msg: msg + ' - ' + url + ': ' + line }); oldOnError.apply(active.win, [msg, url, line]); }; // Write to the stream active.write(html, function () { // restore document.write _extends(doc, stash); // restore window.onerror active.win.onerror = oldOnError; options.done(); active = null; nextStream(); }); return active; } function postscribe(el, html, options) { if (utils.isFunction(options)) { options = { done: options }; } else if (options === 'clear') { queue = []; active = null; nextId = 0; return; } options = utils.defaults(options, OPTIONS); // id selector if (/^#/.test(el)) { el = window.document.getElementById(el.substr(1)); } else { el = el.jquery ? el[0] : el; } var args = [el, html, options]; el.postscribe = { cancel: function cancel() { if (args.stream) { args.stream.abort(); } else { args[1] = doNothing; } } }; options.beforeEnqueue(args); queue.push(args); if (!active) { nextStream(); } return el.postscribe; } _extends(postscribe, { // Streams by name. streams: {}, // Queue of streams. queue: queue, // Expose internal classes. WriteStream: _writeStream2['default'] }); /***/ }, /* 2 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; exports.__esModule = true; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _prescribe = __webpack_require__(3); var _prescribe2 = _interopRequireDefault(_prescribe); var _utils = __webpack_require__(4); var utils = _interopRequireWildcard(_utils); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Turn on to debug how each chunk affected the DOM. * @type {boolean} */ var DEBUG_CHUNK = false; /** * Prefix for data attributes on DOM elements. * @type {string} */ var BASEATTR = 'data-ps-'; /** * ID for the style proxy * @type {string} */ var PROXY_STYLE = 'ps-style'; /** * ID for the script proxy * @type {string} */ var PROXY_SCRIPT = 'ps-script'; /** * Get data attributes * * @param {Object} el The DOM element. * @param {String} name The attribute name. * @returns {String} */ function getData(el, name) { var attr = BASEATTR + name; var val = el.getAttribute(attr); // IE 8 returns a number if it's a number return !utils.existy(val) ? val : String(val); } /** * Set data attributes * * @param {Object} el The DOM element. * @param {String} name The attribute name. * @param {null|*} value The attribute value. */ function setData(el, name) { var value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var attr = BASEATTR + name; if (utils.existy(value) && value !== '') { el.setAttribute(attr, value); } else { el.removeAttribute(attr); } } /** * Stream static html to an element, where "static html" denotes "html * without scripts". * * This class maintains a *history of writes devoid of any attributes* or * "proxy history". * * Injecting the proxy history into a temporary div has no side-effects, * other than to create proxy elements for previously written elements. * * Given the `staticHtml` of a new write, a `tempDiv`'s innerHTML is set to * `proxy_history + staticHtml`. * The *structure* of `tempDiv`'s contents, (i.e., the placement of new nodes * beside or inside of proxy elements), reflects the DOM structure that would * have resulted if all writes had been squashed into a single write. * * For each descendent `node` of `tempDiv` whose parentNode is a *proxy*, * `node` is appended to the corresponding *real* element within the DOM. * * Proxy elements are mapped to *actual* elements in the DOM by injecting a * `data-id` attribute into each start tag in `staticHtml`. * */ var WriteStream = function () { /** * Constructor. * * @param {Object} root The root element * @param {?Object} options The options */ function WriteStream(root) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck(this, WriteStream); this.root = root; this.options = options; this.doc = root.ownerDocument; this.win = this.doc.defaultView || this.doc.parentWindow; this.parser = new _prescribe2['default']('', { autoFix: options.autoFix }); // Actual elements by id. this.actuals = [root]; // Embodies the "structure" of what's been written so far, // devoid of attributes. this.proxyHistory = ''; // Create a proxy of the root element. this.proxyRoot = this.doc.createElement(root.nodeName); this.scriptStack = []; this.writeQueue = []; setData(this.proxyRoot, 'proxyof', 0); } /** * Writes the given strings. * * @param {...String} str The strings to write */ WriteStream.prototype.write = function write() { var _writeQueue; (_writeQueue = this.writeQueue).push.apply(_writeQueue, arguments); // Process writes // When new script gets pushed or pending this will stop // because new writeQueue gets pushed while (!this.deferredRemote && this.writeQueue.length) { var arg = this.writeQueue.shift(); if (utils.isFunction(arg)) { this._callFunction(arg); } else { this._writeImpl(arg); } } }; /** * Calls the given function. * * @param {Function} fn The function to call * @private */ WriteStream.prototype._callFunction = function _callFunction(fn) { var tok = { type: 'function', value: fn.name || fn.toString() }; this._onScriptStart(tok); fn.call(this.win, this.doc); this._onScriptDone(tok); }; /** * The write implementation * * @param {String} html The HTML to write. * @private */ WriteStream.prototype._writeImpl = function _writeImpl(html) { this.parser.append(html); var tok = void 0; var script = void 0; var style = void 0; var tokens = []; // stop if we see a script token while ((tok = this.parser.readToken()) && !(script = utils.isScript(tok)) && !(style = utils.isStyle(tok))) { tok = this.options.beforeWriteToken(tok); if (tok) { tokens.push(tok); } } if (tokens.length > 0) { this._writeStaticTokens(tokens); } if (script) { this._handleScriptToken(tok); } if (style) { this._handleStyleToken(tok); } }; /** * Write contiguous non-script tokens (a chunk) * * @param {Array<Object>} tokens The tokens * @returns {{tokens, raw, actual, proxy}|null} * @private */ WriteStream.prototype._writeStaticTokens = function _writeStaticTokens(tokens) { var chunk = this._buildChunk(tokens); if (!chunk.actual) { // e.g., no tokens, or a noscript that got ignored return null; } chunk.html = this.proxyHistory + chunk.actual; this.proxyHistory += chunk.proxy; this.proxyRoot.innerHTML = chunk.html; if (DEBUG_CHUNK) { chunk.proxyInnerHTML = this.proxyRoot.innerHTML; } this._walkChunk(); if (DEBUG_CHUNK) { chunk.actualInnerHTML = this.root.innerHTML; } return chunk; }; /** * Build a chunk. * * @param {Array<Object>} tokens The tokens to use. * @returns {{tokens: *, raw: string, actual: string, proxy: string}} * @private */ WriteStream.prototype._buildChunk = function _buildChunk(tokens) { var nextId = this.actuals.length; // The raw html of this chunk. var raw = []; // The html to create the nodes in the tokens (with id's injected). var actual = []; // Html that can later be used to proxy the nodes in the tokens. var proxy = []; var len = tokens.length; for (var i = 0; i < len; i++) { var tok = tokens[i]; var tokenRaw = tok.toString(); raw.push(tokenRaw); if (tok.attrs) { // tok.attrs <==> startTag or atomicTag or cursor // Ignore noscript tags. They are atomic, so we don't have to worry about children. if (!/^noscript$/i.test(tok.tagName)) { var id = nextId++; // Actual: inject id attribute: replace '>' at end of start tag with id attribute + '>' actual.push(tokenRaw.replace(/(\/?>)/, ' ' + BASEATTR + 'id=' + id + ' $1')); // Don't proxy scripts: they have no bearing on DOM structure. if (tok.attrs.id !== PROXY_SCRIPT && tok.attrs.id !== PROXY_STYLE) { // Proxy: strip all attributes and inject proxyof attribute proxy.push( // ignore atomic tags (e.g., style): they have no "structural" effect tok.type === 'atomicTag' ? '' : '<' + tok.tagName + ' ' + BASEATTR + 'proxyof=' + id + (tok.unary ? ' />' : '>')); } } } else { // Visit any other type of token // Actual: append. actual.push(tokenRaw); // Proxy: append endTags. Ignore everything else. proxy.push(tok.type === 'endTag' ? tokenRaw : ''); } } return { tokens: tokens, raw: raw.join(''), actual: actual.join(''), proxy: proxy.join('') }; }; /** * Walk the chunks. * * @private */ WriteStream.prototype._walkChunk = function _walkChunk() { var node = void 0; var stack = [this.proxyRoot]; // use shift/unshift so that children are walked in document order while (utils.existy(node = stack.shift())) { var isElement = node.nodeType === 1; var isProxy = isElement && getData(node, 'proxyof'); // Ignore proxies if (!isProxy) { if (isElement) { // New actual element: register it and remove the the id attr. this.actuals[getData(node, 'id')] = node; setData(node, 'id'); } // Is node's parent a proxy? var parentIsProxyOf = node.parentNode && getData(node.parentNode, 'proxyof'); if (parentIsProxyOf) { // Move node under actual parent. this.actuals[parentIsProxyOf].appendChild(node); } } // prepend childNodes to stack stack.unshift.apply(stack, utils.toArray(node.childNodes)); } }; /** * Handles Script tokens * * @param {Object} tok The token */ WriteStream.prototype._handleScriptToken = function _handleScriptToken(tok) { var _this = this; var remainder = this.parser.clear(); if (remainder) { // Write remainder immediately behind this script. this.writeQueue.unshift(remainder); } tok.src = tok.attrs.src || tok.attrs.SRC; tok = this.options.beforeWriteToken(tok); if (!tok) { // User has removed this token return; } if (tok.src && this.scriptStack.length) { // Defer this script until scriptStack is empty. // Assumption 1: This script will not start executing until // scriptStack is empty. this.deferredRemote = tok; } else { this._onScriptStart(tok); } // Put the script node in the DOM. this._writeScriptToken(tok, function () { _this._onScriptDone(tok); }); }; /** * Handles style tokens * * @param {Object} tok The token */ WriteStream.prototype._handleStyleToken = function _handleStyleToken(tok) { var remainder = this.parser.clear(); if (remainder) { // Write remainder immediately behind this style. this.writeQueue.unshift(remainder); } tok.type = tok.attrs.type || tok.attrs.TYPE || 'text/css'; tok = this.options.beforeWriteToken(tok); if (tok) { // Put the style node in the DOM. this._writeStyleToken(tok); } if (remainder) { this.write(); } }; /** * Build a style and insert it into the DOM. * * @param {Object} tok The token */ WriteStream.prototype._writeStyleToken = function _writeStyleToken(tok) { var el = this._buildStyle(tok); this._insertCursor(el, PROXY_STYLE); // Set content if (tok.content) { if (el.styleSheet && !el.sheet) { el.styleSheet.cssText = tok.content; } else { el.appendChild(this.doc.createTextNode(tok.content)); } } }; /** * Build a style element from an atomic style token. * * @param {Object} tok The token * @returns {Element} */ WriteStream.prototype._buildStyle = function _buildStyle(tok) { var el = this.doc.createElement(tok.tagName); el.setAttribute('type', tok.type); // Set attributes utils.eachKey(tok.attrs, function (name, value) { el.setAttribute(name, value); }); return el; }; /** * Append a span to the stream. That span will act as a cursor * (i.e. insertion point) for the element. * * @param {Object} el The element * @param {string} which The type of proxy element */ WriteStream.prototype._insertCursor = function _insertCursor(el, which) { this._writeImpl('<span id="' + which + '"/>'); var cursor = this.doc.getElementById(which); if (cursor) { cursor.parentNode.replaceChild(el, cursor); } }; /** * Called when a script is started. * * @param {Object} tok The token * @private */ WriteStream.prototype._onScriptStart = function _onScriptStart(tok) { tok.outerWrites = this.writeQueue; this.writeQueue = []; this.scriptStack.unshift(tok); }; /** * Called when a script is done. * * @param {Object} tok The token * @private */ WriteStream.prototype._onScriptDone = function _onScriptDone(tok) { // Pop script and check nesting. if (tok !== this.scriptStack[0]) { this.options.error({ msg: 'Bad script nesting or script finished twice' }); return; } this.scriptStack.shift(); // Append outer writes to queue and process them. this.write.apply(this, tok.outerWrites); // Check for pending remote // Assumption 2: if remote_script1 writes remote_script2 then // the we notice remote_script1 finishes before remote_script2 starts. // I think this is equivalent to assumption 1 if (!this.scriptStack.length && this.deferredRemote) { this._onScriptStart(this.deferredRemote); this.deferredRemote = null; } }; /** * Build a script and insert it into the DOM. * Done is called once script has executed. * * @param {Object} tok The token * @param {Function} done The callback when complete */ WriteStream.prototype._writeScriptToken = function _writeScriptToken(tok, done) { var el = this._buildScript(tok); var asyncRelease = this._shouldRelease(el); var afterAsync = this.options.afterAsync; if (tok.src) { // Fix for attribute "SRC" (capitalized). IE does not recognize it. el.src = tok.src; this._scriptLoadHandler(el, !asyncRelease ? function () { done(); afterAsync(); } : afterAsync); } try { this._insertCursor(el, PROXY_SCRIPT); if (!el.src || asyncRelease) { done(); } } catch (e) { this.options.error(e); done(); } }; /** * Build a script element from an atomic script token. * * @param {Object} tok The token * @returns {Element} */ WriteStream.prototype._buildScript = function _buildScript(tok) { var el = this.doc.createElement(tok.tagName); // Set attributes utils.eachKey(tok.attrs, function (name, value) { el.setAttribute(name, value); }); // Set content if (tok.content) { el.text = tok.content; } return el; }; /** * Setup the script load handler on an element. * * @param {Object} el The element * @param {Function} done The callback * @private */ WriteStream.prototype._scriptLoadHandler = function _scriptLoadHandler(el, done) { function cleanup() { el = el.onload = el.onreadystatechange = el.onerror = null; } var error = this.options.error; function success() { cleanup(); if (done != null) { done(); } done = null; } function failure(err) { cleanup(); error(err); if (done != null) { done(); } done = null; } function reattachEventListener(el, evt) { var handler = el['on' + evt]; if (handler != null) { el['_on' + evt] = handler; } } reattachEventListener(el, 'load'); reattachEventListener(el, 'error'); _extends(el, { onload: function onload() { if (el._onload) { try { el._onload.apply(this, Array.prototype.slice.call(arguments, 0)); } catch (err) { failure({ msg: 'onload handler failed ' + err + ' @ ' + el.src }); } } success(); }, onerror: function onerror() { if (el._onerror) { try { el._onerror.apply(this, Array.prototype.slice.call(arguments, 0)); } catch (err) { failure({ msg: 'onerror handler failed ' + err + ' @ ' + el.src }); return; } } failure({ msg: 'remote script failed ' + el.src }); }, onreadystatechange: function onreadystatechange() { if (/^(loaded|complete)$/.test(el.readyState)) { success(); } } }); }; /** * Determines whether to release. * * @param {Object} el The element * @returns {boolean} * @private */ WriteStream.prototype._shouldRelease = function _shouldRelease(el) { var isScript = /^script$/i.test(el.nodeName); return !isScript || !!(this.options.releaseAsync && el.src && el.hasAttribute('async')); }; return WriteStream; }(); exports['default'] = WriteStream; /***/ }, /* 3 */ /***/ function(module, exports, __webpack_require__) { /** * @file prescribe * @description Tiny, forgiving HTML parser * @version vundefined * @see {@link https://github.com/krux/prescribe/} * @license MIT * @author Derek Brans * @copyright 2016 Krux Digital, Inc */ (function webpackUniversalModuleDefinition(root, factory) { if(true) module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["Prescribe"] = factory(); else root["Prescribe"] = factory(); })(this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _HtmlParser = __webpack_require__(1); var _HtmlParser2 = _interopRequireDefault(_HtmlParser); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } module.exports = _HtmlParser2['default']; /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; exports.__esModule = true; var _supports = __webpack_require__(2); var supports = _interopRequireWildcard(_supports); var _streamReaders = __webpack_require__(3); var streamReaders = _interopRequireWildcard(_streamReaders); var _fixedReadTokenFactory = __webpack_require__(6); var _fixedReadTokenFactory2 = _interopRequireDefault(_fixedReadTokenFactory); var _utils = __webpack_require__(5); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Detection regular expressions. * * Order of detection matters: detection of one can only * succeed if detection of previous didn't * @type {Object} */ var detect = { comment: /^<!--/, endTag: /^<\//, atomicTag: /^<\s*(script|style|noscript|iframe|textarea)[\s\/>]/i, startTag: /^</, chars: /^[^<]/ }; /** * HtmlParser provides the capability to parse HTML and return tokens * representing the tags and content. */ var HtmlParser = function () { /** * Constructor. * * @param {string} stream The initial parse stream contents. * @param {Object} options The options * @param {boolean} options.autoFix Set to true to automatically fix errors */ function HtmlParser() { var _this = this; var stream = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck(this, HtmlParser); this.stream = stream; var fix = false; var fixedTokenOptions = {}; for (var key in supports) { if (supports.hasOwnProperty(key)) { if (options.autoFix) { fixedTokenOptions[key + 'Fix'] = true; // !supports[key]; } fix = fix || fixedTokenOptions[key + 'Fix']; } } if (fix) { this._readToken = (0, _fixedReadTokenFactory2['default'])(this, fixedTokenOptions, function () { return _this._readTokenImpl(); }); this._peekToken = (0, _fixedReadTokenFactory2['default'])(this, fixedTokenOptions, function () { return _this._peekTokenImpl(); }); } else { this._readToken = this._readTokenImpl; this._peekToken = this._peekTokenImpl; } } /** * Appends the given string to the parse stream. * * @param {string} str The string to append */ HtmlParser.prototype.append = function append(str) { this.stream += str; }; /** * Prepends the given string to the parse stream. * * @param {string} str The string to prepend */ HtmlParser.prototype.prepend = function prepend(str) { this.stream = str + this.stream; }; /** * The implementation of the token reading. * * @private * @returns {?Token} */ HtmlParser.prototype._readTokenImpl = function _readTokenImpl() { var token = this._peekTokenImpl(); if (token) { this.stream = this.stream.slice(token.length); return token; } }; /** * The implementation of token peeking. * * @returns {?Token} */ HtmlParser.prototype._peekTokenImpl = function _peekTokenImpl() { for (var type in detect) { if (detect.hasOwnProperty(type)) { if (detect[type].test(this.stream)) { var token = streamReaders[type](this.stream); if (token) { if (token.type === 'startTag' && /script|style/i.test(token.tagName)) { return null; } else { token.text = this.stream.substr(0, token.length); return token; } } } } } }; /** * The public token peeking interface. Delegates to the basic token peeking * or a version that performs fixups depending on the `autoFix` setting in * options. * * @returns {object} */ HtmlParser.prototype.peekToken = function peekToken() { return this._peekToken(); }; /** * The public token reading interface. Delegates to the basic token reading * or a version that performs fixups depending on the `autoFix` setting in * options. * * @returns {object} */ HtmlParser.prototype.readToken = function readToken() { return this._readToken(); }; /** * Read tokens and hand to the given handlers. * * @param {Object} handlers The handlers to use for the different tokens. */ HtmlParser.prototype.readTokens = function readTokens(handlers) { var tok = void 0; while (tok = this.readToken()) { // continue until we get an explicit "false" return if (handlers[tok.type] && handlers[tok.type](tok) === false) { return; } } }; /** * Clears the parse stream. * * @returns {string} The contents of the parse stream before clearing. */ HtmlParser.prototype.clear = function clear() { var rest = this.stream; this.stream = ''; return rest; }; /** * Returns the rest of the parse stream. * * @returns {string} The contents of the parse stream. */ HtmlParser.prototype.rest = function rest() { return this.stream; }; return HtmlParser; }(); exports['default'] = HtmlParser; HtmlParser.tokenToString = function (tok) { return tok.toString(); }; HtmlParser.escapeAttributes = function (attrs) { var escapedAttrs = {}; for (var name in attrs) { if (attrs.hasOwnProperty(name)) { escapedAttrs[name] = (0, _utils.escapeQuotes)(attrs[name], null); } } return escapedAttrs; }; HtmlParser.supports = supports; for (var key in supports) { if (supports.hasOwnProperty(key)) { HtmlParser.browserHasFlaw = HtmlParser.browserHasFlaw || !supports[key] && key; } } /***/ }, /* 2 */ /***/ function(module, exports) { 'use strict'; exports.__esModule = true; var tagSoup = false; var selfClose = false; var work = window.document.createElement('div'); try { var html = '<P><I></P></I>'; work.innerHTML = html; exports.tagSoup = tagSoup = work.innerHTML !== html; } catch (e) { exports.tagSoup = tagSoup = false; } try { work.innerHTML = '<P><i><P></P></i></P>'; exports.selfClose = selfClose = work.childNodes.length === 2; } catch (e) { exports.selfClose = selfClose = false; } work = null; exports.tagSoup = tagSoup; exports.selfClose = selfClose; /***/ }, /* 3 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; exports.__esModule = true; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; exports.comment = comment; exports.chars = chars; exports.startTag = startTag; exports.atomicTag = atomicTag; exports.endTag = endTag; var _tokens = __webpack_require__(4); /** * Regular Expressions for parsing tags and attributes * * @type {Object} */ var REGEXES = { startTag: /^<([\-A-Za-z0-9_]+)((?:\s+[\w\-]+(?:\s*=?\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/, endTag: /^<\/([\-A-Za-z0-9_]+)[^>]*>/, attr: /(?:([\-A-Za-z0-9_]+)\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))|(?:([\-A-Za-z0-9_]+)(\s|$)+)/g, fillAttr: /^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noresize|noshade|nowrap|readonly|selected)$/i }; /** * Reads a comment token * * @param {string} stream The input stream * @returns {CommentToken} */ function comment(stream) { var index = stream.indexOf('-->'); if (index >= 0) { return new _tokens.CommentToken(stream.substr(4, index - 1), index + 3); } } /** * Reads non-tag characters. * * @param {string} stream The input stream * @returns {CharsToken} */ function chars(stream) { var index = stream.indexOf('<'); return new _tokens.CharsToken(index >= 0 ? index : stream.length); } /** * Reads start tag token. * * @param {string} stream The input stream * @returns {StartTagToken} */ function startTag(stream) { var endTagIndex = stream.indexOf('>'); if (endTagIndex !== -1) { var match = stream.match(REGEXES.startTag); if (match) { var _ret = function () { var attrs = {}; var booleanAttrs = {}; var rest = match[2]; match[2].replace(REGEXES.attr, function (match, name) { if (!(arguments[2] || arguments[3] || arguments[4] || arguments[5])) { attrs[name] = ''; } else if (arguments[5]) { attrs[arguments[5]] = ''; booleanAttrs[arguments[5]] = true; } else { attrs[name] = arguments[2] || arguments[3] || arguments[4] || REGEXES.fillAttr.test(name) && name || ''; } rest = rest.replace(match, ''); }); return { v: new _tokens.StartTagToken(match[1], match[0].length, attrs, booleanAttrs, !!match[3], rest.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '')) }; }(); if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; } } } /** * Reads atomic tag token. * * @param {string} stream The input stream * @returns {AtomicTagToken} */ function atomicTag(stream) { var start = startTag(stream); if (start) { var rest = stream.slice(start.length); // for optimization, we check first just for the end tag if (rest.match(new RegExp('<\/\\s*' + start.tagName + '\\s*>', 'i'))) { // capturing the content is inefficient, so we do it inside the if var match = rest.match(new RegExp('([\\s\\S]*?)<\/\\s*' + start.tagName + '\\s*>', 'i')); if (match) { return new _tokens.AtomicTagToken(start.tagName, match[0].length + start.length, start.attrs, start.booleanAttrs, match[1]); } } } } /** * Reads an end tag token. * * @param {string} stream The input stream * @returns {EndTagToken} */ function endTag(stream) { var match = stream.match(REGEXES.endTag); if (match) { return new _tokens.EndTagToken(match[1], match[0].length); } } /***/ }, /* 4 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; exports.__esModule = true; exports.EndTagToken = exports.AtomicTagToken = exports.StartTagToken = exports.TagToken = exports.CharsToken = exports.CommentToken = exports.Token = undefined; var _utils = __webpack_require__(5); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Token is a base class for all token types parsed. Note we don't actually * use intheritance due to IE8's non-existent ES5 support. */ var Token = /** * Constructor. * * @param {string} type The type of the Token. * @param {Number} length The length of the Token text. */ exports.Token = function Token(type, length) { _classCallCheck(this, Token); this.type = type; this.length = length; this.text = ''; }; /** * CommentToken represents comment tags. */ var CommentToken = exports.CommentToken = function () { /** * Constructor. * * @param {string} content The content of the comment * @param {Number} length The length of the Token text. */ function CommentToken(content, length) { _classCallCheck(this, CommentToken); this.type = 'comment'; this.length = length || (content ? content.length : 0); this.text = ''; this.content = content; } CommentToken.prototype.toString = function toString() { return '<!--' + this.content; }; return CommentToken; }(); /** * CharsToken represents non-tag characters. */ var CharsToken = exports.CharsToken = function () { /** * Constructor. * * @param {Number} length The length of the Token text. */ function CharsToken(length) { _classCallCheck(this, CharsToken); this.type = 'chars'; this.length = length; this.text = ''; } CharsToken.prototype.toString = function toString() { return this.text; }; return CharsToken; }(); /** * TagToken is a base class for all tag-based Tokens. */ var TagToken = exports.TagToken = function () { /** * Constructor. * * @param {string} type The type of the token. * @param {string} tagName The tag name. * @param {Number} length The length of the Token text. * @param {Object} attrs The dictionary of attributes and values * @param {Object} booleanAttrs If an entry has 'true' then the attribute * is a boolean attribute */ function TagToken(type, tagName, length, attrs, booleanAttrs) { _classCallCheck(this, TagToken); this.type = type; this.length = length; this.text = ''; this.tagName = tagName; this.attrs = attrs; this.booleanAttrs = booleanAttrs; this.unary = false; this.html5Unary = false; } /** * Formats the given token tag. * * @param {TagToken} tok The TagToken to format. * @param {?string} [content=null] The content of the token. * @returns {string} The formatted tag. */ TagToken.formatTag = function formatTag(tok) { var content = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var str = '<' + tok.tagName; for (var key in tok.attrs) { if (tok.attrs.hasOwnProperty(key)) { str += ' ' + key; var val = tok.attrs[key]; if (typeof tok.booleanAttrs === 'undefined' || typeof tok.booleanAttrs[key] === 'undefined') { str += '="' + (0, _utils.escapeQuotes)(val) + '"'; } } } if (tok.rest) { str += ' ' + tok.rest; } if (tok.unary && !tok.html5Unary) { str += '/>'; } else { str += '>'; } if (content !== undefined && content !== null) { str += content + '</' + tok.tagName + '>'; } return str; }; return TagToken; }(); /** * StartTagToken represents a start token. */ var StartTagToken = exports.StartTagToken = function () { /** * Constructor. * * @param {string} tagName The tag name. * @param {Number} length The length of the Token text * @param {Object} attrs The dictionary of attributes and values * @param {Object} booleanAttrs If an entry has 'true' then the attribute * is a boolean attribute * @param {boolean} unary True if the tag is a unary tag * @param {string} rest The rest of the content. */ function StartTagToken(tagName, length, attrs, booleanAttrs, unary, rest) { _classCallCheck(this, StartTagToken); this.type = 'startTag'; this.length = length; this.text = ''; this.tagName = tagName; this.attrs = attrs; this.booleanAttrs = booleanAttrs; this.html5Unary = false; this.unary = unary; this.rest = rest; } StartTagToken.prototype.toString = function toString() { return TagToken.formatTag(this); }; return StartTagToken; }(); /** * AtomicTagToken represents an atomic tag. */ var AtomicTagToken = exports.AtomicTagToken = function () { /** * Constructor. * * @param {string} tagName The name of the tag. * @param {Number} length The length of the tag text. * @param {Object} attrs The attributes. * @param {Object} booleanAttrs If an entry has 'true' then the attribute * is a boolean attribute * @param {string} content The content of the tag. */ function AtomicTagToken(tagName, length, attrs, booleanAttrs, content) { _classCallCheck(this, AtomicTagToken); this.type = 'atomicTag'; this.length = length; this.text = ''; this.tagName = tagName; this.attrs = attrs; this.booleanAttrs = booleanAttrs; this.unary = false; this.html5Unary = false; this.content = content; } AtomicTagToken.prototype.toString = function toString() { return TagToken.formatTag(this, this.content); }; return AtomicTagToken; }(); /** * EndTagToken represents an end tag. */ var EndTagToken = exports.EndTagToken = function () { /** * Constructor. * * @param {string} tagName The name of the tag. * @param {Number} length The length of the tag text. */ function EndTagToken(tagName, length) { _classCallCheck(this, EndTagToken); this.type = 'endTag'; this.length = length; this.text = ''; this.tagName = tagName; } EndTagToken.prototype.toString = function toString() { return '</' + this.tagName + '>'; }; return EndTagToken; }(); /***/ }, /* 5 */ /***/ function(module, exports) { 'use strict'; exports.__esModule = true; exports.escapeQuotes = escapeQuotes; /** * Escape quotes in the given value. * * @param {string} value The value to escape. * @param {string} [defaultValue=''] The default value to return if value is falsy. * @returns {string} */ function escapeQuotes(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; // There's no lookback in JS, so /(^|[^\\])"/ only matches the first of two `"`s. // Instead, just match anything before a double-quote and escape if it's not already escaped. return !value ? defaultValue : value.replace(/([^"]*)"/g, function (_, prefix) { return (/\\/.test(prefix) ? prefix + '"' : prefix + '\\"' ); }); } /***/ }, /* 6 */ /***/ function(module, exports) { 'use strict'; exports.__esModule = true; exports['default'] = fixedReadTokenFactory; /** * Empty Elements - HTML 4.01 * * @type {RegExp} */ var EMPTY = /^(AREA|BASE|BASEFONT|BR|COL|FRAME|HR|IMG|INPUT|ISINDEX|LINK|META|PARAM|EMBED)$/i; /** * Elements that you can intentionally leave open (and which close themselves) * * @type {RegExp} */ var CLOSESELF = /^(COLGROUP|DD|DT|LI|OPTIONS|P|TD|TFOOT|TH|THEAD|TR)$/i; /** * Corrects a token. * * @param {Token} tok The token to correct * @returns {Token} The corrected token */ function correct(tok) { if (tok && tok.type === 'startTag') { tok.unary = EMPTY.test(tok.tagName) || tok.unary; tok.html5Unary = !/\/>$/.test(tok.text); } return tok; } /** * Peeks at the next token in the parser. * * @param {HtmlParser} parser The parser * @param {Function} readTokenImpl The underlying readToken implementation * @returns {Token} The next token */ function peekToken(parser, readTokenImpl) { var tmp = parser.stream; var tok = correct(readTokenImpl()); parser.stream = tmp; return tok; } /** * Closes the last token. * * @param {HtmlParser} parser The parser * @param {Array<Token>} stack The stack */ function closeLast(parser, stack) { var tok = stack.pop(); // prepend close tag to stream. parser.prepend('</' + tok.tagName + '>'); } /** * Create a new token stack. * * @returns {Array<Token>} */ function newStack() { var stack = []; stack.last = function () { return this[this.length - 1]; }; stack.lastTagNameEq = function (tagName) { var last = this.last(); return last && last.tagName && last.tagName.toUpperCase() === tagName.toUpperCase(); }; stack.containsTagName = function (tagName) { for (var i = 0, tok; tok = this[i]; i++) { if (tok.tagName === tagName) { return true; } } return false; }; return stack; } /** * Return a readToken implementation that fixes input. * * @param {HtmlParser} parser The parser * @param {Object} options Options for fixing * @param {boolean} options.tagSoupFix True to fix tag soup scenarios * @param {boolean} options.selfCloseFix True to fix self-closing tags * @param {Function} readTokenImpl The underlying readToken implementation * @returns {Function} */ function fixedReadTokenFactory(parser, options, readTokenImpl) { var stack = newStack(); var handlers = { startTag: function startTag(tok) { var tagName = tok.tagName; if (tagName.toUpperCase() === 'TR' && stack.lastTagNameEq('TABLE')) { parser.prepend('<TBODY>'); prepareNextToken(); } else if (options.selfCloseFix && CLOSESELF.test(tagName) && stack.containsTagName(tagName)) { if (stack.lastTagNameEq(tagName)) { closeLast(parser, stack); } else { parser.prepend('</' + tok.tagName + '>'); prepareNextToken(); } } else if (!tok.unary) { stack.push(tok); } }, endTag: function endTag(tok) { var last = stack.last(); if (last) { if (options.tagSoupFix && !stack.lastTagNameEq(tok.tagName)) { // cleanup tag soup closeLast(parser, stack); } else { stack.pop(); } } else if (options.tagSoupFix) { // cleanup tag soup part 2: skip this token readTokenImpl(); prepareNextToken(); } } }; function prepareNextToken() { var tok = peekToken(parser, readTokenImpl); if (tok && handlers[tok.type]) { handlers[tok.type](tok); } } return function fixedReadToken() { prepareNextToken(); return correct(readTokenImpl()); }; } /***/ } /******/ ]) }); ; /***/ }, /* 4 */ /***/ function(module, exports) { 'use strict'; exports.__esModule = true; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; exports.existy = existy; exports.isFunction = isFunction; exports.each = each; exports.eachKey = eachKey; exports.defaults = defaults; exports.toArray = toArray; exports.last = last; exports.isTag = isTag; exports.isScript = isScript; exports.isStyle = isStyle; /** * Determine if the thing is not undefined and not null. * * @param {*} thing The thing to test * @returns {boolean} True if the thing is not undefined and not null. */ function existy(thing) { return thing !== void 0 && thing !== null; } /** * Is this a function? * * @param {*} x The variable to test * @returns {boolean} True if the variable is a function */ function isFunction(x) { return 'function' === typeof x; } /** * Loop over each item in an array-like value. * * @param {Array<*>} arr The array to loop over * @param {Function} fn The function to call * @param {?Object} target The object to bind to the function */ function each(arr, fn, target) { var i = void 0; var len = arr && arr.length || 0; for (i = 0; i < len; i++) { fn.call(target, arr[i], i); } } /** * Loop over each key/value pair in a hash. * * @param {Object} obj The object * @param {Function} fn The function to call * @param {?Object} target The object to bind to the function */ function eachKey(obj, fn, target) { for (var key in obj) { if (obj.hasOwnProperty(key)) { fn.call(target, key, obj[key]); } } } /** * Set default options where some option was not specified. * * @param {Object} options The destination * @param {Object} _defaults The defaults * @returns {Object} */ function defaults(options, _defaults) { options = options || {}; eachKey(_defaults, function (key, val) { if (!existy(options[key])) { options[key] = val; } }); return options; } /** * Convert value (e.g., a NodeList) to an array. * * @param {*} obj The object * @returns {Array<*>} */ function toArray(obj) { try { return Array.prototype.slice.call(obj); } catch (e) { var _ret = function () { var ret = []; each(obj, function (val) { ret.push(val); }); return { v: ret }; }(); if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; } } /** * Get the last item in an array * * @param {Array<*>} array The array * @returns {*} The last item in the array */ function last(array) { return array[array.length - 1]; } /** * Test if token is a script tag. * * @param {Object} tok The token * @param {String} tag The tag name * @returns {boolean} True if the token is a script tag */ function isTag(tok, tag) { return !tok || !(tok.type === 'startTag' || tok.type === 'atomicTag') || !('tagName' in tok) ? !1 : !!~tok.tagName.toLowerCase().indexOf(tag); } /** * Test if token is a script tag. * * @param {Object} tok The token * @returns {boolean} True if the token is a script tag */ function isScript(tok) { return isTag(tok, 'script'); } /** * Test if token is a style tag. * * @param {Object} tok The token * @returns {boolean} True if the token is a style tag */ function isStyle(tok) { return isTag(tok, 'style'); } /***/ } /******/ ]) }); ; //# sourceMappingURL=postscribe.js.map } }, "core/src/lib/actions/helpers/unescapeHtmlCode.js": { "script": function(module, exports, require, turbine) { /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ 'use strict'; var document = require('@adobe/reactor-document'); var el = document.createElement('div'); module.exports = function (html) { el.innerHTML = html; // IE and Firefox differ. return el.textContent || el.innerText || html; }; } }, "core/src/lib/actions/helpers/decorators/decorateGlobalJavaScriptCode.js": { "script": function(module, exports, require, turbine) { /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ 'use strict'; var Promise = require('@adobe/reactor-promise'); module.exports = function (_, source) { // The line break after the source is important in case their last line of code is a comment. return { code: '<scr' + 'ipt>\n' + source + '\n</scr' + 'ipt>', promise: Promise.resolve() }; }; } }, "core/src/lib/actions/helpers/decorators/decorateNonGlobalJavaScriptCode.js": { "script": function(module, exports, require, turbine) { /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ 'use strict'; var Promise = require('@adobe/reactor-promise'); var id = 0; module.exports = function (action, source) { var runScriptFnName = '_runScript' + ++id; var promise = new Promise(function (resolve, reject) { _satellite[runScriptFnName] = function (fn) { delete _satellite[runScriptFnName]; // Use Promise constructor instead of Promise.resolve() so we can // catch errors from custom code. new Promise(function (_resolve) { _resolve( fn.call( action.event.element, action.event, action.event.target, Promise ) ); }).then(resolve, reject); }; }); // The line break after the source is important in case their last line of code is a comment. var code = '<scr' + 'ipt>_satellite["' + runScriptFnName + '"](function(event, target, Promise) {\n' + source + '\n});</scr' + 'ipt>'; return { code: code, promise: promise }; }; } }, "core/src/lib/actions/helpers/decorators/decorateHtmlCode.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var Promise = require('@adobe/reactor-promise'); var callbackId = 0; var htmlCodePromises = {}; window._satellite = window._satellite || {}; /** * Public function intended to be called by the user. * @param {number} callbackId The identifier passed to _satellite._onCustomCodeSuccess(). */ window._satellite._onCustomCodeSuccess = function (callbackId) { var promiseHandlers = htmlCodePromises[callbackId]; if (!promiseHandlers) { return; } delete htmlCodePromises[callbackId]; promiseHandlers.resolve(); }; /** * Public function intended to be called by the user. * @param {number} callbackId The identifier passed to _satellite._onCustomCodeSuccess(). */ window._satellite._onCustomCodeFailure = function (callbackId) { var promiseHandlers = htmlCodePromises[callbackId]; if (!promiseHandlers) { return; } delete htmlCodePromises[callbackId]; promiseHandlers.reject(); }; var reactorCallbackIdShouldBeReplaced = function (source) { return source.indexOf('${reactorCallbackId}') !== -1; }; var replaceCallbacksIds = function (source, callbackId) { return source.replace(/\${reactorCallbackId}/g, callbackId); }; var isSourceLoadedFromFile = function (action) { return action.settings.isExternal; }; module.exports = function (action, source) { // We need to replace tokens only for sources loaded from external files. The sources from // inside the container are automatically taken care by Turbine. if (isSourceLoadedFromFile(action)) { source = turbine.replaceTokens(source, action.event); } var promise; if (reactorCallbackIdShouldBeReplaced(source)) { promise = new Promise(function (resolve, reject) { htmlCodePromises[String(callbackId)] = { resolve: resolve, reject: reject }; }); source = replaceCallbacksIds(source, callbackId); callbackId += 1; } else { promise = Promise.resolve(); } return { code: source, promise: promise }; }; } }, "core/src/lib/actions/helpers/getSourceByUrl.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var loadScript = require('@adobe/reactor-load-script'); var Promise = require('@adobe/reactor-promise'); var codeBySourceUrl = {}; var scriptStore = {}; var loadScriptOnlyOnce = function (url) { if (!scriptStore[url]) { scriptStore[url] = loadScript(url); } return scriptStore[url]; }; _satellite.__registerScript = function (sourceUrl, code) { codeBySourceUrl[sourceUrl] = code; }; module.exports = function (sourceUrl) { if (codeBySourceUrl[sourceUrl]) { return Promise.resolve(codeBySourceUrl[sourceUrl]); } else { return new Promise(function (resolve) { loadScriptOnlyOnce(sourceUrl).then( function () { resolve(codeBySourceUrl[sourceUrl]); }, function () { resolve(); } ); }); } }; } }, "core/src/lib/helpers/stringAndNumberUtils.js": { "script": function(module, exports, require, turbine) { 'use strict'; var isNumber = function (value) { return typeof value === 'number' && isFinite(value); // isFinite weeds out NaNs. }; var isString = function (value) { return typeof value === 'string' || value instanceof String; }; var castToStringIfNumber = function (value) { return isNumber(value) ? String(value) : value; }; var castToNumberIfString = function (value) { return isString(value) ? Number(value) : value; }; module.exports = { isNumber: isNumber, isString: isString, castToStringIfNumber: castToStringIfNumber, castToNumberIfString: castToNumberIfString }; } }, "core/src/lib/events/helpers/pageLifecycleEvents.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * (c) 2018 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; // We need to be able to fire the rules in a specific order, no matter if the library is loaded // sync or async. The rules are fired in the following order: // Library loaded rules -> Page bottom rules -> Dom Ready rules -> Window load rules. var window = require('@adobe/reactor-window'); var document = require('@adobe/reactor-document'); var isIE10 = window.navigator.appVersion.indexOf('MSIE 10') !== -1; var WINDOW_LOADED = 'WINDOW_LOADED'; var DOM_READY = 'DOM_READY'; var PAGE_BOTTOM = 'PAGE_BOTTOM'; var lifecycleEventsOrder = [PAGE_BOTTOM, DOM_READY, WINDOW_LOADED]; var createSyntheticEvent = function (element, nativeEvent) { return { element: element, target: element, nativeEvent: nativeEvent }; }; var registry = {}; lifecycleEventsOrder.forEach(function (event) { registry[event] = []; }); var processRegistry = function (lifecycleEvent, nativeEvent) { lifecycleEventsOrder .slice(0, getLifecycleEventIndex(lifecycleEvent) + 1) .forEach(function (lifecycleEvent) { processTriggers(nativeEvent, lifecycleEvent); }); }; var detectLifecycleEvent = function () { if (document.readyState === 'complete') { return WINDOW_LOADED; } else if (document.readyState === 'interactive') { return !isIE10 ? DOM_READY : null; } }; var getLifecycleEventIndex = function (event) { return lifecycleEventsOrder.indexOf(event); }; var processTriggers = function (nativeEvent, lifecycleEvent) { registry[lifecycleEvent].forEach(function (triggerData) { processTrigger(nativeEvent, triggerData); }); registry[lifecycleEvent] = []; }; var processTrigger = function (nativeEvent, triggerData) { var trigger = triggerData.trigger; var syntheticEventFn = triggerData.syntheticEventFn; trigger(syntheticEventFn ? syntheticEventFn(nativeEvent) : null); }; window._satellite = window._satellite || {}; window._satellite.pageBottom = processRegistry.bind(null, PAGE_BOTTOM); document.addEventListener( 'DOMContentLoaded', processRegistry.bind(null, DOM_READY), true ); window.addEventListener( 'load', processRegistry.bind(null, WINDOW_LOADED), true ); // Depending on the way the Launch library was loaded, none of the registered listeners that // execute `processRegistry` may fire . We need to execute the `processRegistry` method at // least once. If this timeout fires before any of the registered listeners, we auto-detect the // current lifecycle event and fire all the registered triggers in order. We don't care if the // `processRegistry` is called multiple times for the same lifecycle event. We fire the registered // triggers for a lifecycle event only once. We used a `setTimeout` here to make sure all the rules // using Library Loaded are registered and executed synchronously and before rules using any of the // other lifecycle event types. window.setTimeout(function () { var lifecycleEvent = detectLifecycleEvent(); if (lifecycleEvent) { processRegistry(lifecycleEvent); } }, 0); module.exports = { registerLibraryLoadedTrigger: function (trigger) { trigger(); }, registerPageBottomTrigger: function (trigger) { registry[PAGE_BOTTOM].push({ trigger: trigger }); }, registerDomReadyTrigger: function (trigger) { registry[DOM_READY].push({ trigger: trigger, syntheticEventFn: createSyntheticEvent.bind(null, document) }); }, registerWindowLoadedTrigger: function (trigger) { registry[WINDOW_LOADED].push({ trigger: trigger, syntheticEventFn: createSyntheticEvent.bind(null, window) }); } }; } }, "core/src/lib/helpers/textMatch.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; /** * Performs a string match based on another string or a regex. * @param {string} str The string to be evaluate. * @param {string|RegExp} pattern The pattern to match against. * @returns {boolean} Whether the string matches the pattern. */ module.exports = function (str, pattern) { if (pattern == null) { throw new Error('Illegal Argument: Pattern is not present'); } if (str == null) { return false; } if (typeof pattern === 'string') { return str === pattern; } else if (pattern instanceof RegExp) { return pattern.test(str); } else { return false; } }; } }, "core/src/lib/events/helpers/createBubbly.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var WeakMap = require('./weakMap'); var matchesProperties = require('./matchesProperties'); var matchesSelector = require('./matchesSelector'); // Note to developers of other extensions: // This module largely exists to support advanced bubbling options // that were carried over to Launch from DTM. It is highly unlikely // that you need to support these options in your own extension. // As such, please only copy this code if you know why you're doing so // and feel you have a justifiable reason. /** * Handles logic related to bubbling options provided for many event types. */ module.exports = function () { var listeners = []; // It's important that a new weak map is created for each instance of bubbly in order to store // whether this particular bubbly instance has processed the event. More than one instance of // bubbly may process an event. No instance of bubbly should process an event more than once. var processedEvents = new WeakMap(); var bubbly = { /** * Register a config object that should be evaluated for an event to determine if a rule * should be executed. If it should be executed, the callback function will be called. * @param {Object} settings The event config object. * @param {string} [settings.elementSelector] The CSS selector the element must match in order * for the rule to fire. * @param {Object[]} [settings.elementProperties] Property values the element must have in order * for the rule to fire. * @param {string} settings.elementProperties[].name The property name. * @param {string} settings.elementProperties[].value The property value. * @param {number} [settings.anchorDelay] - When present and a link is clicked, actual * navigation will be postponed for a period of time equal with its value. This is typically * used to allow time for scripts within the rule to execute, beacons to be sent to * servers, etc. * @param {boolean} [settings.elementProperties[].valueIsRegex=false] Whether <code>value</code> * on the object instance is intended to be a regular expression. * @param {boolean} [settings.bubbleFireIfParent=true] Whether the rule should fire if the * event originated from a descendant element. * @param {boolean} [settings.bubbleFireIfChildFired=true] Whether the rule should fire if the * same event has already triggered a rule targeting a descendant element. * @param {boolean} [settings.bubbleStop=false] Whether the event should not trigger rules on * ancestor elements. * @param {Function} callback The function to be called when a matching event is seen. If the * callback does not end up triggering a rule, the callback should explicitly return false. */ addListener: function (settings, callback) { listeners.push({ settings: settings, callback: callback }); }, /** * Evaluate an event to determine if any rule targeting elements in the event target's DOM * hierarchy should be executed. Note that event.type is not inspected. This assumes that * all registered listeners care about this particular event type. * @param {Event} event The event that has occurred. * @param {HTMLElement} event.target The HTML element where the event originated. * @param {boolean} [eventIsSynthetic] Whether the event passed in is synthetic (instead of * native). */ evaluateEvent: function (event, eventIsSynthetic) { if (!listeners.length) { return; } // When an event is handled it is evaluated a single time but checks out which rules are // targeting elements starting at the target node and looking all the way up the element // hierarchy. This should only happen once regardless of how many listeners exist for the // event. if (processedEvents.has(event)) { return; } var node = event.target; var childHasTriggeredRule = false; // Loop through from the event target up through the hierarchy evaluating each node // to see if it matches any rules. while (node) { var preventEvaluationOnAncestors = false; var nodeTriggeredRule = false; // Just because this could be processed a lot, we'll use a for loop instead of forEach. for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; var elementSelector = listener.settings.elementSelector; var elementProperties = listener.settings.elementProperties; // bubbleFireIfChildFired should be considered true by default if ( listener.settings.bubbleFireIfChildFired === false && childHasTriggeredRule ) { continue; } // bubbleFireIfParent should be considered true by default if ( node !== event.target && listener.settings.bubbleFireIfParent === false ) { continue; } // If the user didn't specify elementSelector or elementProperties then they want the // rule to run whenever the event occurs on any element. They don't intend for the // rule to run for every node in the element hierarchy though. if ( node !== event.target && !elementSelector && (!elementProperties || !Object.keys(elementProperties).length) ) { continue; } if (elementSelector && !matchesSelector(node, elementSelector)) { continue; } if ( elementProperties && !matchesProperties(node, elementProperties) ) { continue; } var syntheticEventForCallback = {}; // We'll attach relevant data depending on whether the passed in event is synthetic // or native. if (eventIsSynthetic) { Object.keys(event).forEach(function (key) { syntheticEventForCallback[key] = event[key]; }); } else { syntheticEventForCallback.nativeEvent = event; } syntheticEventForCallback.element = node; syntheticEventForCallback.target = event.target; var callbackResponse = listener.callback(syntheticEventForCallback); // The callback should return false if it didn't end up triggering a rule. var ruleTriggered = callbackResponse !== false; if (ruleTriggered) { nodeTriggeredRule = true; if (listener.settings.bubbleStop) { preventEvaluationOnAncestors = true; } } } if (preventEvaluationOnAncestors) { break; } if (nodeTriggeredRule) { childHasTriggeredRule = true; } node = node.parentNode; } processedEvents.set(event, true); } }; /** * @private * Clears all listeners. This should only be used in tests. */ bubbly.__reset = function () { listeners = []; }; return bubbly; }; } }, "core/src/lib/events/helpers/weakMap.js": { "script": function(module, exports, require, turbine) { /** * @license * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt * Code distributed by Google as part of the polymer project is also * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt */ // This is copied from // https://github.com/webcomponents/webcomponentsjs/blob/7dc6731eb9c9f9c3fea4419c50c6ee3ca0367544/src/WeakMap/WeakMap.js // because there's not an npm package that makes it easy to import only WeakMap. We've also // modified it slightly so that it doesn't ever set window.WeakMap. 'use strict'; var window = require('@adobe/reactor-window'); var WeakMap = window.WeakMap; if (typeof WeakMap === 'undefined') { var defineProperty = Object.defineProperty; var counter = Date.now() % 1e9; WeakMap = function () { this.name = '__st' + ((Math.random() * 1e9) >>> 0) + (counter++ + '__'); }; WeakMap.prototype = { set: function (key, value) { var entry = key[this.name]; if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, { value: [key, value], writable: true }); return this; }, get: function (key) { var entry; return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined; }, delete: function (key) { var entry = key[this.name]; if (!entry || entry[0] !== key) return false; entry[0] = entry[1] = undefined; return true; }, has: function (key) { var entry = key[this.name]; if (!entry) return false; return entry[0] === key; } }; } module.exports = WeakMap; } }, "core/src/lib/events/helpers/matchesProperties.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var textMatch = require('./../../helpers/textMatch'); var getElementProperty = function (element, property) { if (property === '@text' || property === 'innerText') { return element.textContent || element.innerText; } else if (property in element) { return element[property]; } else if (element.getAttribute) { return element.getAttribute(property); } }; /** * Determines whether an element's properties and their values match a set of properties and values. * If the element doesn't have the property, the element's attribute with the same name will be * evaluated if it exists. * @param {HTMLElement} element The element to match against. * @param {Object[]} properties The criteria of properties to match again. * @param {string} properties.name The property name. * @param {string} properties.value The property value. * @param {boolean} [properties.valueIsRegex=false] Whether <code>value</code> on the * object instance is intended to be a regular expression. * @returns {boolean} Whether the element matches the criteria. */ module.exports = function (element, properties) { if (properties) { return properties.every(function (property) { var actualValue = getElementProperty(element, property.name); var criterionValue = property.valueIsRegex ? new RegExp(property.value, 'i') : property.value; return textMatch(actualValue, criterionValue); }); } return true; }; } }, "core/src/lib/events/helpers/matchesSelector.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; /** * Returns whether an element matches a selector. * @param {HTMLElement} element The HTML element being tested. * @param {string} selector The CSS selector. * @returns {boolean} */ module.exports = function (element, selector) { var matches = element.matches || element.msMatchesSelector; if (matches) { try { return matches.call(element, selector); } catch (error) { turbine.logger.warn( 'Matching element failed. ' + selector + ' is not a valid selector.' ); return false; } } return false; }; } }, "core/src/lib/events/helpers/debounce.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; /** * Debounce function. Returns a proxy function that, when called multiple times, will only execute * the target function after a certain delay has passed without the proxy function being called * again. * @param {Function} fn The target function to call once the delay period has passed. * @param {number} delay The number of milliseconds that must pass before the target function is * called. * @param {Object} [context] The context in which to call the target function. * @returns {Function} */ module.exports = function (fn, delay, context) { var timeoutId = null; return function () { var ctx = context || this; var args = arguments; clearTimeout(timeoutId); timeoutId = setTimeout(function () { fn.apply(ctx, args); }, delay); }; }; } }, "core/src/lib/events/helpers/enableWeakMapDefaultValue.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; /** * Modifies a weakmap so that when get() is called with a key for which no entry is found, * a default value will be stored and then returned for the key. * @param {Object} weakMap The WeakMap instance to modify. * @param {Function} defaultValueFactory A function that returns the default value that should * be used. */ module.exports = function (weakMap, defaultValueFactory) { var originalGet = weakMap.get; weakMap.get = function (key) { if (!weakMap.has(key)) { weakMap.set(key, defaultValueFactory()); } return originalGet.apply(this, arguments); }; return weakMap; }; } }, "core/src/lib/events/helpers/once.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; /** * Returns a proxy function that, when call the first time, will call a target function. * Subsequent calls will not call the target function. * @param {Function} fn That target function to call a single time. * @param {Object} [context] The context in which to call the target function. * @returns {Function} */ module.exports = function (fn, context) { var result; return function () { if (fn) { result = fn.apply(context || this, arguments); fn = null; } return result; }; }; } }, "core/src/lib/helpers/visitorTracking.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var cookie = require('@adobe/reactor-cookie'); var document = require('@adobe/reactor-document'); var window = require('@adobe/reactor-window'); var getNamespacedStorage = require('./getNamespacedStorage'); var COOKIE_PREFIX = '_sdsat_'; var STORAGE_NAMESPACE = 'visitorTracking'; var MIGRATED_KEY = 'cookiesMigrated'; var visitorTrackingLocalStorage = getNamespacedStorage( 'localStorage', STORAGE_NAMESPACE ); var visitorTrackingSessionStorage = getNamespacedStorage( 'sessionStorage', STORAGE_NAMESPACE ); // returns whether this is a new visitor session var trackLandingPageAndTime = function () { var existingLandingPage = visitorTrackingSessionStorage.getItem( 'landingPage' ); if (!existingLandingPage) { visitorTrackingSessionStorage.setItem('landingPage', window.location.href); visitorTrackingSessionStorage.setItem('landingTime', new Date().getTime()); } return !existingLandingPage; }; var getLandingPage = function () { return visitorTrackingSessionStorage.getItem('landingPage'); }; var getLandingTime = function () { return Number(visitorTrackingSessionStorage.getItem('landingTime')); }; var getSessionCount = function () { return Number(visitorTrackingLocalStorage.getItem('sessionCount')); }; var getLifetimePageViewCount = function () { return Number(visitorTrackingLocalStorage.getItem('pagesViewed')); }; var getMinutesOnSite = function () { var now = new Date().getTime(); return Math.floor((now - getLandingTime()) / 1000 / 60); }; var getTrafficSource = function () { return visitorTrackingSessionStorage.getItem('trafficSource'); }; var getSessionPageViewCount = function () { return Number(visitorTrackingSessionStorage.getItem('pagesViewed')); }; var getIsNewVisitor = function () { return getSessionCount() === 1; }; var trackSessionCount = function (newSession) { if (newSession) { visitorTrackingLocalStorage.setItem('sessionCount', getSessionCount() + 1); } }; var trackSessionPageViewCount = function () { visitorTrackingSessionStorage.setItem( 'pagesViewed', getSessionPageViewCount() + 1 ); }; var trackLifetimePageViewCount = function () { visitorTrackingLocalStorage.setItem( 'pagesViewed', getLifetimePageViewCount() + 1 ); }; var trackTrafficSource = function () { if (!visitorTrackingSessionStorage.getItem('trafficSource')) { visitorTrackingSessionStorage.setItem('trafficSource', document.referrer); } }; // Remove when migration period has ended. We intentionally leave cookies as they are so that if // DTM is running on the same domain it can still use the persisted values. Our migration strategy // is essentially copying data from cookies and then diverging the storage mechanism between // DTM and Launch (DTM uses cookies and Launch uses session and local storage). var migrateCookieData = function () { if (!visitorTrackingLocalStorage.getItem(MIGRATED_KEY)) { // We intentionally do not migrate session-based data since it would only affect a user that // came from a page running DTM to a page running Launch and only the first visit. var sessionCount = cookie.get(COOKIE_PREFIX + 'session_count'); if (sessionCount) { visitorTrackingLocalStorage.setItem('sessionCount', sessionCount); } var lifetimePagesViewed = cookie.get(COOKIE_PREFIX + 'lt_pages_viewed'); if (lifetimePagesViewed) { visitorTrackingLocalStorage.setItem('pagesViewed', lifetimePagesViewed); } visitorTrackingLocalStorage.setItem(MIGRATED_KEY, true); } }; var trackVisitor = function () { var newSession = trackLandingPageAndTime(); trackSessionCount(newSession); trackLifetimePageViewCount(); trackSessionPageViewCount(); trackTrafficSource(); }; migrateCookieData(); trackVisitor(); module.exports = { getLandingPage: getLandingPage, getLandingTime: getLandingTime, getMinutesOnSite: getMinutesOnSite, getSessionCount: getSessionCount, getLifetimePageViewCount: getLifetimePageViewCount, getSessionPageViewCount: getSessionPageViewCount, getTrafficSource: getTrafficSource, getIsNewVisitor: getIsNewVisitor }; } }, "core/src/lib/helpers/getNamespacedStorage.js": { "script": function(module, exports, require, turbine) { /*************************************************************************************** * Copyright 2019 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ 'use strict'; var window = require('@adobe/reactor-window'); var BASE_NAMESPACE = 'com.adobe.reactor.core'; module.exports = function (storageType, additionalNamespace) { var namespace = BASE_NAMESPACE + '.' + additionalNamespace; // When storage is disabled on Safari, the mere act of referencing window.localStorage // or window.sessionStorage throws an error. For this reason, we wrap in a try-catch. return { /** * Reads a value from storage. * @param {string} name The name of the item to be read. * @returns {string} */ getItem: function (name) { try { return window[storageType].getItem(namespace + '.' + name); } catch (e) { return null; } }, /** * Saves a value to storage. * @param {string} name The name of the item to be saved. * @param {string} value The value of the item to be saved. * @returns {boolean} Whether the item was successfully saved to storage. */ setItem: function (name, value) { try { window[storageType].setItem(namespace + '.' + name, value); return true; } catch (e) { return false; } } }; }; } } } }, "doubleclick-floodlight": { "displayName": "DoubleClick Floodlight (Beta)", "hostedLibFilesBaseUrl": "https://assets.adobedtm.com/extensions/EP9a01085750854132acb9bc9bade4150c/", "modules": { } }, "mapping-table": { "displayName": "Mapping Table", "hostedLibFilesBaseUrl": "https://assets.adobedtm.com/extensions/EP29c1cfa85ec74c28b3ef1369f262762b/", "modules": { "mapping-table/src/lib/dataElements/mappingTable.js": { "name": "mapping-table", "displayName": "Mapping Table", "script": function(module, exports, require, turbine) { 'use strict'; /** * Returns the value matching the mapping table * * If no match is found, the value itself is returned * * @param settings The data element settings * @returns {*} */ module.exports = function (settings) { if (typeof settings !== 'undefined' && settings !== null) { var dataElemValue = settings.dataElement; addStartsWithToIE(); try { for (var i = 0; i < settings.size; i++) { var method = settings[i].method; var out = settings[i].output; var inp = settings[i].input; if (method === 'exact match') { if (dataElemValue === inp) { return out; } } else if (method === 'exact match i') { if (typeof dataElemValue === 'boolean') { continue; } if (dataElemValue.toLowerCase() === inp.toLowerCase()) { return out; } } else if (method === 'starts with') { if (typeof dataElemValue === 'boolean') { continue; } if (dataElemValue.startsWith(inp)) { return out; } } else if (method === 'contains') { if (typeof dataElemValue === 'boolean') { continue; } if (dataElemValue.indexOf(inp) > -1) { return out; } } else if (method === 'regex') { if (typeof dataElemValue === 'boolean') { continue; } if (new RegExp(inp).test(dataElemValue)) { return out; } } else if (method === 'regex matching') { if (typeof dataElemValue === 'boolean') { continue; } var match = dataElemValue.match(new RegExp(inp)); if (match !== null) { // We need to go top down to match $12 before matching $1 // match[0] is the whole match, thus we start / end with index 1 for (var j = (match.length - 1); j >= 1; j--) { // Split-join is a way to replace all occurrences out = out.split('$' + j).join(match[j]); } return out; } } else if (method === 'is true') { if (dataElemValue === true) { return out; } } else if (method === 'is false') { if (dataElemValue === false) { return out; } } } } catch (e) { turbine.logger.error('Error during evaluation: ' + e.message); } if (settings.defaultValueEmpty === true) { return undefined; } return dataElemValue; } }; /** * Needed polyfill as IE doesn't support startsWith on strings */ var addStartsWithToIE = function () { if (!String.prototype.startsWith) { String.prototype.startsWith = function (searchString, position) { position = position || 0; return this.substr(position, searchString.length) === searchString; }; } }; } } } }, "marketo-munchkin": { "displayName": "Marketo Munchkin", "hostedLibFilesBaseUrl": "https://assets.adobedtm.com/extensions/EP1bc0e3caf124498d916e73c19dd46936/", "modules": { "marketo-munchkin/src/lib/actions/initialize.js": { "name": "initialize", "displayName": "Initialize", "script": function(module, exports, require, turbine) { 'use strict'; var loadScript = require('@adobe/reactor-load-script'); module.exports = function(settings) { settings = settings || {}; var munchkinUrl = '//munchkin.marketo.net/munchkin.js'; var mcidInstance = turbine.getSharedModule('adobe-mcid', 'mcid-instance'); if (mcidInstance) { try { settings._ecid = _satellite.company.orgId + ':' + mcidInstance.getLocationHint() + ':' + mcidInstance.getMarketingCloudVisitorID(); turbine.logger.info('Setting up ECID for munchkin init() - ' + settings._ecid); } catch (e) { turbine.logger.error('Exception in mcid-instance API call - ' + e.message); } } if (!settings._ecid) { settings.orgId = _satellite.company.orgId; } loadScript(munchkinUrl).then(function() { var munchkinId = settings.munchkinId; delete settings.munchkinId; Munchkin.init(munchkinId, settings); }); }; } } } }, "common-analytics-plugins": { "displayName": "Common Analytics Plugins", "hostedLibFilesBaseUrl": "https://assets.adobedtm.com/extensions/EPf951e4fc6c07481b9add92c6d5a7ebd6/", "settings": { "ns": { "id": "ns", "obj": "window", "desc": "The Numbers Suite is a series of plugins that allow for...<ol><li>zeroPad - a number of zeroes to the beginning of a number</li><li>randomNumber - generate a random number with a specific number of digits</li><li>twoDecimals - round a number to the closest hundreth (for currency)</li></ol><p>This plugin suite is depricated.</p>", "name": "Numbers Suite", "display": true, "doclink": "//docs.adobe.com/content/help/en/analytics/implementation/vars/plugins/numberssuite.html", "version": "1.0", "depricated": true }, "pt": { "id": "pt", "obj": "tracker", "desc": "Executes a function on a list of Adobe Analytics variables. For example, the following function will run the clearVars function three times, once using eVar1 as the argument, once using eVar4 as the argument, and once using eVar29 as the argument. The end result clear out the values of eVar1, eVar4 & eVar29. s.pt('eVar1,eVar4,eVar29', ',', 'clearVars');", "name": "pt", "display": true, "doclink": "//docs.adobe.com/content/help/en/analytics/implementation/vars/plugins/pt-plugin.html", "version": "2.0", "depricated": false }, "apl": { "id": "apl", "obj": "tracker", "desc": "Add new values to list-delimited variables (e.g. events, linkTrackVars, listVars, etc.). This plugin requires \"inList\" to be initialized as well.", "name": "Append To List", "display": true, "version": "3.2", "depricated": false }, "rfl": { "id": "rfl", "obj": "tracker", "desc": "Remove values from list-delimited variables (e.g. s.events, s.linkTrackVars, listVars, etc.).", "name": "Remove From List", "display": true, "doclink": "//docs.adobe.com/content/help/en/analytics/implementation/vars/plugins/removefromlist.html", "version": "2.1", "depricated": false }, "p_fo": { "id": "fpo", "obj": "tracker", "desc": "Checks for the existence of a specific JavaScript object. If the object doesn't exist, the plugin creates the object and returns the value of true. This would be the first and only time the plugin would create this object on the current page (hence the name, pageFirstOnly). If the JavaScript object already exists on the page, the function will return the value of false.", "name": "First Page Only", "display": true, "doclink": "//docs.adobe.com/content/help/en/analytics/implementation/vars/plugins/p-fo.html", "version": "2.0", "depricated": false }, "inList": { "id": "il", "obj": "tracker", "desc": "Check whether a value already exists within either a delimited list of values or a JavaScript array object.", "name": "In List", "display": true, "version": "2.1", "depricated": false }, "zeroPad": { "display": false, "version": "1.0", "depricated": true }, "cleanStr": { "id": "cs", "obj": "window", "desc": "Remove unnecessary characters from a string (or string variable), including HTML tag characters, Extra whitespaces (including double spaces), Left/right single quotes (‘’) (replaced with straight single quotes), Tabs, Newlines/Carriage Returns. ", "name": "Clean String", "display": true, "version": "1.0", "depricated": false }, "formatTime": { "id": "ft", "obj": "tracker", "desc": "Take a specified number of seconds and present them in a bucketed format, rounded to a benchmark value that you specify. The \"inList\" plugin is required by this plugin. This plugin requires \"inList\" to be initialized as well.", "name": "Format Time", "display": true, "version": "1.1", "depricated": false }, "getValOnce": { "id": "gvo", "obj": "tracker", "desc": "Prevents a variable from being set equal to the same value on consecutive calls.", "name": "Value Once", "display": true, "version": "2.0", "depricated": false }, "manageVars": { "id": "mv", "obj": "tracker", "desc": "Manipulate the values of multiple Adobe Analytics variables at one time; this version includes specific functionality to lowercase or remove unnecessary characters from multiple variable values at the same time.", "name": "Manage Variables", "display": true, "version": "2.1", "depricated": false }, "getPageName": { "id": "gpn", "obj": "window", "desc": "Creates a value that can be inserted into the Adobe Analytics pageName variable and that is an easy-to-read, \"friendly\"-formatted version of the current URL.", "name": "Page Name", "display": true, "version": "4.1", "depricated": false, "dataElement": true }, "getVisitNum": { "id": "gvn", "obj": "tracker", "desc": "Visit number for all visitors that come to the site within a specific time period (e.g. \"x\" number of days).", "name": "Visit Number", "display": true, "version": "4.2", "depricated": false, "dataElement": true }, "twoDecimals": { "display": false, "version": "1.0", "depricated": true }, "getNewRepeat": { "id": "gnr", "obj": "tracker", "desc": "Determines whether a visitor to the site is a new visitor or a repeat visitor within the number of days that is specified in the plugin call.", "name": "New Repeat", "display": true, "version": "3.0", "depricated": false, "dataElement": true }, "randomNumber": { "display": false, "version": "1.0", "depricated": true }, "getQueryParam": { "id": "gqp", "obj": "tracker", "desc": "Case-insensitively extract the value of any query string parameter contained in a URL. This plugin requires \"pt\" to be initialized as well.", "name": "Query Parameter", "display": true, "version": "3.3", "depricated": false }, "lowerCaseVars": { "display": false, "version": "1.0", "depricated": false }, "addProductEvar": { "id": "apv", "obj": "tracker", "desc": "Easily add an Adobe Analytics merchandising eVar that uses product syntax to the products variable (s.products) without worrying whether the already-existing contents of the variable will be changed/moved/deleted.", "name": "Add Product eVar", "display": true, "version": "1.0", "depricated": false }, "getTimeParting": { "id": "gtp", "obj": "window", "desc": "Capture the details of the time when any measurable activity takes place on its site.", "name": "Time Parting", "display": true, "version": "6.2", "depricated": false, "dataElement": true }, "addProductEvent": { "id": "ape", "obj": "tracker", "desc": "Easily add an Adobe Analytics custom numeric event or custom currency event to the products variable (s.products) without worrying whether the already-existing contents of the variable will be changed/moved/deleted.", "name": "Add Product Event", "display": true, "version": "1.0", "depricated": false }, "endOfDatePeriod": { "id": "eodp", "display": false, "version": "1.1", "depricated": false }, "getPageLoadTime": { "id": "gplt", "obj": "tracker", "desc": "Uses the JavaScript performance object to allow you to measure the amount of time a page takes to load completely. This plugin requires \"p_fo\" to be initialized as well.", "name": "Page Load Time", "display": true, "version": "1.0", "depricated": false }, "handlePPVevents": { "display": false, "version": "4.0", "depricated": false }, "getPreviousValue": { "id": "gpv", "obj": "tracker", "desc": "Set an Analytics variable equal to the value of a variable that was set on a previous page or contained in a previous image request. This plugin requires \"p_fo\" to be initialized as well.", "name": "Previous Value", "display": true, "version": "2.0", "depricated": false }, "getVisitDuration": { "id": "gvd", "obj": "tracker", "desc": "Amount of time (in minutes) that the visitor has been on the site up to that point.", "name": "Visit Duration", "display": true, "version": "2.0", "depricated": false, "dataElement": true }, "performanceCheck": { "display": false, "version": "1.0", "depricated": false }, "getGeoCoordinates": { "id": "ggc", "obj": "tracker", "desc": "Returns the geographic location (latitude and longitude) of the visitors device.", "name": "Geographic Coordinates", "display": true, "version": "2.0", "depricated": false, "dataElement": true }, "getTimeToComplete": { "id": "gttc", "obj": "tracker", "desc": "Time a user takes to complete a process on a site. The \"clock\" begins when the \"start\" action is called and ends when the \"stop\" action is called. This plugin requires \"pt\" to be initialized as well.", "name": "Time To Complete", "display": true, "version": "3.1", "depricated": false }, "getAndPersistValue": { "id": "gapv", "obj": "tracker", "desc": "Stores a value in a cookie that can be retrieved later during a visit.", "name": "Persist Value", "display": true, "version": "2.0", "depricated": false }, "getResponsiveLayout": { "id": "grl", "obj": "window", "desc": "Which version of your responsive design-based website a visitor is currently looking at.", "name": "Responsive Layout", "display": true, "version": "1.0", "depricated": false, "dataElement": true }, "getPercentPageViewed": { "id": "gppv", "obj": "tracker", "desc": "Measures a visitor's scroll activity to see how much of the page they viewed before moving to another page.", "name": "Percent Page Viewed", "display": true, "version": "4.0", "depricated": false }, "getTimeBetweenEvents": { "id": "gtbe", "obj": "tracker", "desc": "Amount of time between two different Adobe Analytics events (custom or otherwise). This plugin requires \"inList\" to be initialized as well.", "name": "Time Between Events", "display": true, "version": "2.1", "depricated": false }, "performanceWriteFull": { "display": false, "version": "1.0", "depricated": false }, "performanceWritePart": { "display": false, "version": "1.0", "depricated": false }, "getDaysSinceLastVisit": { "id": "gdslv", "obj": "tracker", "desc": "Returns the number of days since the visitor's last (most recent) visit. This plugin is deprecated. Adobe recommends using the getTimeSinceLastVisit plugin instead.", "name": "Days Since Last Visit", "display": true, "doclink": "//docs.adobe.com/content/help/en/analytics/implementation/vars/plugins/gettimesincelastvisit.html", "version": "3.0", "depricated": true }, "getTimeSinceLastVisit": { "id": "gtslv", "obj": "tracker", "desc": "Returns the time since the visitor's last (most recent) visit.", "name": "Time Since Last Visit", "display": true, "version": "1.0", "depricated": false } }, "modules": { "common-analytics-plugins/src/lib/actions/initializeApl.js": { "name": "initialize-apl", "displayName": "Initialize APL (Append To List)", "script": function(module, exports, require, turbine) { 'use strict'; require('./common').init( 'apl', 'analytics' ); require('./common').init( 'inList', 'analytics' ); module.exports = function() {}; } }, "common-analytics-plugins/src/lib/actions/initializeInList.js": { "name": "initialize-inlist", "displayName": "Initialize inList", "script": function(module, exports, require, turbine) { 'use strict'; require('./common').init( 'inList', 'analytics' ); module.exports = function() {}; } }, "common-analytics-plugins/src/lib/actions/initializeP_fo.js": { "name": "iinitialize-p_fo", "displayName": "Initialize p_fo", "script": function(module, exports, require, turbine) { 'use strict'; require('./common').init( 'p_fo', 'analytics' ); module.exports = function() {}; } }, "common-analytics-plugins/src/lib/actions/initializeGetResponsiveLayout.js": { "name": "initialize-getresponsivelayout", "displayName": "Initialize getResponsiveLayout", "script": function(module, exports, require, turbine) { 'use strict'; require('./common').init( 'getResponsiveLayout', 'window' ); module.exports = function() {}; } }, "common-analytics-plugins/src/lib/actions/initializeGetTimeParting.js": { "name": "initialize-gettimeparting", "displayName": "Initialize getTimeParting", "script": function(module, exports, require, turbine) { 'use strict'; require('./common').init( 'getTimeParting', 'window' ); module.exports = function() {}; } }, "common-analytics-plugins/src/lib/actions/initializeGetPreviousValue.js": { "name": "initialize-getpreviousvalue", "displayName": "Initialize getPreviousValue", "script": function(module, exports, require, turbine) { 'use strict'; require('./common').init( 'getPreviousValue', 'analytics' ); module.exports = function() {}; } }, "common-analytics-plugins/src/lib/main-module.js": { "script": function(module, exports, require, turbine) { 'use strict'; // Write an error to the console if AA isn't in the Web Property if( turbine.getSharedModule('adobe-analytics', 'get-tracker') ) {} else { turbine.logger.error( 'The "Adobe Analytics" extension must be installed in the Launch web property (' + _satellite.property.name + ') in order to use the "Common Analytics Plugins" extension' ) } var augmentTracker = turbine.getSharedModule('adobe-analytics', 'augment-tracker'); // All Data Elements in this extension write the plugin name and version to the window.aaPlugins object. // The following code moves the contents of window.aaPlugins to the AA s.contextData object so plugin // versions are contained within all AA web beacons. augmentTracker(function(tracker) { if( typeof tracker.contextData === 'object' && typeof window.aaPlugins === 'object' ) { for( var pf in window.aaPlugins ) { tracker.contextData[pf] = window.aaPlugins[pf] } } }); } }, "common-analytics-plugins/src/lib/actions/common.js": { "script": function(module, exports, require, turbine) { // common.js for all Actions 'use strict'; var getObj = function( obj, tr ) { return obj==='analytics' || typeof obj === 'undefined'? tr: (obj==='window'? window: null ) }, err = function( m ) { turbine.logger.error( 'common.js: ' + m ) }, initAndSetVersion = function( pn, obj, tr ) { obj[pn] = require('../plugins/allPlugins')[pn]; var cd = tr.contextData || {}, n, pl = getVersionFromPlugin( pn, obj ); if( pl.version === 'n/a' ) pl = getVersionFromConfig( pn ); cd[ pn ] = pl.version }, getVersionFromPlugin = function( pn, obj ) { // get the plugin version from the plugin itself var pl, v = { plugin: pn, version: 'n/a' }; try { pl = obj[pn]('-v') } catch(e) { pl = {} } try { if( typeof pl.plugin !== 'string' || pl.plugin.length<1 ) pl = v } catch(e) { pl = v } return pl }, getVersionFromConfig = function( pn ) { // get the plugin version from the extension Configuration.html file var ex = turbine.getExtensionSettings(), pl = { plugin: pn, version: 'n/a' } try { pl.version = ex[pn].version } catch(e) { pl.version = 'n/a' } return pl } // this function is called by all the individual "initializeXYZ" actions module.exports.init = function( pluginName, obj ) { var augmentTracker = turbine.getSharedModule('adobe-analytics', 'augment-tracker'), ver, cd; augmentTracker(function(tracker) { if( tracker ) { obj = getObj( obj, tracker ); if( pluginName && obj ) initAndSetVersion( pluginName, obj, tracker ); } }) } // this function is called by the one "initialize action" module.exports.initMany = function(a) { var augmentTracker = turbine.getSharedModule('adobe-analytics', 'augment-tracker'), ver, cd, obj; augmentTracker(function(tracker) { if( tracker ) { for( var i=0; i<a.length; i++ ) { obj = getObj( a[i].obj, tracker ) if( a[i].pname && obj ) initAndSetVersion( a[i].pname, obj, tracker ); } } }) } } }, "common-analytics-plugins/src/lib/plugins/allPlugins.js": { "script": function(module, exports, require, turbine) { module.exports.addProductEvar = require('./addProductEvar').addProductEvar; module.exports.addProductEvent = require('./addProductEvent').addProductEvent; module.exports.apl = require('./apl').apl; module.exports.cleanStr = require('./cleanStr').cleanStr; module.exports.endOfDatePeriod = require('./endOfDatePeriod').endOfDatePeriod; module.exports.formatTime = require('./formatTime').formatTime; module.exports.getAndPersistValue = require('./getAndPersistValue').getAndPersistValue; module.exports.getDaysSinceLastVisit = require('./getDaysSinceLastVisit').getDaysSinceLastVisit; module.exports.getGeoCoordinates = require('./getGeoCoordinates').getGeoCoordinates; module.exports.getNewRepeat = require('./getNewRepeat').getNewRepeat; module.exports.getPageLoadTime = require('./getPageLoadTime').getPageLoadTime; module.exports.getPageName = require('./getPageName').getPageName; module.exports.getPreviousValue = require('./getPreviousValue').getPreviousValue; module.exports.getQueryParam = require('./getQueryParam').getQueryParam; module.exports.getResponsiveLayout = require('./getResponsiveLayout').getResponsiveLayout; module.exports.getTimeBetweenEvents = require('./getTimeBetweenEvents').getTimeBetweenEvents; module.exports.getTimeParting = require('./getTimeParting').getTimeParting; module.exports.getTimeSinceLastVisit = require('./getTimeSinceLastVisit').getTimeSinceLastVisit; module.exports.getTimeToComplete = require('./getTimeToComplete').getTimeToComplete; module.exports.getValOnce = require('./getValOnce').getValOnce; module.exports.getVisitDuration = require('./getVisitDuration').getVisitDuration; module.exports.getVisitNum = require('./getVisitNum').getVisitNum; module.exports.inList = require('./inList').inList; module.exports.lowerCaseVars = require('./lowerCaseVars').lowerCaseVars; module.exports.manageVars = require('./manageVars').manageVars; module.exports.p_fo = require('./p_fo').p_fo; module.exports.performanceCheck = require('./performanceCheck').performanceCheck; module.exports.performanceWriteFull = require('./performanceWriteFull').performanceWriteFull; module.exports.performanceWritePart = require('./performanceWritePart').performanceWritePart; module.exports.handlePPVevents = require('./handlePPVevents').handlePPVevents; module.exports.getPercentPageViewed = require('./getPercentPageViewed').getPercentPageViewed; module.exports.pt = require('./pt').pt; module.exports.rfl = require('./rfl').rfl; module.exports.twoDecimals = require('./twoDecimals').twoDecimals; module.exports.zeroPad = require('./zeroPad').zeroPad; module.exports.randomNumber = require('./randomNumber').randomNumber; } }, "common-analytics-plugins/src/lib/plugins/addProductEvar.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: addProductEvar v2.0 */ function addProductEvar(en,ev,ap){var e=en,f=ev,d=ap;if("-v"===e)return{plugin:"addProductEvar",version:"2.0"};a:{if("undefined"!==typeof window.s_c_il){var b=0;for(var c;b<window.s_c_il.length;b++)if(c=window.s_c_il[b],c._c&&"s_c"===c._c){b=c;break a}}b=void 0}if("undefined"!==typeof b&&(b.contextData.addProductEvar="2.0","string"===typeof e&&"string"===typeof f&&""!==f))if(d=d||!1,b.products){c=b.products.split(",");var g=c.length;d=d?0:g-1;for(var a;d<g;d++)a=c[d].split(";"),a[5]&&-1<a[5].toLowerCase().indexOf("evar")?a[5]=a[5]+"|"+e+"="+f:a[5]?a[5]=e+"="+f:a[5]||(a[4]||(a[4]=""),a[3]||(a[3]=""),a[2]||(a[2]=""),a[1]||(a[1]=""),a[5]=e+"="+f),c[d]=a.join(";");b.products=c.join(",")}else b.products=";;;;;"+e+"="+f}; module.exports.addProductEvar = addProductEvar; } }, "common-analytics-plugins/src/lib/plugins/addProductEvent.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: addProductEvent v2.0 */ function addProductEvent(en,ev,ap){var f=en,g=ev,c=ap;if("-v"===f)return{plugin:"addProductEvent",version:"2.0"};var d=function(){if("undefined"!==typeof window.s_c_il)for(var b=0,e;b<window.s_c_il.length;b++)if(e=window.s_c_il[b],e._c&&"s_c"===e._c)return e}();if("undefined"!==typeof d&&(d.contextData.addProductEvent="2.0",window.apl=window.apl||function(b,e,c,d,f){function g(b,d,c,e){if("string"!==typeof d)return!1;if("string"===typeof b)b=b.split(c||",");else if("object"!==typeof b)return!1;c=0;for(a=b.length;c<a;c++)if(1==e&&d===b[c]||d.toLowerCase()===b[c].toLowerCase())return!0;return!1}if(!b||"string"===typeof b){if("string"!==typeof e||""===e)return b;c=c||",";d=d||c;1==d&&(d=c,f||(f=1));2==d&&1!=f&&(d=c);e=e.split(",");k=e.length;for(var h=0;h<k;h++)g(b,e[h],c,f)||(b=b?b+d+e[h]:e[h])}return b},"string"===typeof f))if(g=isNaN(g)?"1":String(g),c=c||!1,d.events=window.apl(d.events,f),d.products){var l=d.products.split(","),m=l.length;c=c?0:m-1;for(var b;c<m;c++)b=l[c].split(";"),b[4]&&-1<b[4].indexOf("event")?b[4]=b[4]+"|"+f+"="+g:b[5]?b[4]=f+"="+g:b[4]||(b[3]||(b[3]=""),b[2]||(b[2]=""),b[1]||(b[1]=""),b[4]=f+"="+g),l[c]=b.join(";");d.products=l.join(",")}else d.products=";;;;"+f+"="+g}; module.exports.addProductEvent = addProductEvent; } }, "common-analytics-plugins/src/lib/plugins/apl.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: apl (appendToList) v4.0 */ function apl(lv,va,d1,d2,cc){var b=lv,d=va,e=d1,c=d2,g=cc;if("-v"===b)return{plugin:"apl",version:"4.0"};var h=function(){if("undefined"!==typeof window.s_c_il)for(var k=0,b;k<window.s_c_il.length;k++)if(b=window.s_c_il[k],b._c&&"s_c"===b._c)return b}();"undefined"!==typeof h&&(h.contextData.apl="4.0");window.inList=window.inList||function(b,d,c,e){if("string"!==typeof d)return!1;if("string"===typeof b)b=b.split(c||",");else if("object"!==typeof b)return!1;c=0;for(a=b.length;c<a;c++)if(1==e&&d===b[c]||d.toLowerCase()===b[c].toLowerCase())return!0;return!1};if(!b||"string"===typeof b){if("string"!==typeof d||""===d)return b;e=e||",";c=c||e;1==c&&(c=e,g||(g=1));2==c&&1!=g&&(c=e);d=d.split(",");h=d.length;for(var f=0;f<h;f++)window.inList(b,d[f],e,g)||(b=b?b+c+d[f]:d[f])}return b}; module.exports.apl = apl; } }, "common-analytics-plugins/src/lib/plugins/cleanStr.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: cleanStr v2.0 (No Prerequisites Required) */ function cleanStr(str){var a=str;if("-v"===a)return{plugin:"cleanStr",version:"2.0"};a:{if("undefined"!==typeof window.s_c_il){var b=0;for(var c;b<window.s_c_il.length;b++)if(c=window.s_c_il[b],c._c&&"s_c"===c._c){b=c;break a}}b=void 0}"undefined"!==typeof b&&(b.contextData.cleanStr="2.0");if("string"===typeof a){a=a.replace(/<\/?[^>]+(>|$)/g,"");a=a.trim();a=a.replace(/[\u2018\u2019\u201A]/g,"'");a=a.replace(/\t+/g,"");for(a=a.replace(/[\n\r]/g," ");-1<a.indexOf(" ");)a=a.replace(/\s\s/g," ");return a}return""} module.exports.cleanStr = cleanStr; } }, "common-analytics-plugins/src/lib/plugins/endOfDatePeriod.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: endOfDatePeriod v1.2 (No Prerequisites Needed) */ function endOfDatePeriod(dp){var c=dp;if("-v"===c)return{plugin:"endOfDatePeriod",version:"1.2"};var a=function(){if("undefined"!==typeof window.s_c_il)for(var a=0,b;a<window.s_c_il.length;a++)if(b=window.s_c_il[a],b._c&&"s_c"===b._c)return b}();"undefined"!==typeof a&&(a.contextData.endOfDatePeriod="1.2");a=new Date;var d=isNaN(c)?0:Math.floor(c),e=function(a,b){return(new Date(b?b:1970,a?a:1,0)).getDate()};a.setHours(23);a.setMinutes(59);a.setSeconds(59);"w"===c&&(d=6-a.getDay());"m"===c&&(d=e(a.getMonth()+1,a.getFullYear())-a.getDate());a.setDate(a.getDate()+d);"y"===c&&(a.setMonth(11),a.setDate(31));return a}; module.exports.endOfDatePeriod = endOfDatePeriod; } }, "common-analytics-plugins/src/lib/plugins/formatTime.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: formatTime v2.0 */ function formatTime(ns,tf,bml){var f=ns,d=tf,e=bml;function h(b,d,c,e){if("string"!==typeof d)return!1;if("string"===typeof b)b=b.split(c||",");else if("object"!==typeof b)return!1;c=0;for(a=b.length;c<a;c++)if(1==e&&d===b[c]||d.toLowerCase()===b[c].toLowerCase())return!0;return!1}if(arguments&&"-v"===arguments[0])return{plugin:"formatTime",version:"2.0"};var b=function(){if("undefined"!==typeof window.s_c_il)for(var b=0,c;b<window.s_c_il.length;b++)if(c=window.s_c_il[b],c._c&&"s_c"===c._c)return c}();"undefined"!==typeof b&&(b.contextData.formatTime="2.0");if(!("undefined"===typeof f||isNaN(f)||0>Number(f))){b="";if("string"===typeof d&&"d"===d||("string"!==typeof d||!h("h,m,s",d))&&86400<=f){var c=86400;var g="days";b=isNaN(e)?1:c/(e*c)}else"string"===typeof d&&"h"===d||("string"!==typeof d||!h("m,s",d))&&3600<=f?(c=3600,g="hours",b=isNaN(e)?4:c/(e*c)):"string"===typeof d&&"m"===d||("string"!==typeof d||!h("s",d))&&60<=f?(c=60,g="minutes",b=isNaN(e)?2:c/(e*c)):(c=1,g="seconds",b=isNaN(e)?.2:c/e);b=Math.round(f*b/c)/b+" "+g;0===b.indexOf("1 ")&&(b=b.substring(0,b.length-1));return b}}; module.exports.formatTime = formatTime; } }, "common-analytics-plugins/src/lib/plugins/getAndPersistValue.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getAndPersistValue v3.0 (Requires AppMeasurement) */ function getAndPersistValue(vtp,cn,ex){var d=vtp,k=cn,l=ex;if("undefined"!==typeof d&&"-v"===d)return{plugin:"getAndPersistValue",version:"3.0"};var a=function(){if("undefined"!==typeof window.s_c_il)for(var c=0,b;c<window.s_c_il.length;c++)if(b=window.s_c_il[c],b._c&&"s_c"===b._c)return b}();"undefined"!==typeof a&&(a.contextData.getAndPersistValue="3.0");window.cookieWrite=window.cookieWrite||function(c,b,f){if("string"===typeof c){var h=window.location.hostname,a=window.location.hostname.split(".").length-1;if(h&&!/^[0-9.]+$/.test(h)){a=2<a?a:2;var e=h.lastIndexOf(".");if(0<=e){for(;0<=e&&1<a;)e=h.lastIndexOf(".",e-1),a--;e=0<e?h.substring(e):h}}g=e;b="undefined"!==typeof b?""+b:"";if(f||""===b)if(""===b&&(f=-60),"number"===typeof f){var d=new Date;d.setTime(d.getTime()+6E4*f)}else d=f;return c&&(document.cookie=encodeURIComponent(c)+"="+encodeURIComponent(b)+"; path=/;"+(f?" expires="+d.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof cookieRead)?cookieRead(c)===b:!1}};window.cookieRead=window.cookieRead||function(c){if("string"===typeof c)c=encodeURIComponent(c);else return"";var b=" "+document.cookie,a=b.indexOf(" "+c+"="),d=0>a?a:b.indexOf(";",a);return(c=0>a?"":decodeURIComponent(b.substring(a+2+c.length,0>d?b.length:d)))?c:""};a=new Date;k=k?k:"s_gapv";(l=l?l:0)?a.setTime(a.getTime()+864E5*l):a.setTime(a.getTime()+18E5);"undefined"!==typeof d&&d||(d=cookieRead(k));cookieWrite(k,d,a);return d}; module.exports.getAndPersistValue = getAndPersistValue; } }, "common-analytics-plugins/src/lib/plugins/getDaysSinceLastVisit.js": { "script": function(module, exports, require, turbine) { //v3.0 Deprecated function getDaysSinceLastVisit(){var a=new Date,b=a.getTime(),c=this.c_r("s_dslv");a.setTime(b+94608E6);this.c_w("s_dslv",b,a);if(c){a=b-c;if(18E5<a){if(31536E6<a)return"More than a year";if(2592E6<a)return"More than 30 days";if(a<2592E6+1&&6048E5<a)return"More than 7 days";if(a<6048E5+1&&864E5<a)return"Less than 7 days";if(a<864E5+1)return"Less than 1 day"}return""}return"New Visitor"} module.exports.getDaysSinceLastVisit = getDaysSinceLastVisit; } }, "common-analytics-plugins/src/lib/plugins/getGeoCoordinates.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getGeoCoordinates v2.0 */ function getGeoCoordinates(){if(arguments&&"-v"===arguments[0])return{plugin:"getGeoCoordinates",version:"2.0"};var b=function(){if("undefined"!==typeof window.s_c_il)for(var a=0,c;a<window.s_c_il.length;a++)if(c=window.s_c_il[a],c._c&&"s_c"===c._c)return c}();"undefined"!==typeof b&&(b.contextData.getGeoCoordinates="2.0");window.cookieWrite=window.cookieWrite||function(a,c,f){if("string"===typeof a){var h=window.location.hostname,b=window.location.hostname.split(".").length-1;if(h&&!/^[0-9.]+$/.test(h)){b=2<b?b:2;var e=h.lastIndexOf(".");if(0<=e){for(;0<=e&&1<b;)e=h.lastIndexOf(".",e-1),b--;e=0<e?h.substring(e):h}}g=e;c="undefined"!==typeof c?""+c:"";if(f||""===c)if(""===c&&(f=-60),"number"===typeof f){var d=new Date;d.setTime(d.getTime()+6E4*f)}else d=f;return a&&(document.cookie=encodeURIComponent(a)+"="+encodeURIComponent(c)+"; path=/;"+(f?" expires="+d.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof cookieRead)?cookieRead(a)===c:!1}};window.cookieRead=window.cookieRead||function(a){if("string"===typeof a)a=encodeURIComponent(a);else return"";var c=" "+document.cookie,b=c.indexOf(" "+a+"="),d=0>b?b:c.indexOf(";",b);return(a=0>b?"":decodeURIComponent(c.substring(b+2+a.length,0>d?c.length:d)))?a:""};var d="";b=cookieRead("s_ggc").split("|");var k={timeout:5E3,maximumAge:0},l=function(a){a=a.coords;cookieWrite("s_ggc",parseFloat(a.latitude.toFixed(4))+"|"+parseFloat(a.longitude.toFixed(4)),30);d="latitude="+parseFloat(a.latitude.toFixed(4))+" | longitude="+parseFloat(a.longitude.toFixed(4))},m=function(a){d="error retrieving geo coordinates"};1<b.length&&(d="latitude="+b[0]+" | longitude="+b[1]);navigator.geolocation&&navigator.geolocation.getCurrentPosition(l,m,k);""===d&&(d="geo coordinates not available");return d}; module.exports.getGeoCoordinates = getGeoCoordinates; } }, "common-analytics-plugins/src/lib/plugins/getNewRepeat.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getNewRepeat v3.0 (Requires AppMeasurement) */ function getNewRepeat(d){var a=d;if("-v"===a)return{plugin:"getNewRepeat",version:"3.0"};var d=function(){if("undefined"!==typeof window.s_c_il)for(var c=0,b;c<window.s_c_il.length;c++)if(b=window.s_c_il[c],b._c&&"s_c"===b._c)return b}();"undefined"!==typeof d&&(d.contextData.getNewRepeat="3.0");window.cookieWrite=window.cookieWrite||function(c,b,f){if("string"===typeof c){var h=window.location.hostname,a=window.location.hostname.split(".").length-1;if(h&&!/^[0-9.]+$/.test(h)){a=2<a?a:2;var e=h.lastIndexOf(".");if(0<=e){for(;0<=e&&1<a;)e=h.lastIndexOf(".",e-1),a--;e=0<e?h.substring(e):h}}g=e;b="undefined"!==typeof b?""+b:"";if(f||""===b)if(""===b&&(f=-60),"number"===typeof f){var d=new Date;d.setTime(d.getTime()+6E4*f)}else d=f;return c&&(document.cookie=encodeURIComponent(c)+"="+encodeURIComponent(b)+"; path=/;"+(f?" expires="+d.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof cookieRead)?cookieRead(c)===b:!1}};window.cookieRead=window.cookieRead||function(c){if("string"===typeof c)c=encodeURIComponent(c);else return"";var b=" "+document.cookie,a=b.indexOf(" "+c+"="),d=0>a?a:b.indexOf(";",a);return(c=0>a?"":decodeURIComponent(b.substring(a+2+c.length,0>d?b.length:d)))?c:""};a=a?a:30;d="s_nr"+a;var k=new Date,m=cookieRead(d),n=m.split("-"),l=k.getTime();k.setTime(l+864E5*a);if(""===m||18E5>l-n[0]&&"New"===n[1])return cookieWrite(d,l+"-New",k),"New";cookieWrite(d,l+"-Repeat",k);return"Repeat"}; module.exports.getNewRepeat = getNewRepeat; } }, "common-analytics-plugins/src/lib/plugins/getPageLoadTime.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getPageLoadTime v2.0.1 with performanceWriteFull, performanceWritePart, performanceCheck, and performanceRead helper functions (Requires AppMeasurement and the p_fo plugin) */ function getPageLoadTime(){function l(){var a=performance.timing;if(0<a.loadEventEnd&&(clearInterval(window.pi),""===window.cookieRead("s_plt"))){var b=window,d=b.cookieWrite;var c=a.loadEventEnd;var f=a.navigationStart;c=0<=c&&0<=f?6E4>c-f&&0<=c-f?parseFloat((c-f)/1E3).toFixed(2):60:void 0;d.call(b,"s_plt",c);window.cookieWrite("s_pltp",window.pageName)}window.ptc=a.loadEventEnd}if(arguments&&"-v"===arguments[0])return{plugin:"getPageLoadTime",version:"2.0.1"};var e=function(){if("undefined"!==typeof window.s_c_il)for(var a=0,b;a<window.s_c_il.length;a++)if(b=window.s_c_il[a],b._c&&"s_c"===b._c)return b}();"undefined"!==typeof e&&(e.contextData.getPageLoadTime="2.0.1");window.pageName="undefined"!==typeof e&&e.pageName||"";window.cookieWrite=window.cookieWrite||function(a,b,d){if("string"===typeof a){var c=window.location.hostname,f=window.location.hostname.split(".").length-1;if(c&&!/^[0-9.]+$/.test(c)){f=2<f?f:2;var h=c.lastIndexOf(".");if(0<=h){for(;0<=h&&1<f;)h=c.lastIndexOf(".",h-1),f--;h=0<h?c.substring(h):c}}g=h;b="undefined"!==typeof b?""+b:"";if(d||""===b)if(""===b&&(d=-60),"number"===typeof d){var k=new Date;k.setTime(k.getTime()+6E4*d)}else k=d;return a&&(document.cookie=encodeURIComponent(a)+"="+encodeURIComponent(b)+"; path=/;"+(d?" expires="+k.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof cookieRead)?cookieRead(a)===b:!1}};window.cookieRead=window.cookieRead||function(a){if("string"===typeof a)a=encodeURIComponent(a);else return"";var b=" "+document.cookie,d=b.indexOf(" "+a+"="),c=0>d?d:b.indexOf(";",d);return(a=0>d?"":decodeURIComponent(b.substring(d+2+a.length,0>c?b.length:c)))?a:""};window.p_fo=window.p_fo||function(a){window.__fo||(window.__fo={});if(window.__fo[a])return!1;window.__fo[a]={};return!0};"undefined"!==typeof performance&&p_fo("performance")&&((e=performance,e.clearResourceTimings(),""!==window.cookieRead("s_plt")&&(0<e.timing.loadEventEnd&&clearInterval(window.pi),this._pltLoadTime=window.cookieRead("s_plt"),this._pltPreviousPage=window.cookieRead("s_pltp"),window.cookieWrite("s_plt",""),window.cookieWrite("s_pltp","")),0===e.timing.loadEventEnd)?window.pi=setInterval(function(){l()},250):0<e.timing.loadEventEnd&&(window.ptc?window.ptc===e.timing.loadEventEnd&&1===e.getEntries().length&&(window.pwp=setInterval(function(){var a=performance;0<a.getEntries().length&&(window.ppfe===a.getEntries().length?clearInterval(window.pwp):window.ppfe=a.getEntries().length);""===window.cookieRead("s_plt")&&(window.cookieWrite("s_plt",((a.getEntries()[a.getEntries().length-1].responseEnd-a.getEntries()[0].startTime)/1E3).toFixed(2)),window.cookieWrite("s_pltp",window.pageName))},500)):l()))}; module.exports.getPageLoadTime = getPageLoadTime; } }, "common-analytics-plugins/src/lib/plugins/getPageName.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getPageName v4.2 */ var getPageName=function(si,qv,hv,de){var a=si,b=qv,f=hv,e=de;if("-v"===a)return{plugin:"getPageName",version:"4.2"};a:{if("undefined"!==typeof window.s_c_il){var d=0;for(var g;d<window.s_c_il.length;d++)if(g=window.s_c_il[d],g._c&&"s_c"===g._c){d=g;break a}}d=void 0}"undefined"!==typeof d&&(d.contextData.getPageName="4.2");var c=location.hostname,h=location.pathname.substring(1).split("/"),l=h.length,k=location.search.substring(1).split("&"),m=k.length;d=location.hash.substring(1).split("&");g=d.length;e=e?e:"|";a=a?a:c;b=b?b:"";f=f?f:"";if(1===l&&""===h[0])a=a+e+"home";else for(c=0;c<l;c++)a=a+e+decodeURIComponent(h[c]);if(b&&(1!==m||""!==k[0]))for(h=b.split(","),l=h.length,c=0;c<l;c++)for(b=0;b<m;b++)if(h[c]===k[b].split("=")[0]){a=a+e+decodeURIComponent(k[b]);break}if(f&&(1!==g||""!==d[0]))for(f=f.split(","),k=f.length,c=0;c<k;c++)for(b=0;b<g;b++)if(f[c]===d[b].split("=")[0]){a=a+e+decodeURIComponent(d[b]);break}return a.substring(a.length-e.length)===e?a.substring(0,a.length-e.length):a}; module.exports.getPageName = getPageName; } }, "common-analytics-plugins/src/lib/plugins/getPreviousValue.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getPreviousValue v3.0 */ function getPreviousValue(v,c){var k=v,d=c;if("-v"===k)return{plugin:"getPreviousValue",version:"3.0"};var a=function(){if("undefined"!==typeof window.s_c_il)for(var c=0,b;c<window.s_c_il.length;c++)if(b=window.s_c_il[c],b._c&&"s_c"===b._c)return b}();"undefined"!==typeof a&&(a.contextData.getPreviousValue="3.0");window.cookieWrite=window.cookieWrite||function(c,b,f){if("string"===typeof c){var h=window.location.hostname,a=window.location.hostname.split(".").length-1;if(h&&!/^[0-9.]+$/.test(h)){a=2<a?a:2;var e=h.lastIndexOf(".");if(0<=e){for(;0<=e&&1<a;)e=h.lastIndexOf(".",e-1),a--;e=0<e?h.substring(e):h}}g=e;b="undefined"!==typeof b?""+b:"";if(f||""===b)if(""===b&&(f=-60),"number"===typeof f){var d=new Date;d.setTime(d.getTime()+6E4*f)}else d=f;return c&&(document.cookie=encodeURIComponent(c)+"="+encodeURIComponent(b)+"; path=/;"+(f?" expires="+d.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof cookieRead)?cookieRead(c)===b:!1}};window.cookieRead=window.cookieRead||function(c){if("string"===typeof c)c=encodeURIComponent(c);else return"";var b=" "+document.cookie,a=b.indexOf(" "+c+"="),d=0>a?a:b.indexOf(";",a);return(c=0>a?"":decodeURIComponent(b.substring(a+2+c.length,0>d?b.length:d)))?c:""};var l;d=d||"s_gpv";a=new Date;a.setTime(a.getTime()+18E5);window.cookieRead(d)&&(l=window.cookieRead(d));k?window.cookieWrite(d,k,a):window.cookieWrite(d,l,a);return l}; module.exports.getPreviousValue = getPreviousValue; } }, "common-analytics-plugins/src/lib/plugins/getQueryParam.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getQueryParam v4.0.1 (Requires AppMeasurement and pt plugin) */ function getQueryParam(a,d,f){function n(g,c){c=c.split("?").join("&");c=c.split("#").join("&");var e=c.indexOf("&");if(g&&(-1<e||c.indexOf("=")>e)){e=c.substring(e+1);e=e.split("&");for(var h=0,p=e.length;h<p;h++){var l=e[h].split("="),q=l[1];if(l[0].toLowerCase()===g.toLowerCase())return decodeURIComponent(q||!0)}}return""}if("-v"===a)return{plugin:"getQueryParam",version:"4.0.1"};var b=function(){if("undefined"!==typeof window.s_c_il)for(var g=0,c;g<window.s_c_il.length;g++)if(c=window.s_c_il[g],c._c&&"s_c"===c._c)return c}();"undefined"!==typeof b&&(b.contextData.getQueryParam="4.0");if(a){d=d||"";f=(f||"undefined"!==typeof b&&b.pageURL||location.href)+"";(4<d.length||-1<d.indexOf("="))&&f&&4>f.length&&(b=d,d=f,f=b);b="";for(var m=a.split(","),r=m.length,k=0;k<r;k++)a=n(m[k],f),"string"===typeof a?(a=-1<a.indexOf("#")?a.substring(0,a.indexOf("#")):a,b+=b?d+a:a):b=""===b?a:b+(d+a);return b}}; module.exports.getQueryParam = getQueryParam; } }, "common-analytics-plugins/src/lib/plugins/getResponsiveLayout.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getResponsiveLayout v1.1 (Requires AppMeasurement) */ var getResponsiveLayout=function(ppw,plw,tw){var c=ppw,b=plw,e=tw;if("-v"===c)return{plugin:"getResponsiveLayout",version:"1.1"};a:{if("undefined"!==typeof window.s_c_il){var a=0;for(var d;a<window.s_c_il.length;a++)if(d=window.s_c_il[a],d._c&&"s_c"===d._c){a=d;break a}}a=void 0}"undefined"!==typeof a&&(a.contextData.getResponsiveLayout="1.1");if(!(isNaN(c)||isNaN(b)||isNaN(e)||b<c||e<b))return a=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,(c<b&&a<=b?a<=c?"phone portrait layout":"phone landscape layout":a<=b?"phone layout":a<=e?"tablet layout":"desktop layout")+":"+a+"x"+(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)}; module.exports.getResponsiveLayout = getResponsiveLayout; } }, "common-analytics-plugins/src/lib/plugins/getTimeBetweenEvents.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getTimeBetweenEvents v3.0 (AppMeasurement highly recommended) */ function getTimeBetweenEvents(ste,rt,stp,res,cn,etd,fmt,bml,rte){var v=ste,B=rt,x=stp,C=res,k=cn,m=etd,E=fmt,F=bml,p=rte;if("-v"===v)return{plugin:"getTimeBetweenEvents",version:"3.0"};var q=function(){if("undefined"!==typeof window.s_c_il)for(var c=0,b;c<window.s_c_il.length;c++)if(b=window.s_c_il[c],b._c&&"s_c"===b._c)return b}();if("undefined"!==typeof q&&(q.contextData.getTimeBetweenEvents="3.0",window.cookieWrite=window.cookieWrite||function(c,b,d){if("string"===typeof c){var n=window.location.hostname,f=window.location.hostname.split(".").length-1;if(n&&!/^[0-9.]+$/.test(n)){f=2<f?f:2;var l=n.lastIndexOf(".");if(0<=l){for(;0<=l&&1<f;)l=n.lastIndexOf(".",l-1),f--;l=0<l?n.substring(l):n}}g=l;b="undefined"!==typeof b?""+b:"";if(d||""===b)if(""===b&&(d=-60),"number"===typeof d){var e=new Date;e.setTime(e.getTime()+6E4*d)}else e=d;return c&&(document.cookie=encodeURIComponent(c)+"="+encodeURIComponent(b)+"; path=/;"+(d?" expires="+e.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof window.cookieRead)?window.cookieRead(c)===b:!1}},window.cookieRead=window.cookieRead||function(c){if("string"===typeof c)c=encodeURIComponent(c);else return"";var b=" "+document.cookie,d=b.indexOf(" "+c+"="),e=0>d?d:b.indexOf(";",d);return(c=0>d?"":decodeURIComponent(b.substring(d+2+c.length,0>e?b.length:e)))?c:""},window.formatTime=window.formatTime||function(c,b,d){function e(b,d,c,e){if("string"!==typeof d)return!1;if("string"===typeof b)b=b.split(c||",");else if("object"!==typeof b)return!1;c=0;for(a=b.length;c<a;c++)if(1==e&&d===b[c]||d.toLowerCase()===b[c].toLowerCase())return!0;return!1}if(!("undefined"===typeof c||isNaN(c)||0>Number(c))){var f="";"string"===typeof b&&"d"===b||("string"!==typeof b||!e("h,m,s",b))&&86400<=c?(b=86400,f="days",d=isNaN(d)?1:b/(d*b)):"string"===typeof b&&"h"===b||("string"!==typeof b||!e("m,s",b))&&3600<=c?(b=3600,f="hours",d=isNaN(d)?4:b/(d*b)):"string"===typeof b&&"m"===b||("string"!==typeof b||!e("s",b))&&60<=c?(b=60,f="minutes",d=isNaN(d)?2:b/(d*b)):(b=1,f="seconds",d=isNaN(d)?.2:b/d);f=Math.round(c*d/b)/d+" "+f;0===f.indexOf("1 ")&&(f=f.substring(0,f.length-1));return f}},window.inList=window.inList||function(c,b,d,e){if("string"!==typeof b)return!1;if("string"===typeof c)c=c.split(d||",");else if("object"!==typeof c)return!1;d=0;for(a=c.length;d<a;d++)if(1==e&&b===c[d]||b.toLowerCase()===c[d].toLowerCase())return!0;return!1},"string"===typeof v&&"undefined"!==typeof B&&"string"===typeof x&&"undefined"!==typeof C)){k=k?k:"s_tbe";m=isNaN(m)?1:Number(m);var r=!1,t=!1,y=v.split(","),z=x.split(",");p=p?p.split(","):[];for(var u=window.cookieRead(k),w,D=new Date,A=D.getTime(),h=new Date,e=0;e<p.length;++e)if(window.inList(q.events,p[e])){h.setDate(h.getDate()-1);window.cookieWrite(k,"",h);return}h.setTime(h.getTime()+864E5*m);for(e=0;e<y.length&&!r&&(r=window.inList(q.events,y[e]),!0!==r);++e);for(e=0;e<z.length&&!t&&(t=window.inList(q.events,z[e]),!0!==t);++e);1===y.length&&1===z.length&&v===x&&r&&t?(u&&(w=(A-u)/1E3),window.cookieWrite(k,A,m?h:0)):(!r||1!=B&&u||window.cookieWrite(k,A,m?h:0),t&&u&&(w=(D.getTime()-u)/1E3,!0===C&&(h.setDate(h.getDate()-1),window.cookieWrite(k,"",h))));return w?window.formatTime(w,E,F):""}}; module.exports.getTimeBetweenEvents = getTimeBetweenEvents; } }, "common-analytics-plugins/src/lib/plugins/getTimeParting.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getTimeParting v6.3 (No Prerequisites Needed) */ function getTimeParting(t){var c=t;if("-v"===t)return{plugin:"getTimeParting",version:"6.3"};a:{if("undefined"!==typeof window.s_c_il){var a=0;for(var b;a<window.s_c_il.length;a++)if(b=window.s_c_il[a],b._c&&"s_c"===b._c){a=b;break a}}a=void 0}"undefined"!==typeof a&&(a.contextData.getTimeParting="6.3");c=document.documentMode?void 0:c||"Etc/GMT";a=(new Date).toLocaleDateString("en-US",{timeZone:c,minute:"numeric",hour:"numeric",weekday:"long",day:"numeric",year:"numeric",month:"long"});a=/([a-zA-Z]+).*?([a-zA-Z]+).*?([0-9]+).*?([0-9]+)(.*?)([0-9])(.*)/.exec(a);return"year="+a[4]+" | month="+a[2]+" | date="+a[3]+" | day="+a[1]+" | time="+(a[6]+a[7])}; module.exports.getTimeParting = getTimeParting; } }, "common-analytics-plugins/src/lib/plugins/getTimeSinceLastVisit.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getTimeSinceLastVisit v2.0 */ function getTimeSinceLastVisit(){if(arguments&&"-v"===arguments[0])return{plugin:"getTimeSinceLastVisit",version:"2.0"};var h=function(){if("undefined"!==typeof window.s_c_il)for(var c=0,b;c<window.s_c_il.length;c++)if(b=window.s_c_il[c],b._c&&"s_c"===b._c)return b}();"undefined"!==typeof h&&(h.contextData.getTimeSinceLastVisit="2.0");window.formatTime=window.formatTime||function(c,b,d){function f(b,d,c,e){if("string"!==typeof d)return!1;if("string"===typeof b)b=b.split(c||",");else if("object"!==typeof b)return!1;c=0;for(a=b.length;c<a;c++)if(1==e&&d===b[c]||d.toLowerCase()===b[c].toLowerCase())return!0;return!1}if(!("undefined"===typeof c||isNaN(c)||0>Number(c))){var e="";"string"===typeof b&&"d"===b||("string"!==typeof b||!f("h,m,s",b))&&86400<=c?(b=86400,e="days",d=isNaN(d)?1:b/(d*b)):"string"===typeof b&&"h"===b||("string"!==typeof b||!f("m,s",b))&&3600<=c?(b=3600,e="hours",d=isNaN(d)?4:b/(d*b)):"string"===typeof b&&"m"===b||("string"!==typeof b||!f("s",b))&&60<=c?(b=60,e="minutes",d=isNaN(d)?2:b/(d*b)):(b=1,e="seconds",d=isNaN(d)?.2:b/d);e=Math.round(c*d/b)/d+" "+e;0===e.indexOf("1 ")&&(e=e.substring(0,e.length-1));return e}};window.cookieWrite=window.cookieWrite||function(c,b,d){if("string"===typeof c){var f=window.location.hostname,e=window.location.hostname.split(".").length-1;if(f&&!/^[0-9.]+$/.test(f)){e=2<e?e:2;var k=f.lastIndexOf(".");if(0<=k){for(;0<=k&&1<e;)k=f.lastIndexOf(".",k-1),e--;k=0<k?f.substring(k):f}}g=k;b="undefined"!==typeof b?""+b:"";if(d||""===b)if(""===b&&(d=-60),"number"===typeof d){var h=new Date;h.setTime(h.getTime()+6E4*d)}else h=d;return c&&(document.cookie=encodeURIComponent(c)+"="+encodeURIComponent(b)+"; path=/;"+(d?" expires="+h.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof cookieRead)?cookieRead(c)===b:!1}};window.cookieRead=window.cookieRead||function(c){if("string"===typeof c)c=encodeURIComponent(c);else return"";var b=" "+document.cookie,d=b.indexOf(" "+c+"="),f=0>d?d:b.indexOf(";",d);return(c=0>d?"":decodeURIComponent(b.substring(d+2+c.length,0>f?b.length:f)))?c:""};h=new Date;var m=h.getTime(),n=cookieRead("s_tslv")||0,l=Math.round((m-n)/1E3);h.setTime(m+63072E6);cookieWrite("s_tslv",m,h);return n?1800<l||cookieRead("s_inv")?(cookieRead("s_inv")&&(l=cookieRead("s_inv")),cookieWrite("s_inv",l,30),"0"!==l?formatTime(l):"New Visitor"):"":(cookieWrite("s_inv","0",30),"New Visitor")}; module.exports.getTimeSinceLastVisit = getTimeSinceLastVisit; } }, "common-analytics-plugins/src/lib/plugins/getTimeToComplete.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getTimeToComplete v4.0 */ function getTimeToComplete(sos,cn,exp,tp){var f=sos,m=cn,l=exp,e=tp;if("-v"===f)return{plugin:"getTimeToComplete",version:"4.0"};var k=function(){if("undefined"!==typeof window.s_c_il)for(var c=0,b;c<window.s_c_il.length;c++)if(b=window.s_c_il[c],b._c&&"s_c"===b._c)return b}();"undefined"!==typeof k&&(k.contextData.getTimeToComplete="4.0");window.formatTime=window.formatTime||function(c,b,d){function e(b,d,c,e){if("string"!==typeof d)return!1;if("string"===typeof b)b=b.split(c||",");else if("object"!==typeof b)return!1;c=0;for(a=b.length;c<a;c++)if(1==e&&d===b[c]||d.toLowerCase()===b[c].toLowerCase())return!0;return!1}if(!("undefined"===typeof c||isNaN(c)||0>Number(c))){var h="";"string"===typeof b&&"d"===b||("string"!==typeof b||!e("h,m,s",b))&&86400<=c?(b=86400,h="days",d=isNaN(d)?1:b/(d*b)):"string"===typeof b&&"h"===b||("string"!==typeof b||!e("m,s",b))&&3600<=c?(b=3600,h="hours",d=isNaN(d)?4:b/(d*b)):"string"===typeof b&&"m"===b||("string"!==typeof b||!e("s",b))&&60<=c?(b=60,h="minutes",d=isNaN(d)?2:b/(d*b)):(b=1,h="seconds",d=isNaN(d)?.2:b/d);h=Math.round(c*d/b)/d+" "+h;0===h.indexOf("1 ")&&(h=h.substring(0,h.length-1));return h}};window.cookieWrite=window.cookieWrite||function(c,b,d){if("string"===typeof c){var e=window.location.hostname,h=window.location.hostname.split(".").length-1;if(e&&!/^[0-9.]+$/.test(e)){h=2<h?h:2;var f=e.lastIndexOf(".");if(0<=f){for(;0<=f&&1<h;)f=e.lastIndexOf(".",f-1),h--;f=0<f?e.substring(f):e}}g=f;b="undefined"!==typeof b?""+b:"";if(d||""===b)if(""===b&&(d=-60),"number"===typeof d){var k=new Date;k.setTime(k.getTime()+6E4*d)}else k=d;return c&&(document.cookie=encodeURIComponent(c)+"="+encodeURIComponent(b)+"; path=/;"+(d?" expires="+k.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof cookieRead)?cookieRead(c)===b:!1}};window.cookieRead=window.cookieRead||function(c){if("string"===typeof c)c=encodeURIComponent(c);else return"";var b=" "+document.cookie,d=b.indexOf(" "+c+"="),e=0>d?d:b.indexOf(";",d);return(c=0>d?"":decodeURIComponent(b.substring(d+2+c.length,0>e?b.length:e)))?c:""};f=f?f.toLowerCase():"start";if("stop"===f||"start"===f){m=m?m:"s_gttc";e?e="d"===e?864E5:"h"===e?36E5:"s"===e?1E3:6E4:(l=30,e=6E4);l=isNaN(l)?30:l;l*=e;k=cookieRead(m);e=new Date;if("stop"===f&&k)return l=Math.round((e.getTime()-k)/1E3),cookieWrite(m,"",0),formatTime(l);"start"!==f||k?k&&Number(k)<e.getTime()+18E5&&cookieWrite(m,k,30):(f=String(e.getTime()),e.setTime(e.getTime()+l),cookieWrite(m,f,e))}}; module.exports.getTimeToComplete = getTimeToComplete; } }, "common-analytics-plugins/src/lib/plugins/getValOnce.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getValOnce v3.0 (Requires AppMeasurement) */ function getValOnce(vtc,cn,et,ep){var e=vtc,k=cn,l=et,m=ep;if(arguments&&"-v"===arguments[0])return{plugin:"getValOnce",version:"3.0"};var c=function(){if("undefined"!==typeof window.s_c_il)for(var b=0,a;b<window.s_c_il.length;b++)if(a=window.s_c_il[b],a._c&&"s_c"===a._c)return a}();"undefined"!==typeof c&&(c.contextData.getValOnce="3.0");window.cookieWrite=window.cookieWrite||function(b,a,d){if("string"===typeof b){var h=window.location.hostname,c=window.location.hostname.split(".").length-1;if(h&&!/^[0-9.]+$/.test(h)){c=2<c? c:2;var f=h.lastIndexOf(".");if(0<=f){for(;0<=f&&1<c;)f=h.lastIndexOf(".",f-1),c--;f=0<f?h.substring(f):h}}g=f;a="undefined"!==typeof a?""+a:"";if(d||""===a)if(""===a&&(d=-60),"number"===typeof d){var e=new Date;e.setTime(e.getTime()+6E4*d)}else e=d;return b&&(document.cookie=encodeURIComponent(b)+"="+encodeURIComponent(a)+"; path=/;"+(d?" expires="+e.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof cookieRead)?cookieRead(b)===a:!1}};window.cookieRead=window.cookieRead||function(b){if("string"=== typeof b)b=encodeURIComponent(b);else return"";var a=" "+document.cookie,d=a.indexOf(" "+b+"="),c=0>d?d:a.indexOf(";",d);return(b=0>d?"":decodeURIComponent(a.substring(d+2+b.length,0>c?a.length:c)))?b:""};return e&&(k=k||"s_gvo",l=l||0,m="m"===m?6E4:864E5,e!==this.c_r(k))?(c=new Date,c.setTime(c.getTime()+l*m),cookieWrite(k,e,0===l?0:m),e):""}; module.exports.getValOnce = getValOnce; } }, "common-analytics-plugins/src/lib/plugins/getVisitDuration.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getVisitDuration v2.1 */ function getVisitDuration(){if(arguments&&"-v"===arguments[0])return{plugin:"getVisitDuration",version:"2.1"};var d=function(){if("undefined"!==typeof window.s_c_il)for(var c=0,b;c<window.s_c_il.length;c++)if(b=window.s_c_il[c],b._c&&"s_c"===b._c)return b}();"undefined"!==typeof d&&(d.contextData.getVisitDuration="2.1");window.cookieWrite=window.cookieWrite||function(c,b,f){if("string"===typeof c){var h=window.location.hostname,a=window.location.hostname.split(".").length-1;if(h&&!/^[0-9.]+$/.test(h)){a=2<a?a:2;var e=h.lastIndexOf(".");if(0<=e){for(;0<=e&&1<a;)e=h.lastIndexOf(".",e-1),a--;e=0<e?h.substring(e):h}}g=e;b="undefined"!==typeof b?""+b:"";if(f||""===b)if(""===b&&(f=-60),"number"===typeof f){var d=new Date;d.setTime(d.getTime()+6E4*f)}else d=f;return c&&(document.cookie=encodeURIComponent(c)+"="+encodeURIComponent(b)+"; path=/;"+(f?" expires="+d.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof cookieRead)?cookieRead(c)===b:!1}};window.cookieRead=window.cookieRead||function(c){if("string"===typeof c)c=encodeURIComponent(c);else return"";var b=" "+document.cookie,a=b.indexOf(" "+c+"="),d=0>a?a:b.indexOf(";",a);return(c=0>a?"":decodeURIComponent(b.substring(a+2+c.length,0>d?b.length:d)))?c:""};d=(new Date).getTime();var k=cookieRead("s_dur"),a=0;if(isNaN(k)||18E5<d-k)k=d;a=d-k;cookieWrite("s_dur",k+"",30);if(0===a)return"first hit of visit";a=Math.floor(a/6E4);return 0===a?"less than a minute":1===a?"1 minute":a+" minutes"}; module.exports.getVisitDuration = getVisitDuration; } }, "common-analytics-plugins/src/lib/plugins/getVisitNum.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getVisitNum v4.2 */ function getVisitNum(rp,erp){var a=rp,l=erp;function m(c){return isNaN(c)?!1:(parseFloat(c)|0)===parseFloat(c)}function n(c){var b=new Date,e=isNaN(c)?0:Math.floor(c);b.setHours(23);b.setMinutes(59);b.setSeconds(59);"w"===c&&(e=6-b.getDay());if("m"===c){e=b.getMonth()+1;var a=b.getFullYear();e=(new Date(a?a:1970,e?e:1,0)).getDate()-b.getDate()}b.setDate(b.getDate()+e);"y"===c&&(b.setMonth(11),b.setDate(31));return b}if("-v"===a)return{plugin:"getVisitNum",version:"4.2"};var f=function(){if("undefined"!==typeof window.s_c_il)for(var c=0,b;c<window.s_c_il.length;c++)if(b=window.s_c_il[c],b._c&&"s_c"===b._c)return b}();"undefined"!==typeof f&&(f.contextData.getVisitNum="4.2");window.cookieWrite=window.cookieWrite||function(c,b,e){if("string"===typeof c){var a=window.location.hostname,d=window.location.hostname.split(".").length-1;if(a&&!/^[0-9.]+$/.test(a)){d=2<d?d:2;var h=a.lastIndexOf(".");if(0<=h){for(;0<=h&&1<d;)h=a.lastIndexOf(".",h-1),d--;h=0<h?a.substring(h):a}}g=h;b="undefined"!==typeof b?""+b:"";if(e||""===b)if(""===b&&(e=-60),"number"===typeof e){var f=new Date;f.setTime(f.getTime()+6E4*e)}else f=e;return c&&(document.cookie=encodeURIComponent(c)+"="+encodeURIComponent(b)+"; path=/;"+(e?" expires="+f.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof window.cookieRead)?window.cookieRead(c)===b:!1}};window.cookieRead=window.cookieRead||function(c){if("string"===typeof c)c=encodeURIComponent(c);else return"";var b=" "+document.cookie,a=b.indexOf(" "+c+"="),d=0>a?a:b.indexOf(";",a);return(c=0>a?"":decodeURIComponent(b.substring(a+2+c.length,0>d?b.length:d)))?c:""};a=a?a:365;l="undefined"!==typeof l?!!l:m(a)?!0:!1;var p=(new Date).getTime();f=n(a);if(window.cookieRead("s_vnc"+a))var d=window.cookieRead("s_vnc"+a).split("&vn="),k=d[1];if(window.cookieRead("s_ivc"))return k?(window.cookieWrite("s_ivc",!0,30),k):"unknown visit number";if("undefined"!==typeof k)return k++,d=l&&m(a)?p+864E5*a:d[0],f.setTime(d),window.cookieWrite("s_vnc"+a,d+"&vn="+k,f),window.cookieWrite("s_ivc",!0,30),k;d=m(a)?p+864E5*a:n(a).getTime();window.cookieWrite("s_vnc"+a,d+"&vn=1",f);window.cookieWrite("s_ivc",!0,30);return"1"}; module.exports.getVisitNum = getVisitNum; } }, "common-analytics-plugins/src/lib/plugins/inList.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: inList v3.0 */ function inList(lv,vtc,d,cc){var b=lv,e=vtc,c=d,f=cc;if("-v"===b)return{plugin:"inList",version:"3.0"};a:{if("undefined"!==typeof window.s_c_il){var a=0;for(var d;a<window.s_c_il.length;a++)if(d=window.s_c_il[a],d._c&&"s_c"===d._c){a=d;break a}}a=void 0}"undefined"!==typeof a&&(a.contextData.inList="3.0");if("string"!==typeof e)return!1;if("string"===typeof b)b=b.split(c||",");else if("object"!==typeof b)return!1;c=0;for(a=b.length;c<a;c++)if(1==f&&e===b[c]||e.toLowerCase()===b[c].toLowerCase())return!0;return!1}; module.exports.inList = inList; } }, "common-analytics-plugins/src/lib/plugins/lowerCaseVars.js": { "script": function(module, exports, require, turbine) { function lowerCaseVars(v){var s=this;s[v]&&("events"!==v&&-1===v.indexOf("contextData")?(s[v]=s[v].toString(),0!== s[v].indexOf("D=")&&(s[v]=s[v].toLowerCase())):-1<v.indexOf("contextData")&&(v=v.substring(v.indexOf(".")+1),s.contextData[v]&& (s.contextData[v]=s.contextData[v].toString().toLowerCase())))} module.exports.lowerCaseVars = lowerCaseVars; } }, "common-analytics-plugins/src/lib/plugins/manageVars.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: manageVars v3.0 (Requires AppMeasurement) */ function manageVars(cb,l,il){var g=cb,c=l,d=il;if("-v"===g)return{plugin:"manageVars",version:"3.0"};var f=function(){if("undefined"!==typeof window.s_c_il)for(var a=0,b;a<window.s_c_il.length;a++)if(b=window.s_c_il[a],b._c&&"s_c"===b._c)return b}();if("undefined"!==typeof f){f.contextData.manageVars="3.0";f.blankVars=function(a){this[a]&&(0>a.indexOf("contextData")?this[a]="":(a=a.substring(a.indexOf(".")+1),this.contextData[a]&&(this.contextData[a]="")))};f.lowerCaseVars=function(a){this[a]&&("events"!==a&&-1===a.indexOf("contextData")?(this[a]=this[a].toString(),0!==this[a].indexOf("D=")&&(this[a]=this[a].toLowerCase())):-1<a.indexOf("contextData")&&(a=a.substring(a.indexOf(".")+1),this.contextData[a]&&(this.contextData[a]=this.contextData[a].toString().toLowerCase())))};f.cleanStr=function(a){function b(a){if("string"===typeof a){for(a=a.replace(/<\/?[^>]+(>|$)/g,"").trim().replace(/[\u2018\u2019\u201A]/g,"'").replace(/\t+/g,"").replace(/[\n\r]/g," ");-1<a.indexOf(" ");)a=a.replace(/\s\s/g," ");return a}return""}this[a]&&"function"===typeof b&&(0>a.indexOf("contextData")?this[a]=b(this[a]):(a=a.substring(a.indexOf(".")+1),this.contextData[a]&&(this.contextData[a]=b(this.contextData[a].toString()))))};f.pt=function(a,b,c,d){if(a&&this[c]){a=a.split(b||",");b=a.length;for(var e,f=0;f<b;f++)if(e=this[c](a[f],d))return e}};if(!f[g])return!1;c=c||"";d=d||!0;var b,e="pageName,purchaseID,channel,server,pageType,campaign,state,zip,events,products,transactionID";for(b=1;76>b;b++)e+=",prop"+b;for(b=1;251>b;b++)e+=",eVar"+b;for(b=1;6>b;b++)e+=",hier"+b;for(b=1;4>b;b++)e+=",list"+b;for(b in f.contextData)e+=",contextData."+b;if(c){if(1==d)e=c.replace("['",".").replace("']","");else if(0==d){c=c.split(",");d=e.split(",");e="";for(x in c)for(y in-1<c[x].indexOf("contextData")&&(c[x]="contextData."+c[x].split("'")[1]),d)c[x]===d[y]&&(d[y]="");for(y in d)e+=d[y]?","+d[y]:""}f.pt(e,",",g,0);return!0}return""===c&&d?(f.pt(e,",",g,0),!0):!1}}; module.exports.manageVars = manageVars; } }, "common-analytics-plugins/src/lib/plugins/p_fo.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: p_fo (pageFirstOnly) v3.0 (Requires AppMeasurement) */ function p_fo(c){if("-v"===c)return{plugin:"p_fo",version:"3.0"};a:{if("undefined"!==typeof window.s_c_il){var a=0;for(var b;a<window.s_c_il.length;a++)if(b=window.s_c_il[a],b._c&&"s_c"===b._c){a=b;break a}}a=void 0}"undefined"!==typeof a&&(a.contextData.p_fo="3.0");window.__fo||(window.__fo={});if(window.__fo[c])return!1;window.__fo[c]={};return!0}; module.exports.p_fo = p_fo } }, "common-analytics-plugins/src/lib/plugins/performanceCheck.js": { "script": function(module, exports, require, turbine) { function performanceCheck(a,b){if(0<=a&&0<=b)return 6E4>a-b&&0<=a-b?parseFloat((a-b)/1E3).toFixed(2):60} module.exports.performanceCheck = performanceCheck; } }, "common-analytics-plugins/src/lib/plugins/performanceWriteFull.js": { "script": function(module, exports, require, turbine) { function performanceWriteFull(){var s=this,a=performance.timing;0<a.loadEventEnd&&(clearInterval(s.pi),""===s.c_r("s_plt")&& (s.c_w("s_plt",s.performanceCheck(a.loadEventEnd,a.navigationStart)),s.c_w("s_pltp",s.pageName)));s.ptc=a.loadEventEnd} module.exports.performanceWriteFull = performanceWriteFull; } }, "common-analytics-plugins/src/lib/plugins/performanceWritePart.js": { "script": function(module, exports, require, turbine) { function performanceWritePart(){var s=this,a=performance;0<a.getEntries().length&&(s.ppfe===a.getEntries().length? clearInterval(s.pwp):s.ppfe=a.getEntries().length);""===s.c_r("s_plt")&&(s.c_w("s_plt",((a.getEntries()[a.getEntries().length-1].responseEnd-a.getEntries()[0].startTime)/1E3).toFixed(2)),s.c_w("s_pltp",s.pageName))} module.exports.performanceWritePart = performanceWritePart; } }, "common-analytics-plugins/src/lib/plugins/handlePPVevents.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: handlePPVevents helper function (for getPercentPageViewed v4.0 Plugin) */ function handlePPVevents(){if("undefined"!==typeof s_c_il){for(var c=0,g=s_c_il.length;c<g;c++)if(s_c_il[c]&&(s_c_il[c].getPercentPageViewed||s_c_il[c].getPreviousPageActivity)){var s=s_c_il[c];break}if(s&&s.ppvID){var f=Math.max(Math.max(document.body.scrollHeight,document.documentElement.scrollHeight),Math.max(document.body.offsetHeight,document.documentElement.offsetHeight),Math.max(document.body.clientHeight,document.documentElement.clientHeight)),h=window.innerHeight||document.documentElement.clientHeight|| document.body.clientHeight;c=(window.pageYOffset||window.document.documentElement.scrollTop||window.document.body.scrollTop)+h;g=Math.min(Math.round(c/f*100),100);var k=Math.floor(c/h);h=Math.floor(f/h);var d="";if(!s.c_r("s_tp")||s.unescape(s.c_r("s_ppv").split(",")[0])!==s.ppvID||s.p_fo(s.ppvID)||1==s.ppvChange&&s.c_r("s_tp")&&f!=s.c_r("s_tp")){(s.unescape(s.c_r("s_ppv").split(",")[0])!==s.ppvID||s.p_fo(s.ppvID+"1"))&&s.c_w("s_ips",c);if(s.c_r("s_tp")&&s.unescape(s.c_r("s_ppv").split(",")[0])=== s.ppvID){s.c_r("s_tp");d=s.c_r("s_ppv");var e=-1<d.indexOf(",")?d.split(","):[];d=e[0]?e[0]:"";e=e[3]?e[3]:"";var l=s.c_r("s_ips");d=d+","+Math.round(e/f*100)+","+Math.round(l/f*100)+","+e+","+k}s.c_w("s_tp",f)}else d=s.c_r("s_ppv");var b=d&&-1<d.indexOf(",")?d.split(",",6):[];f=0<b.length?b[0]:escape(s.ppvID);e=1<b.length?parseInt(b[1]):g;l=2<b.length?parseInt(b[2]):g;var m=3<b.length?parseInt(b[3]):c,n=4<b.length?parseInt(b[4]):k;b=5<b.length?parseInt(b[5]):h;0<g&&(d=f+","+(g>e?g:e)+","+l+","+(c> m?c:m)+","+(k>n?k:n)+","+(h>b?h:b));s.c_w("s_ppv",d)}}} module.exports.handlePPVevents = handlePPVevents; } }, "common-analytics-plugins/src/lib/plugins/getPercentPageViewed.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: getPercentPageViewed v5.0 w/handlePPVevents helper function (Requires AppMeasurement and the p_fo plugin) */ function getPercentPageViewed(pid,ch){var l=pid,p=ch;function m(){if(window.ppvID){var c=Math.max(Math.max(document.body.scrollHeight,document.documentElement.scrollHeight),Math.max(document.body.offsetHeight,document.documentElement.offsetHeight),Math.max(document.body.clientHeight,document.documentElement.clientHeight)),b=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,k=(window.pageYOffset||window.document.documentElement.scrollTop||window.document.body.scrollTop)+b,a=Math.min(Math.round(k/c*100),100),n=Math.floor(k/b);b=Math.floor(c/b);var d="";if(!window.cookieRead("s_tp")||decodeURIComponent(window.cookieRead("s_ppv").split(",")[0])!==window.ppvID||window.p_fo(window.ppvID)||1==window.ppvChange&&window.cookieRead("s_tp")&&c!=window.cookieRead("s_tp")){(decodeURIComponent(window.cookieRead("s_ppv").split(",")[0])!==window.ppvID||window.p_fo(window.ppvID+"1"))&&window.cookieWrite("s_ips",k);if(window.cookieRead("s_tp")&&decodeURIComponent(window.cookieRead("s_ppv").split(",")[0])===window.ppvID){window.cookieRead("s_tp");d=window.cookieRead("s_ppv");var f=-1<d.indexOf(",")?d.split(","):[];d=f[0]?f[0]:"";f=f[3]?f[3]:"";var e=window.cookieRead("s_ips");d=d+","+Math.round(f/c*100)+","+Math.round(e/c*100)+","+f+","+n}window.cookieWrite("s_tp",c)}else d=window.cookieRead("s_ppv");var h=d&&-1<d.indexOf(",")?d.split(",",6):[];c=0<h.length?h[0]:escape(window.ppvID);f=1<h.length?parseInt(h[1]):a;e=2<h.length?parseInt(h[2]):a;var l=3<h.length?parseInt(h[3]):k,m=4<h.length?parseInt(h[4]):n;h=5<h.length?parseInt(h[5]):b;0<a&&(d=c+","+(a>f?a:f)+","+e+","+(k>l?k:l)+","+(n>m?n:m)+","+(b>h?b:h));window.cookieWrite("s_ppv",d)}}if("-v"===l)return{plugin:"getPercentPageViewed",version:"5.0"};var e=function(){if("undefined"!==typeof window.s_c_il)for(var c=0,b;c<window.s_c_il.length;c++)if(b=window.s_c_il[c],b._c&&"s_c"===b._c)return b}();"undefined"!==typeof e&&(e.contextData.getPercentPageViewed="5.0");window.pageName="undefined"!==typeof e&&e.pageName||"";window.cookieWrite=window.cookieWrite||function(c,b,a){if("string"===typeof c){var k=window.location.hostname,e=window.location.hostname.split(".").length-1;if(k&&!/^[0-9.]+$/.test(k)){e=2<e?e:2;var d=k.lastIndexOf(".");if(0<=d){for(;0<=d&&1<e;)d=k.lastIndexOf(".",d-1),e--;d=0<d?k.substring(d):k}}g=d;b="undefined"!==typeof b?""+b:"";if(a||""===b)if(""===b&&(a=-60),"number"===typeof a){var f=new Date;f.setTime(f.getTime()+6E4*a)}else f=a;return c&&(document.cookie=encodeURIComponent(c)+"="+encodeURIComponent(b)+"; path=/;"+(a?" expires="+f.toUTCString()+";":"")+(g?" domain="+g+";":""),"undefined"!==typeof window.cookieRead)?window.cookieRead(c)===b:!1}};window.cookieRead=window.cookieRead||function(a){if("string"===typeof a)a=encodeURIComponent(a);else return"";var b=" "+document.cookie,c=b.indexOf(" "+a+"="),e=0>c?c:b.indexOf(";",c);return(a=0>c?"":decodeURIComponent(b.substring(c+2+a.length,0>e?b.length:e)))?a:""};window.p_fo=window.p_fo||function(a){window.__fo||(window.__fo={});if(window.__fo[a])return!1;window.__fo[a]={};return!0};var a=window.cookieRead("s_ppv");a=-1<a.indexOf(",")?a.split(","):[];l=l?l:window.pageName?window.pageName:document.location.href;a[0]=decodeURIComponent(a[0]);window.ppvChange="undefined"===typeof p||1==p?!0:!1;"undefined"!==typeof e&&e.linkType&&"o"===e.linkType||(window.ppvID&&window.ppvID===l||(window.ppvID=l,window.cookieWrite("s_ppv",""),m()),window.p_fo("s_gppvLoad")&&window.addEventListener&&(window.addEventListener("load",m,!1),window.addEventListener("click",m,!1),window.addEventListener("scroll",m,!1)),this._ppvPreviousPage=a[0]?a[0]:"",this._ppvHighestPercentViewed=a[1]?a[1]:"",this._ppvInitialPercentViewed=a[2]?a[2]:"",this._ppvHighestPixelsSeen=a[3]?a[3]:"",this._ppvFoldsSeen=a[4]?a[4]:"",this._ppvFoldsAvailable=a[5]?a[5]:"")}; module.exports.getPercentPageViewed = getPercentPageViewed; } }, "common-analytics-plugins/src/lib/plugins/pt.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: pt v3.0 (Requires AppMeasurement) */ function pt(l,de,cf,fa){var b=l,d=de,f=cf,g=fa;if("-v"===b)return{plugin:"pt",version:"3.0"};a:{if("undefined"!==typeof window.s_c_il){var a=0;for(var c;a<window.s_c_il.length;a++)if(c=window.s_c_il[a],c._c&&"s_c"===c._c){a=c;break a}}a=void 0}if("undefined"!==typeof a&&(a.contextData.pt="3.0",b&&a[f])){b=b.split(d||",");d=b.length;for(var e=0;e<d;e++)if(c=a[f](b[e],g))return c}}; module.exports.pt = pt; } }, "common-analytics-plugins/src/lib/plugins/rfl.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: rfl (removeFromList) v2.1 */ function rfl(lv,vr,d1,d2,df){var b=lv,f=vr,e=d1,h=d2,g=df;if("-v"===b)return{plugin:"rfl",version:"2.1"};a:{if("undefined"!==typeof window.s_c_il){var c=0;for(var a;c<window.s_c_il.length;c++)if(a=window.s_c_il[c],a._c&&"s_c"===a._c){c=a;break a}}c=void 0}"undefined"!==typeof c&&(c.contextData.rfl="2.1");if(!b||!f)return"";c=[];a="";e=e||",";h=h||e;g=g||!1;b=b.split(e);e=b.length;for(var d=0;d<e;d++)-1<b[d].indexOf(":")&&(a=b[d].split(":"),a[1]=a[0]+":"+a[1],b[d]=a[0]),-1<b[d].indexOf("=")&&(a=b[d].split("="),a[1]=a[0]+"="+a[1],b[d]=a[0]),b[d]!==f&&a?c.push(a[1]):b[d]!==f?c.push(b[d]):b[d]===f&&g&&(a?c.push(a[1]):c.push(b[d]),g=!1),a="";return c.join(h)}; module.exports.rfl = rfl; } }, "common-analytics-plugins/src/lib/plugins/twoDecimals.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: twoDecimals v1.0 */ function twoDecimals(v){return"undefined"===typeof v||void 0===v||isNaN(v)?0:Number(Number(v).toFixed(2))}; module.exports.twoDecimals = twoDecimals; } }, "common-analytics-plugins/src/lib/plugins/zeroPad.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: zeroPad v1.0 (No Prerequisites) */ function zeroPad(num,nod){num=parseInt(num);nod=parseInt(nod);if(isNaN(num)||isNaN(nod))return"";var c=nod-num.toString().length+1;return Array(+(0<c&&c)).join("0")+num}; module.exports.zeroPad = zeroPad; } }, "common-analytics-plugins/src/lib/plugins/randomNumber.js": { "script": function(module, exports, require, turbine) { /* Adobe Consulting Plugin: randomNumber v2.0 (zeroPad optional)*/ function randomNumber(nod){nod="number"===typeof nod?17>Math.abs(nod)?Math.round(Math.abs(nod)):17:10;for(var a="1",c=0;c<nod;c++)a+="0";a=Number(a);a=Math.floor(Math.random().toFixed(nod)*a)+"";a.length!==nod&&"undefined"!==typeof zeroPad&&(a=zeroPad(a,nod));return a}; module.exports.randomNumber = randomNumber; } } } }, "adobe-target-v2": { "displayName": "Adobe Target v2", "hostedLibFilesBaseUrl": "https://assets.adobedtm.com/extensions/EPe0317ac342d64783ada9726d04d0601b/", "settings": { "targetSettings": { "enabled": true, "timeout": 3000, "version": "2.5.0", "endpoint": "/rest/v1/delivery", "imsOrgId": "8A720E205666B0F57F000101@AdobeOrg", "clientCode": "monsanto", "secureOnly": false, "serverState": { }, "optinEnabled": true, "serverDomain": "monsanto.tt.omtrdc.net", "urlSizeLimit": 2048, "viewsEnabled": true, "optoutEnabled": false, "bodyHiddenStyle": "body {opacity: 0}", "pageLoadEnabled": true, "analyticsLogging": "server_side", "deviceIdLifetime": 63244800000, "bodyHidingEnabled": true, "decisioningMethod": "server-side", "sessionIdLifetime": 1860000, "visitorApiTimeout": 2000, "authoringScriptUrl": "//cdn.tt.omtrdc.net/cdn/target-vec.js", "overrideMboxEdgeServer": false, "selectorsPollingTimeout": 5000, "defaultContentHiddenStyle": "visibility: hidden;", "defaultContentVisibleStyle": "visibility: visible;", "overrideMboxEdgeServerTimeout": 1860000, "supplementalDataIdParamTimeout": 30 } }, "modules": { "adobe-target-v2/lib/addParams.js": { "name": "add-params", "displayName": "Add Params to All Requests", "script": function(module, exports, require, turbine) { "use strict"; var _require = require("./modules/params-store"), mergeParams = _require.mergeParams; module.exports = function (settings) { mergeParams(settings.params); }; } }, "adobe-target-v2/lib/loadTarget.js": { "name": "load-target", "displayName": "Load Target", "script": function(module, exports, require, turbine) { "use strict"; /* eslint-disable import/no-extraneous-dependencies */ var win = require("@adobe/reactor-window"); var doc = require("@adobe/reactor-document"); var _require = require("./modules/load-target"), initLibrarySettings = _require.initLibrarySettings, overridePublicApi = _require.overridePublicApi; var _require2 = require("./modules/optin"), shouldUseOptIn = _require2.shouldUseOptIn, isTargetApproved = _require2.isTargetApproved; var handleRequest = require("./analyticsIntegration"); module.exports = function () { var targetSettings = initLibrarySettings(); if (!targetSettings || !targetSettings.enabled) { overridePublicApi(win); return; } var _require3 = require("./modules/libs/at-launch"), init = _require3.init; //eslint-disable-line init(win, doc, targetSettings); if (!shouldUseOptIn() || isTargetApproved()) { handleRequest(); } }; } }, "adobe-target-v2/lib/firePageLoad.js": { "name": "fire-page-load", "displayName": "Fire Page Load Request", "script": function(module, exports, require, turbine) { "use strict"; /* eslint-disable import/no-extraneous-dependencies */ var win = require("@adobe/reactor-window"); var _require = require("./modules/libs/at-launch"), initConfig = _require.initConfig, initDelivery = _require.initDelivery; var initPageLoadSettings = require("./modules/page-load"); var messages = require("./messages"); function isLibraryPresent() { return win.adobe && win.adobe.target && win.adobe.target.VERSION; } module.exports = function (settings) { var targetSettings = initPageLoadSettings(settings); if (!isLibraryPresent()) { if (win.console) { turbine.logger.warn(messages.NO_REQUEST); } return; } initConfig(targetSettings); initDelivery(); }; } }, "adobe-target-v2/lib/modules/params-store.js": { "script": function(module, exports, require, turbine) { "use strict"; var overrideProps = require("./object-override"); var params = {}; var pageLoadParams = {}; function isComplexParam(param) { if (typeof param === "undefined" || param == null) return false; return Object.prototype.hasOwnProperty.call(param, "value") && param.checked != null; } function processParams(items) { var result = {}; var keys = Object.keys(items); keys.forEach(function (key) { var param = items[key]; if (!isComplexParam(param)) { result[key] = param; return; } var checked = param.checked, value = param.value; if (checked && value === "") { return; } result[key] = value; }); return result; } function mergeParams(items) { var processedParams = processParams(items); overrideProps(params, processedParams); } function mergePageLoadParams(items) { var processedParams = processParams(items); overrideProps(pageLoadParams, processedParams); } function getParams() { return params; } function getPageLoadParams() { return pageLoadParams; } module.exports = { mergeParams: mergeParams, mergePageLoadParams: mergePageLoadParams, getParams: getParams, getPageLoadParams: getPageLoadParams }; } }, "adobe-target-v2/lib/modules/object-override.js": { "script": function(module, exports, require, turbine) { "use strict"; function overrideProp(overriden, overriding, field, undef) { if (overriding[field] !== undef) { overriden[field] = overriding[field]; //eslint-disable-line } } function subsetFilter(key) { if (Array.isArray(this.subset)) { return this.subset.indexOf(key) !== -1; } return true; } module.exports = function (overriden, overriding, subset) { Object.keys(overriding).filter(subsetFilter, { subset: subset }).forEach(function (key) { overrideProp(overriden, overriding, key); }); }; } }, "adobe-target-v2/lib/modules/load-target.js": { "script": function(module, exports, require, turbine) { "use strict"; /* eslint-disable import/no-extraneous-dependencies */ var win = require("@adobe/reactor-window"); var doc = require("@adobe/reactor-document"); var Promise = require("@adobe/reactor-promise"); var messages = require("../messages"); var _require = require("./params-store"), getParams = _require.getParams, getPageLoadParams = _require.getPageLoadParams; var _require2 = require("../targetSettings"), targetSettings = _require2.targetSettings; var overrideProps = require("./object-override"); var _require3 = require("../librarySettings"), TARGET_DEFAULT_SETTINGS = _require3.TARGET_DEFAULT_SETTINGS; var OVERRIDABLE_SETTINGS = ["enabled", "clientCode", "imsOrgId", "serverDomain", "cookieDomain", "timeout", "defaultContentHiddenStyle", "defaultContentVisibleStyle", "bodyHiddenStyle", "bodyHidingEnabled", "selectorsPollingTimeout", "visitorApiTimeout", "overrideMboxEdgeServer", "overrideMboxEdgeServerTimeout", "optoutEnabled", "optinEnabled", "secureOnly", "supplementalDataIdParamTimeout", "authoringScriptUrl", "urlSizeLimit", "endpoint", "pageLoadEnabled", "viewsEnabled", "analyticsLogging", "serverState", "globalMboxName", "decisioningMethod"]; function isStandardMode(document) { var compatMode = document.compatMode, documentMode = document.documentMode; var standardMode = compatMode && compatMode === "CSS1Compat"; var ie9OrModernBrowser = documentMode ? documentMode >= 9 : true; return standardMode && ie9OrModernBrowser; } function overridePublicApi(window) { /* eslint-disable no-param-reassign */ var noop = function noop() {}; var noopPromise = function noopPromise() { return Promise.resolve(); }; window.adobe = window.adobe || {}; window.adobe.target = { VERSION: "", event: {}, getOffer: noop, getOffers: noopPromise, applyOffer: noop, applyOffers: noopPromise, sendNotifications: noop, trackEvent: noop, triggerView: noop, registerExtension: noop, init: noop }; window.mboxCreate = noop; window.mboxDefine = noop; window.mboxUpdate = noop; /* eslint-disable no-param-reassign */ } function isLibraryPresent() { return win.adobe && win.adobe.target && typeof win.adobe.target.getOffer !== "undefined"; } function initLibrarySettings() { if (isLibraryPresent()) { turbine.logger.warn(messages.ALREADY_INITIALIZED); return null; } targetSettings.mboxParams = getParams(); targetSettings.globalMboxParams = getPageLoadParams(); overrideProps(targetSettings, win.targetGlobalSettings || {}, OVERRIDABLE_SETTINGS); overrideProps(targetSettings, TARGET_DEFAULT_SETTINGS || {}, ["version"]); if (!isStandardMode(doc)) { targetSettings.enabled = false; turbine.logger.warn(messages.DELIVERY_DISABLED); } return targetSettings; } module.exports = { initLibrarySettings: initLibrarySettings, overridePublicApi: overridePublicApi }; } }, "adobe-target-v2/lib/modules/optin.js": { "script": function(module, exports, require, turbine) { "use strict"; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /* eslint-disable import/no-extraneous-dependencies */ var win = require("@adobe/reactor-window"); var ADOBE = win.adobe; var IS_APPROVED = "isApproved"; var OPTIN_ENABLED = "optinEnabled"; var OPT_IN = "optIn"; var FETCH_PERMISSIONS = "fetchPermissions"; var CATEGORIES = "Categories"; var TARGET = "TARGET"; var _require = require("../targetSettings"), targetSettings = _require.targetSettings; function isNil(value) { var type = typeof value === "undefined" ? "undefined" : _typeof(value); return type === "undefined" || value === null; } function isFunction(value) { var type = typeof value === "undefined" ? "undefined" : _typeof(value); return value !== null && (type === "object" || type === "function"); } function isOptInAPIAvailable(optIn) { return isFunction(optIn[FETCH_PERMISSIONS]) && isFunction(optIn[IS_APPROVED]); } function optInEnabled(adobe, optedInEnabled) { if (!optedInEnabled) { return false; } if (isNil(adobe)) { return false; } if (isNil(adobe[OPT_IN])) { return false; } return isOptInAPIAvailable(adobe[OPT_IN]); } function isCategoryOptedIn(optInApi, category) { return optInApi[IS_APPROVED](category); } function isTargetApproved() { var optInApi = ADOBE[OPT_IN]; var targetCategory = optInApi[CATEGORIES][TARGET]; return isCategoryOptedIn(optInApi, targetCategory); } function shouldUseOptIn() { var optedInEnabled = targetSettings[OPTIN_ENABLED]; return optInEnabled(ADOBE, optedInEnabled); } module.exports = { shouldUseOptIn: shouldUseOptIn, isTargetApproved: isTargetApproved }; } }, "adobe-target-v2/lib/analyticsIntegration.js": { "script": function(module, exports, require, turbine) { "use strict"; /* eslint-disable import/no-extraneous-dependencies */ var doc = require("@adobe/reactor-document"); var Promise = require("@adobe/reactor-promise"); var _require = require("./modules/event-util"), addEventListener = _require.addEventListener, removeEventListener = _require.removeEventListener; var _require2 = require("./targetSettings"), extensionSettings = _require2.extensionSettings; var augmentTracker = turbine.getSharedModule("adobe-analytics", "augment-tracker"); var REQUEST_SUCCEEDED = "at-request-succeeded"; var REQUEST_FAILED = "at-request-failed"; function handleTracker(tracker, promise) { return new Promise(function (resolve) { if (!tracker) { resolve(); return; } promise.then(function (abortPromise) { if (abortPromise) { tracker.abort = true; } resolve(); }); }); } function requestHandler(func) { if (!func) { return; } var promise = new Promise(function (resolve) { var timerId = setTimeout(function () { resolve(false); }, extensionSettings.targetSettings.timeout); var requestSuccess = function requestSuccess(e) { if (e.detail && e.detail.redirect === true) { resolve(true); } else { resolve(false); } clearTimeout(timerId); removeEventListener(doc, e, requestSuccess); }; var requestFail = function requestFail(e) { resolve(false); clearTimeout(timerId); removeEventListener(doc, e, requestFail); }; addEventListener(doc, REQUEST_SUCCEEDED, requestSuccess); addEventListener(doc, REQUEST_FAILED, requestFail); }); func(function (tracker) { return handleTracker(tracker, promise); }); } module.exports = function () { requestHandler(augmentTracker); }; } }, "adobe-target-v2/lib/modules/libs/at-launch.js": { "script": function(module, exports, require, turbine) { /** * @license * at.js 2.5.0 | (c) Adobe Systems Incorporated | All rights reserved * zepto.js | (c) 2010-2016 Thomas Fuchs | zeptojs.com/license */ "use strict"; var define; function _interopDefault(ex) { return ex && typeof ex === "object" && "default" in ex ? ex["default"] : ex; } var assign = _interopDefault(require("@adobe/reactor-object-assign")); var cookie = _interopDefault(require("@adobe/reactor-cookie")); var queryString = _interopDefault(require("@adobe/reactor-query-string")); var Promise$1 = _interopDefault(require("@adobe/reactor-promise")); var loadScript = _interopDefault(require("@adobe/reactor-load-script")); function isNil(value) { return value == null; } var isArray = Array.isArray; var objectProto = Object.prototype; var nativeObjectToString = objectProto.toString; function objectToString(value) { return nativeObjectToString.call(value); } function baseGetTag(value) { return objectToString(value); } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function(obj) { return typeof obj; }; } else { _typeof = function(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function isObject(value) { var type = _typeof(value); var notNull = value != null; return notNull && (type === "object" || type === "function"); } var funcTag = "[object Function]"; function isFunction(value) { if (!isObject(value)) { return false; } return baseGetTag(value) === funcTag; } function identity(value) { return value; } function castFunction(value) { return isFunction(value) ? value : identity; } function keys(object) { if (isNil(object)) { return []; } return Object.keys(object); } var arrayEach = function arrayEach(iteratee, collection) { return collection.forEach(iteratee); }; var baseEach = function baseEach(iteratee, collection) { arrayEach(function(key) { return iteratee(collection[key], key); }, keys(collection)); }; var arrayFilter = function arrayFilter(predicate, collection) { return collection.filter(predicate); }; var baseFilter = function baseFilter(predicate, collection) { var result = {}; baseEach(function(value, key) { if (predicate(value, key)) { result[key] = value; } }, collection); return result; }; function filter(predicate, collection) { if (isNil(collection)) { return []; } var func = isArray(collection) ? arrayFilter : baseFilter; return func(castFunction(predicate), collection); } function first(array) { return array && array.length ? array[0] : undefined; } function flatten(array) { if (isNil(array)) { return []; } return [].concat.apply([], array); } function flow(funcs) { var _this = this; var length = funcs ? funcs.length : 0; var index = length; while ((index -= 1)) { if (!isFunction(funcs[index])) { throw new TypeError("Expected a function"); } } return function() { var i = 0; for ( var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++ ) { args[_key] = arguments[_key]; } var result = length ? funcs[i].apply(_this, args) : args[0]; while ((i += 1) < length) { result = funcs[i].call(_this, result); } return result; }; } function forEach(iteratee, collection) { if (isNil(collection)) { return; } var func = isArray(collection) ? arrayEach : baseEach; func(castFunction(iteratee), collection); } function isObjectLike(value) { var notNull = value != null; return notNull && _typeof(value) === "object"; } var stringTag = "[object String]"; function isString(value) { return ( typeof value === "string" || (!isArray(value) && isObjectLike(value) && baseGetTag(value) === stringTag) ); } function hash(string) { if (!isString(string)) { return -1; } var result = 0; var length = string.length; for (var i = 0; i < length; i += 1) { result = ((result << 5) - result + string.charCodeAt(i)) & 0xffffffff; } return result; } var MAX_SAFE_INTEGER = 9007199254740991; function isLength(value) { return ( typeof value === "number" && value > -1 && value % 1 === 0 && value <= MAX_SAFE_INTEGER ); } function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } var arrayMap = function arrayMap(iteratee, collection) { return collection.map(iteratee); }; function baseValues(props, object) { return arrayMap(function(key) { return object[key]; }, props); } function copyArray(source) { var index = 0; var length = source.length; var array = Array(length); while (index < length) { array[index] = source[index]; index += 1; } return array; } function stringToArray(str) { return str.split(""); } function toArray(value) { if (isNil(value)) { return []; } if (isArrayLike(value)) { return isString(value) ? stringToArray(value) : copyArray(value); } return baseValues(keys(value), value); } var objectProto$1 = Object.prototype; var hasOwnProperty = objectProto$1.hasOwnProperty; function isEmpty(value) { if (value == null) { return true; } if ( isArrayLike(value) && (isArray(value) || isString(value) || isFunction(value.splice)) ) { return !value.length; } for (var key in value) { if (hasOwnProperty.call(value, key)) { return false; } } return true; } var stringProto = String.prototype; var nativeStringTrim = stringProto.trim; function trim(string) { return isNil(string) ? "" : nativeStringTrim.call(string); } function isBlank(value) { return isString(value) ? !trim(value) : isEmpty(value); } var isNotBlank = function isNotBlank(value) { return !isBlank(value); }; var numberTag = "[object Number]"; function isNumber(value) { return ( typeof value === "number" || (isObjectLike(value) && baseGetTag(value) === numberTag) ); } var objectTag = "[object Object]"; var funcProto = Function.prototype; var objectProto$2 = Object.prototype; var funcToString = funcProto.toString; var hasOwnProperty$1 = objectProto$2.hasOwnProperty; var objectCtorString = funcToString.call(Object); function getPrototype(value) { return Object.getPrototypeOf(Object(value)); } function isPlainObject(value) { if (!isObjectLike(value) || baseGetTag(value) !== objectTag) { return false; } var proto = getPrototype(value); if (proto === null) { return true; } var Ctor = hasOwnProperty$1.call(proto, "constructor") && proto.constructor; return ( typeof Ctor === "function" && Ctor instanceof Ctor && funcToString.call(Ctor) === objectCtorString ); } function join(joiner, collection) { if (!isArray(collection)) { return ""; } return collection.join(joiner || ""); } var baseMap = function baseMap(iteratee, collection) { var result = {}; baseEach(function(value, key) { result[key] = iteratee(value, key); }, collection); return result; }; function map(iteratee, collection) { if (isNil(collection)) { return []; } var func = isArray(collection) ? arrayMap : baseMap; return func(castFunction(iteratee), collection); } function now() { return new Date().getTime(); } var arrayReduce = function arrayReduce(iteratee, accumulator, collection) { return collection.reduce(iteratee, accumulator); }; var baseReduce = function baseReduce(iteratee, accumulator, collection) { var localAcc = accumulator; baseEach(function(value, key) { localAcc = iteratee(localAcc, value, key); }, collection); return localAcc; }; function reduce(iteratee, accumulator, collection) { if (isNil(collection)) { return accumulator; } var func = isArray(collection) ? arrayReduce : baseReduce; return func(castFunction(iteratee), accumulator, collection); } var arrayProto = Array.prototype; var nativeReverse = arrayProto.reverse; function reverse(array) { return array == null ? array : nativeReverse.call(array); } function split(separator, string) { if (isBlank(string)) { return []; } return string.split(separator || ""); } function random(lower, upper) { return lower + Math.floor(Math.random() * (upper - lower + 1)); } function uuid() { var d = now(); return "xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g, function(c) { var r = (d + random(0, 16)) % 16 | 0; d = Math.floor(d / 16); return (c === "x" ? r : (r & 0x3) | 0x8).toString(16); }); } function delay(func) { var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; return setTimeout(func, Number(wait) || 0); } function cancelDelay(id) { clearTimeout(id); } var DECISIONING_METHOD = { ON_DEVICE: "on-device", SERVER_SIDE: "server-side", HYBRID: "hybrid" }; var noop = function noop() { return undefined; }; var noopPromise = function noopPromise(value) { return Promise.resolve(value); }; var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; function createCommonjsModule(fn, module) { return (module = { exports: {} }), fn(module, module.exports), module.exports; } var performanceNow = createCommonjsModule(function(module) { (function() { var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime; if ( typeof performance !== "undefined" && performance !== null && performance.now ) { module.exports = function() { return performance.now(); }; } else if ( typeof process !== "undefined" && process !== null && process.hrtime ) { module.exports = function() { return (getNanoSeconds() - nodeLoadTime) / 1e6; }; hrtime = process.hrtime; getNanoSeconds = function getNanoSeconds() { var hr; hr = hrtime(); return hr[0] * 1e9 + hr[1]; }; moduleLoadTime = getNanoSeconds(); upTime = process.uptime() * 1e9; nodeLoadTime = moduleLoadTime - upTime; } else if (Date.now) { module.exports = function() { return Date.now() - loadTime; }; loadTime = Date.now(); } else { module.exports = function() { return new Date().getTime() - loadTime; }; loadTime = new Date().getTime(); } }.call(commonjsGlobal)); }); function parseURI(str, opts) { if (!str) return undefined; opts = opts || {}; var o = { key: [ "source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor" ], q: { name: "queryKey", parser: /(?:^|&)([^&=]*)=?([^&]*)/g }, parser: { strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ } }; var m = o.parser[opts.strictMode ? "strict" : "loose"].exec(str); var uri = {}; var i = 14; while (i--) { uri[o.key[i]] = m[i] || ""; } uri[o.q.name] = {}; uri[o.key[12]].replace(o.q.parser, function($0, $1, $2) { if ($1) uri[o.q.name][$1] = $2; }); return uri; } var parseUri = parseURI; var TYPE = "type"; var CONTENT = "content"; var HEIGHT = "height"; var WIDTH = "width"; var LEFT = "left"; var TOP = "top"; var FROM = "from"; var TO = "to"; var PRIORITY = "priority"; var SELECTOR = "selector"; var CSS_SELECTOR = "cssSelector"; var SET_HTML = "setHtml"; var SET_CONTENT = "setContent"; var SET_TEXT = "setText"; var SET_JSON = "setJson"; var SET_ATTRIBUTE = "setAttribute"; var SET_IMAGE_SOURCE = "setImageSource"; var SET_STYLE = "setStyle"; var REARRANGE = "rearrange"; var RESIZE = "resize"; var MOVE = "move"; var REMOVE = "remove"; var CUSTOM_CODE = "customCode"; var REDIRECT = "redirect"; var TRACK_CLICK = "trackClick"; var SIGNAL_CLICK = "signalClick"; var INSERT_BEFORE = "insertBefore"; var INSERT_AFTER = "insertAfter"; var APPEND_HTML = "appendHtml"; var APPEND_CONTENT = "appendContent"; var PREPEND_HTML = "prependHtml"; var PREPEND_CONTENT = "prependContent"; var REPLACE_HTML = "replaceHtml"; var REPLACE_CONTENT = "replaceContent"; var DEBUG = "mboxDebug"; var DISABLE = "mboxDisable"; var AUTHORING = "mboxEdit"; var CHECK = "at_check"; var TRUE = "true"; var MBOX_LENGTH = 250; var DATA_SRC = "data-at-src"; var JSON$1 = "json"; var HTML = "html"; var DYNAMIC = "dynamic"; var SCRIPT = "script"; var SRC = "src"; var ID = "id"; var CLASS = "class"; var CLICK = "click"; var HEAD_TAG = "head"; var SCRIPT_TAG = "script"; var STYLE_TAG = "style"; var LINK_TAG = "link"; var IMAGE_TAG = "img"; var DIV_TAG = "div"; var DELIVERY_DISABLED = 'Adobe Target content delivery is disabled. Ensure that you can save cookies to your current domain, there is no "mboxDisable" cookie and there is no "mboxDisable" parameter in query string.'; var ALREADY_INITIALIZED = "Adobe Target has already been initialized."; var OPTIONS_REQUIRED = "options argument is required"; var REQUEST_REQUIRED = "request option is required"; var RESPONE_REQUIRED = "response option is required"; var EXECUTE_OR_PREFETCH_REQUIRED = "execute or prefetch is required"; var EXECUTE_OR_PREFETCH_NOT_ALLOWED = "execute or prefetch is not allowed"; var NOTIFICATIONS_REQUIRED = "notifications are required"; var MBOX_REQUIRED = "mbox option is required"; var MBOX_TOO_LONG = "mbox option is too long"; var SUCCESS_REQUIRED = "success option is required"; var ERROR_REQUIRED = "error option is required"; var OFFER_REQUIRED = "offer option is required"; var UNEXPECTED_ERROR = "Unexpected error"; var REQUEST_FAILED = "request failed"; var REQUEST_SUCCEEDED = "request succeeded"; var ACTION_RENDERED = "Action rendered successfully"; var ACTION_RENDERING = "Rendering action"; var EMPTY_CONTENT = "Action has no content"; var EMPTY_ATTRIBUTE = "Action has no attributes"; var EMPTY_PROPERTY = "Action has no CSS properties"; var EMPTY_SIZES = "Action has no height or width"; var EMPTY_COORDINATES = "Action has no left, top or position"; var EMPTY_REARRANGE = "Action has no from or to"; var EMPTY_URL = "Action has no url"; var EMPTY_IMAGE_URL = "Action has no image url"; var REARRANGE_MISSING = "Rearrange elements are missing"; var LOADING_IMAGE = "Loading image"; var TRACK_EVENT_SUCCESS = "Track event request succeeded"; var TRACK_EVENT_ERROR = "Track event request failed"; var NO_ACTIONS = "No actions to be rendered"; var REDIRECT_ACTION = "Redirect action"; var REMOTE_SCRIPT = "Script load"; var ERROR = "error"; var WARNING = "warning"; var UNKNOWN = "unknown"; var VALID = "valid"; var SUCCESS = "success"; var RENDER = "render"; var METRIC = "metric"; var MBOX = "mbox"; var OFFER = "offer"; var NAME = "name"; var STATUS = "status"; var PARAMS = "params"; var ACTIONS = "actions"; var RESPONSE_TOKENS = "responseTokens"; var DATA = "data"; var RESPONSE = "response"; var REQUEST = "request"; var PROVIDER = "provider"; var PAGE_LOAD = "pageLoad"; var FLICKER_CONTROL_CLASS = "at-flicker-control"; var MARKER_CSS_CLASS = "at-element-marker"; var CLICK_TRACKING_CSS_CLASS = "at-element-click-tracking"; var ENABLED = "enabled"; var CLIENT_CODE = "clientCode"; var IMS_ORG_ID = "imsOrgId"; var SERVER_DOMAIN = "serverDomain"; var TIMEOUT = "timeout"; var GLOBAL_MBOX_NAME = "globalMboxName"; var GLOBAL_MBOX_AUTO_CREATE = "globalMboxAutoCreate"; var VERSION = "version"; var DEFAULT_CONTENT_HIDDEN_STYLE = "defaultContentHiddenStyle"; var DEFAULT_CONTENT_VISIBLE_STYLE = "defaultContentVisibleStyle"; var BODY_HIDDEN_STYLE = "bodyHiddenStyle"; var BODY_HIDING_ENABLED = "bodyHidingEnabled"; var DEVICE_ID_LIFETIME = "deviceIdLifetime"; var SESSION_ID_LIFETIME = "sessionIdLifetime"; var SELECTORS_POLLING_TIMEOUT = "selectorsPollingTimeout"; var VISITOR_API_TIMEOUT = "visitorApiTimeout"; var OVERRIDE_MBOX_EDGE_SERVER = "overrideMboxEdgeServer"; var OVERRIDE_MBOX_EDGE_SERVER_TIMEOUT = "overrideMboxEdgeServerTimeout"; var OPTOUT_ENABLED = "optoutEnabled"; var SECURE_ONLY = "secureOnly"; var SUPPLEMENTAL_DATA_ID_PARAM_TIMEOUT = "supplementalDataIdParamTimeout"; var AUTHORING_SCRIPT_URL = "authoringScriptUrl"; var SCHEME = "scheme"; var COOKIE_DOMAIN = "cookieDomain"; var MBOX_PARAMS = "mboxParams"; var GLOBAL_MBOX_PARAMS = "globalMboxParams"; var URL_SIZE_LIMIT = "urlSizeLimit"; var SESSION_ID_PARAM = "mboxSession"; var DEVICE_ID_COOKIE = "PC"; var EDGE_CLUSTER_COOKIE = "mboxEdgeCluster"; var SESSION_ID_COOKIE = "session"; var TRACES_SUFFIX = "Traces"; var SETTINGS = "settings"; var CLIENT_TRACES = "client" + TRACES_SUFFIX; var SERVER_TRACES = "server" + TRACES_SUFFIX; var TRACES = "___target_traces"; var GLOBAL_SETTINGS = "targetGlobalSettings"; var DATA_PROVIDER = "dataProvider"; var DATA_PROVIDERS = DATA_PROVIDER + "s"; var ENDPOINT = "endpoint"; var VIEWS_ENABLED = "viewsEnabled"; var PAGE_LOAD_ENABLED = "pageLoadEnabled"; var AUTH_STATE = "authState"; var AUTHENTICATED_STATE = "authenticatedState"; var INTEGRATION_CODE = "integrationCode"; var PRIMARY = "primary"; var PAGE = "page"; var VIEW = "view"; var VIEWS = "views"; var OPTIONS = "options"; var METRICS = "metrics"; var VIEW_NAME = "viewName"; var DISPLAY_EVENT = "display"; var CONTENT_TYPE = "Content-Type"; var TEXT_PLAIN = "text/plain"; var RENDERING_VIEW_FAILED = "View rendering failed"; var VIEW_DELIVERY_ERROR = "View delivery error"; var VIEW_NAME_ERROR = "View name should be a non-empty string"; var PAGE_LOAD_DISABLED = "Page load disabled"; var USING_SERVER_STATE = "Using server state"; var ADOBE = "adobe"; var OPTIN = "optIn"; var IS_APPROVED = "isApproved"; var FETCH_PERMISSIONS = "fetchPermissions"; var CATEGORIES = "Categories"; var TARGET = "TARGET"; var ANALYTICS = "ANALYTICS"; var OPTIN_ENABLED = "optinEnabled"; var ERROR_TARGET_NOT_OPTED_IN = "Adobe Target is not opted in"; var ANALYTICS_LOGGING = "analyticsLogging"; var SERVER_STATE = "serverState"; var CSP_SCRIPT_NONCE = "cspScriptNonce"; var CSP_STYLE_NONCE = "cspStyleNonce"; var CACHE_UPDATED_EVENT = "cache-updated-event"; var NO_OFFERS_EVENT = "no-offers-event"; var REDIRECT_OFFER_EVENT = "redirect-offer-event"; var DECISIONING_METHOD_SETTING = "decisioningMethod"; var POLLING_INTERVAL_SETTING = "pollingInterval"; var ARTIFACT_LOCATION_SETTING = "artifactLocation"; var ARTIFACT_FORMAT_SETTING = "artifactFormat"; var ARTIFACT_PAYLOAD_SETTING = "artifactPayload"; var TARGET_ENVIRONMENT_SETTING = "environment"; var CDN_ENVIRONMENT_SETTING = "cdnEnvironment"; var TELEMETRY_ENABLED_SETTING = "telemetryEnabled"; var CDN_BASEPATH_SETTING = "cdnBasePath"; var WEB_CHANNEL = "web"; var FILE_PROTOCOL = "file:"; var IP_V4_REGEX = /^(?!0)(?!.*\.$)((1?\d?\d|25[0-5]|2[0-4]\d)(\.|$)){4}$/; var STANDARD_DOMAIN_REGEX = /^(com|edu|gov|net|mil|org|nom|co|name|info|biz)$/i; var config = {}; var OVERRIDABLE_SETTINGS = [ ENABLED, CLIENT_CODE, IMS_ORG_ID, SERVER_DOMAIN, COOKIE_DOMAIN, TIMEOUT, MBOX_PARAMS, GLOBAL_MBOX_PARAMS, DEFAULT_CONTENT_HIDDEN_STYLE, DEFAULT_CONTENT_VISIBLE_STYLE, DEVICE_ID_LIFETIME, BODY_HIDDEN_STYLE, BODY_HIDING_ENABLED, SELECTORS_POLLING_TIMEOUT, VISITOR_API_TIMEOUT, OVERRIDE_MBOX_EDGE_SERVER, OVERRIDE_MBOX_EDGE_SERVER_TIMEOUT, OPTOUT_ENABLED, OPTIN_ENABLED, SECURE_ONLY, SUPPLEMENTAL_DATA_ID_PARAM_TIMEOUT, AUTHORING_SCRIPT_URL, URL_SIZE_LIMIT, ENDPOINT, PAGE_LOAD_ENABLED, VIEWS_ENABLED, ANALYTICS_LOGGING, SERVER_STATE, DECISIONING_METHOD_SETTING, POLLING_INTERVAL_SETTING, ARTIFACT_LOCATION_SETTING, ARTIFACT_FORMAT_SETTING, ARTIFACT_PAYLOAD_SETTING, TARGET_ENVIRONMENT_SETTING, CDN_ENVIRONMENT_SETTING, TELEMETRY_ENABLED_SETTING, CDN_BASEPATH_SETTING, CSP_SCRIPT_NONCE, CSP_STYLE_NONCE, GLOBAL_MBOX_NAME ]; function overrideSettingsIfRequired(settings, globalSettings) { if (!settings[ENABLED]) { return; } if (!isNil(globalSettings[GLOBAL_MBOX_AUTO_CREATE])) { settings[PAGE_LOAD_ENABLED] = globalSettings[GLOBAL_MBOX_AUTO_CREATE]; } forEach(function(field) { if (!isNil(globalSettings[field])) { settings[field] = globalSettings[field]; } }, OVERRIDABLE_SETTINGS); } function isIE10OrModernBrowser(doc) { var documentMode = doc.documentMode; return documentMode ? documentMode >= 10 : true; } function isStandardMode(doc) { var compatMode = doc.compatMode; return compatMode && compatMode === "CSS1Compat"; } function isIPv4(domain) { return IP_V4_REGEX.test(domain); } function getCookieDomain(domain) { if (isIPv4(domain)) { return domain; } var parts = reverse(split(".", domain)); var len = parts.length; if (len >= 3) { if (STANDARD_DOMAIN_REGEX.test(parts[1])) { return parts[2] + "." + parts[1] + "." + parts[0]; } } if (len === 1) { return parts[0]; } return parts[1] + "." + parts[0]; } function overrideFromGlobalSettings(win, doc, settings) { var fileProtocol = win.location.protocol === FILE_PROTOCOL; var cookieDomain = ""; if (!fileProtocol) { cookieDomain = getCookieDomain(win.location.hostname); } settings[COOKIE_DOMAIN] = cookieDomain; settings[ENABLED] = isStandardMode(doc) && isIE10OrModernBrowser(doc); overrideSettingsIfRequired(settings, win[GLOBAL_SETTINGS] || {}); } function initConfig(settings) { overrideFromGlobalSettings(window, document, settings); var fileProtocol = window.location.protocol === FILE_PROTOCOL; config = assign({}, settings); config[DEVICE_ID_LIFETIME] = settings[DEVICE_ID_LIFETIME] / 1000; config[SESSION_ID_LIFETIME] = settings[SESSION_ID_LIFETIME] / 1000; config[SCHEME] = config[SECURE_ONLY] || fileProtocol ? "https:" : ""; } function getConfig() { return config; } var parse = queryString.parse, stringify = queryString.stringify; var ANCHOR = document.createElement("a"); var CACHE = {}; function parseQueryString(value) { try { return parse(value); } catch (e) { return {}; } } function stringifyQueryString(value) { try { return stringify(value); } catch (e) { return ""; } } function decode(value) { try { return decodeURIComponent(value); } catch (e) { return value; } } function encode(value) { try { return encodeURIComponent(value); } catch (e) { return value; } } function parseUri$1(url) { if (CACHE[url]) { return CACHE[url]; } ANCHOR.href = url; var parsedUri = parseUri(ANCHOR.href); parsedUri.queryKey = parseQueryString(parsedUri.query); CACHE[url] = parsedUri; return CACHE[url]; } var getCookie = cookie.get, setCookie = cookie.set, removeCookie = cookie.remove; var MBOX_COOKIE = "mbox"; function createCookie(name, value, expires) { return { name: name, value: value, expires: expires }; } function deserialize(str) { var parts = split("#", str); if (isEmpty(parts) || parts.length < 3) { return null; } if (isNaN(parseInt(parts[2], 10))) { return null; } return createCookie(decode(parts[0]), decode(parts[1]), Number(parts[2])); } function getInternalCookies(cookieValue) { if (isBlank(cookieValue)) { return []; } return split("|", cookieValue); } function readCookies() { var cookies = map(deserialize, getInternalCookies(getCookie(MBOX_COOKIE))); var nowInSeconds = Math.ceil(now() / 1000); var isExpired = function isExpired(val) { return isObject(val) && nowInSeconds <= val.expires; }; return reduce( function(acc, val) { acc[val.name] = val; return acc; }, {}, filter(isExpired, cookies) ); } function getTargetCookie(name) { var cookiesMap = readCookies(); var cookie = cookiesMap[name]; return isObject(cookie) ? cookie.value : ""; } function serialize(cookie) { return join("#", [encode(cookie.name), encode(cookie.value), cookie.expires]); } function getExpires(cookie) { return cookie.expires; } function getMaxExpires(cookies) { var expires = map(getExpires, cookies); return Math.max.apply(null, expires); } function saveCookies(cookiesMap, domain) { var cookies = toArray(cookiesMap); var maxExpires = Math.abs(getMaxExpires(cookies) * 1000 - now()); var serializedCookies = join("|", map(serialize, cookies)); var expires = new Date(now() + maxExpires); setCookie(MBOX_COOKIE, serializedCookies, { domain: domain, expires: expires }); } function setTargetCookie(options) { var name = options.name, value = options.value, expires = options.expires, domain = options.domain; var cookiesMap = readCookies(); cookiesMap[name] = createCookie( name, value, Math.ceil(expires + now() / 1000) ); saveCookies(cookiesMap, domain); } function isCookiePresent(name) { return isNotBlank(getCookie(name)); } function isParamPresent(win, name) { var location = win.location; var search = location.search; var params = parseQueryString(search); return isNotBlank(params[name]); } function isRefParamPresent(doc, name) { var referrer = doc.referrer; var parsedUri = parseUri$1(referrer); var refParams = parsedUri.queryKey; return isNil(refParams) ? false : isNotBlank(refParams[name]); } function exists(win, doc, name) { return ( isCookiePresent(name) || isParamPresent(win, name) || isRefParamPresent(doc, name) ); } function isCookieEnabled() { var config = getConfig(); var cookieDomain = config[COOKIE_DOMAIN]; setCookie(CHECK, TRUE, { domain: cookieDomain }); var result = getCookie(CHECK) === TRUE; removeCookie(CHECK); return result; } function isDeliveryDisabled() { return exists(window, document, DISABLE); } function isDeliveryEnabled() { var config = getConfig(); var enabled = config[ENABLED]; return enabled && isCookieEnabled() && !isDeliveryDisabled(); } function isDebugEnabled() { return exists(window, document, DEBUG); } function isAuthoringEnabled() { return exists(window, document, AUTHORING); } var ADOBE_TARGET_PREFIX = "AT:"; function exists$1(win, method) { var console = win.console; return !isNil(console) && isFunction(console[method]); } function warn(win, args) { var console = win.console; if (!exists$1(win, "warn")) { return; } console.warn.apply(console, [ADOBE_TARGET_PREFIX].concat(args)); } function debug(win, args) { var console = win.console; if (!exists$1(win, "debug")) { return; } if (isDebugEnabled()) { console.debug.apply(console, [ADOBE_TARGET_PREFIX].concat(args)); } } function logWarn() { for ( var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++ ) { args[_key] = arguments[_key]; } warn(window, args); } function logDebug() { for ( var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++ ) { args[_key2] = arguments[_key2]; } debug(window, args); } var TRACES_FORMAT_VERSION = "1"; function getSettings(config) { return reduce( function(acc, key) { acc[key] = config[key]; return acc; }, {}, OVERRIDABLE_SETTINGS ); } function initialize(win, config, debugEnabled) { var result = win[TRACES] || []; win[TRACES] = result; if (!debugEnabled) { return; } var oldPush = result.push; result[VERSION] = TRACES_FORMAT_VERSION; result[SETTINGS] = getSettings(config); result[CLIENT_TRACES] = []; result[SERVER_TRACES] = []; result.push = function push(trace) { result[SERVER_TRACES].push( assign( { timestamp: now() }, trace ) ); oldPush.call(this, trace); }; } function saveTrace(win, namespace, trace, debugEnabled) { if (namespace === SERVER_TRACES) { win[TRACES].push(trace); } if (!debugEnabled) { return; } if (namespace !== SERVER_TRACES) { win[TRACES][namespace].push( assign( { timestamp: now() }, trace ) ); } } function initTraces() { initialize(window, getConfig(), isDebugEnabled()); } function addServerTrace(trace) { saveTrace(window, SERVER_TRACES, trace, isDebugEnabled()); } function addClientTrace(trace) { saveTrace(window, CLIENT_TRACES, trace, isDebugEnabled()); } var $ = (function(window) { var Zepto = (function() { var undefined$1, key, $, classList, emptyArray = [], _concat = emptyArray.concat, _filter = emptyArray.filter, _slice = emptyArray.slice, document = window.document, elementDisplay = {}, classCache = {}, cssNumber = { "column-count": 1, columns: 1, "font-weight": 1, "line-height": 1, opacity: 1, "z-index": 1, zoom: 1 }, fragmentRE = /^\s*<(\w+|!)[^>]*>/, singleTagRE = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, rootNodeRE = /^(?:body|html)$/i, capitalRE = /([A-Z])/g, methodAttributes = [ "val", "css", "html", "text", "data", "width", "height", "offset" ], adjacencyOperators = ["after", "prepend", "before", "append"], table = document.createElement("table"), tableRow = document.createElement("tr"), containers = { tr: document.createElement("tbody"), tbody: table, thead: table, tfoot: table, td: tableRow, th: tableRow, "*": document.createElement("div") }, readyRE = /complete|loaded|interactive/, simpleSelectorRE = /^[\w-]*$/, class2type = {}, toString = class2type.toString, zepto = {}, camelize, uniq, tempParent = document.createElement("div"), propMap = { tabindex: "tabIndex", readonly: "readOnly", for: "htmlFor", class: "className", maxlength: "maxLength", cellspacing: "cellSpacing", cellpadding: "cellPadding", rowspan: "rowSpan", colspan: "colSpan", usemap: "useMap", frameborder: "frameBorder", contenteditable: "contentEditable" }, isArray = Array.isArray || function(object) { return object instanceof Array; }; zepto.matches = function(element, selector) { if (!selector || !element || element.nodeType !== 1) return false; var matchesSelector = element.matches || element.webkitMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector || element.matchesSelector; if (matchesSelector) return matchesSelector.call(element, selector); var match, parent = element.parentNode, temp = !parent; if (temp) (parent = tempParent).appendChild(element); match = ~zepto.qsa(parent, selector).indexOf(element); temp && tempParent.removeChild(element); return match; }; function type(obj) { return obj == null ? String(obj) : class2type[toString.call(obj)] || "object"; } function isFunction(value) { return type(value) == "function"; } function isWindow(obj) { return obj != null && obj == obj.window; } function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE; } function isObject(obj) { return type(obj) == "object"; } function isPlainObject(obj) { return ( isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype ); } function likeArray(obj) { var length = !!obj && "length" in obj && obj.length, type = $.type(obj); return ( "function" != type && !isWindow(obj) && ("array" == type || length === 0 || (typeof length == "number" && length > 0 && length - 1 in obj)) ); } function compact(array) { return _filter.call(array, function(item) { return item != null; }); } function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array; } camelize = function camelize(str) { return str.replace(/-+(.)?/g, function(match, chr) { return chr ? chr.toUpperCase() : ""; }); }; function dasherize(str) { return str .replace(/::/g, "/") .replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2") .replace(/([a-z\d])([A-Z])/g, "$1_$2") .replace(/_/g, "-") .toLowerCase(); } uniq = function uniq(array) { return _filter.call(array, function(item, idx) { return array.indexOf(item) == idx; }); }; function classRE(name) { return name in classCache ? classCache[name] : (classCache[name] = new RegExp("(^|\\s)" + name + "(\\s|$)")); } function maybeAddPx(name, value) { return typeof value == "number" && !cssNumber[dasherize(name)] ? value + "px" : value; } function defaultDisplay(nodeName) { var element, display; if (!elementDisplay[nodeName]) { element = document.createElement(nodeName); document.body.appendChild(element); display = getComputedStyle(element, "").getPropertyValue("display"); element.parentNode.removeChild(element); display == "none" && (display = "block"); elementDisplay[nodeName] = display; } return elementDisplay[nodeName]; } function _children(element) { return "children" in element ? _slice.call(element.children) : $.map(element.childNodes, function(node) { if (node.nodeType == 1) return node; }); } function Z(dom, selector) { var i, len = dom ? dom.length : 0; for (i = 0; i < len; i++) { this[i] = dom[i]; } this.length = len; this.selector = selector || ""; } zepto.fragment = function(html, name, properties) { var dom, nodes, container; if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1)); if (!dom) { if (html.replace) html = html.replace(tagExpanderRE, "<$1></$2>"); if (name === undefined$1) name = fragmentRE.test(html) && RegExp.$1; if (!(name in containers)) name = "*"; container = containers[name]; container.innerHTML = "" + html; dom = $.each(_slice.call(container.childNodes), function() { container.removeChild(this); }); } if (isPlainObject(properties)) { nodes = $(dom); $.each(properties, function(key, value) { if (methodAttributes.indexOf(key) > -1) nodes[key](value); else nodes.attr(key, value); }); } return dom; }; zepto.Z = function(dom, selector) { return new Z(dom, selector); }; zepto.isZ = function(object) { return object instanceof zepto.Z; }; zepto.init = function(selector, context) { var dom; if (!selector) return zepto.Z(); else if (typeof selector == "string") { selector = selector.trim(); if (selector[0] == "<" && fragmentRE.test(selector)) (dom = zepto.fragment(selector, RegExp.$1, context)), (selector = null); else if (context !== undefined$1) return $(context).find(selector); else dom = zepto.qsa(document, selector); } else if (isFunction(selector)) return $(document).ready(selector); else if (zepto.isZ(selector)) return selector; else { if (isArray(selector)) dom = compact(selector); else if (isObject(selector)) (dom = [selector]), (selector = null); else if (fragmentRE.test(selector)) (dom = zepto.fragment(selector.trim(), RegExp.$1, context)), (selector = null); else if (context !== undefined$1) return $(context).find(selector); else dom = zepto.qsa(document, selector); } return zepto.Z(dom, selector); }; $ = function $(selector, context) { return zepto.init(selector, context); }; function extend(target, source, deep) { for (key in source) { if (deep && (isPlainObject(source[key]) || isArray(source[key]))) { if (isPlainObject(source[key]) && !isPlainObject(target[key])) target[key] = {}; if (isArray(source[key]) && !isArray(target[key])) target[key] = []; extend(target[key], source[key], deep); } else if (source[key] !== undefined$1) target[key] = source[key]; } } $.extend = function(target) { var deep, args = _slice.call(arguments, 1); if (typeof target == "boolean") { deep = target; target = args.shift(); } args.forEach(function(arg) { extend(target, arg, deep); }); return target; }; zepto.qsa = function(element, selector) { var found, maybeID = selector[0] == "#", maybeClass = !maybeID && selector[0] == ".", nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, isSimple = simpleSelectorRE.test(nameOnly); return element.getElementById && isSimple && maybeID ? (found = element.getElementById(nameOnly)) ? [found] : [] : element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11 ? [] : _slice.call( isSimple && !maybeID && element.getElementsByClassName ? maybeClass ? element.getElementsByClassName(nameOnly) : element.getElementsByTagName(selector) : element.querySelectorAll(selector) ); }; function filtered(nodes, selector) { return selector == null ? $(nodes) : $(nodes).filter(selector); } $.contains = document.documentElement.contains ? function(parent, node) { return parent !== node && parent.contains(node); } : function(parent, node) { while (node && (node = node.parentNode)) { if (node === parent) return true; } return false; }; function funcArg(context, arg, idx, payload) { return isFunction(arg) ? arg.call(context, idx, payload) : arg; } function setAttribute(node, name, value) { value == null ? node.removeAttribute(name) : node.setAttribute(name, value); } function className(node, value) { var klass = node.className || "", svg = klass && klass.baseVal !== undefined$1; if (value === undefined$1) return svg ? klass.baseVal : klass; svg ? (klass.baseVal = value) : (node.className = value); } function deserializeValue(value) { try { return value ? value == "true" || (value == "false" ? false : value == "null" ? null : +value + "" == value ? +value : /^[\[\{]/.test(value) ? $.parseJSON(value) : value) : value; } catch (e) { return value; } } $.type = type; $.isFunction = isFunction; $.isWindow = isWindow; $.isArray = isArray; $.isPlainObject = isPlainObject; $.isEmptyObject = function(obj) { var name; for (name in obj) { return false; } return true; }; $.isNumeric = function(val) { var num = Number(val), type = _typeof(val); return ( (val != null && type != "boolean" && (type != "string" || val.length) && !isNaN(num) && isFinite(num)) || false ); }; $.inArray = function(elem, array, i) { return emptyArray.indexOf.call(array, elem, i); }; $.camelCase = camelize; $.trim = function(str) { return str == null ? "" : String.prototype.trim.call(str); }; $.uuid = 0; $.support = {}; $.expr = {}; $.noop = function() {}; $.map = function(elements, callback) { var value, values = [], i, key; if (likeArray(elements)) for (i = 0; i < elements.length; i++) { value = callback(elements[i], i); if (value != null) values.push(value); } else for (key in elements) { value = callback(elements[key], key); if (value != null) values.push(value); } return flatten(values); }; $.each = function(elements, callback) { var i, key; if (likeArray(elements)) { for (i = 0; i < elements.length; i++) { if (callback.call(elements[i], i, elements[i]) === false) return elements; } } else { for (key in elements) { if (callback.call(elements[key], key, elements[key]) === false) return elements; } } return elements; }; $.grep = function(elements, callback) { return _filter.call(elements, callback); }; if (window.JSON) $.parseJSON = JSON.parse; $.each( "Boolean Number String Function Array Date RegExp Object Error".split( " " ), function(i, name) { class2type["[object " + name + "]"] = name.toLowerCase(); } ); $.fn = { constructor: zepto.Z, length: 0, forEach: emptyArray.forEach, reduce: emptyArray.reduce, push: emptyArray.push, sort: emptyArray.sort, splice: emptyArray.splice, indexOf: emptyArray.indexOf, concat: function concat() { var i, value, args = []; for (i = 0; i < arguments.length; i++) { value = arguments[i]; args[i] = zepto.isZ(value) ? value.toArray() : value; } return _concat.apply(zepto.isZ(this) ? this.toArray() : this, args); }, map: function map(fn) { return $( $.map(this, function(el, i) { return fn.call(el, i, el); }) ); }, slice: function slice() { return $(_slice.apply(this, arguments)); }, ready: function ready(callback) { if (readyRE.test(document.readyState) && document.body) callback($); else document.addEventListener( "DOMContentLoaded", function() { callback($); }, false ); return this; }, get: function get(idx) { return idx === undefined$1 ? _slice.call(this) : this[idx >= 0 ? idx : idx + this.length]; }, toArray: function toArray() { return this.get(); }, size: function size() { return this.length; }, remove: function remove() { return this.each(function() { if (this.parentNode != null) this.parentNode.removeChild(this); }); }, each: function each(callback) { var len = this.length, idx = 0, el; while (idx < len) { el = this[idx]; if (callback.call(el, idx, el) === false) { break; } idx++; } return this; }, filter: function filter(selector) { if (isFunction(selector)) return this.not(this.not(selector)); return $( _filter.call(this, function(element) { return zepto.matches(element, selector); }) ); }, add: function add(selector, context) { return $(uniq(this.concat($(selector, context)))); }, is: function is(selector) { return this.length > 0 && zepto.matches(this[0], selector); }, not: function not(selector) { var nodes = []; if (isFunction(selector) && selector.call !== undefined$1) this.each(function(idx) { if (!selector.call(this, idx)) nodes.push(this); }); else { var excludes = typeof selector == "string" ? this.filter(selector) : likeArray(selector) && isFunction(selector.item) ? _slice.call(selector) : $(selector); this.forEach(function(el) { if (excludes.indexOf(el) < 0) nodes.push(el); }); } return $(nodes); }, has: function has(selector) { return this.filter(function() { return isObject(selector) ? $.contains(this, selector) : $(this) .find(selector) .size(); }); }, eq: function eq(idx) { return idx === -1 ? this.slice(idx) : this.slice(idx, +idx + 1); }, first: function first() { var el = this[0]; return el && !isObject(el) ? el : $(el); }, last: function last() { var el = this[this.length - 1]; return el && !isObject(el) ? el : $(el); }, find: function find(selector) { var result, $this = this; if (!selector) result = $(); else if (_typeof(selector) == "object") result = $(selector).filter(function() { var node = this; return emptyArray.some.call($this, function(parent) { return $.contains(parent, node); }); }); else if (this.length == 1) result = $(zepto.qsa(this[0], selector)); else result = this.map(function() { return zepto.qsa(this, selector); }); return result; }, closest: function closest(selector, context) { var nodes = [], collection = _typeof(selector) == "object" && $(selector); this.each(function(_, node) { while ( node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)) ) { node = node !== context && !isDocument(node) && node.parentNode; } if (node && nodes.indexOf(node) < 0) nodes.push(node); }); return $(nodes); }, parents: function parents(selector) { var ancestors = [], nodes = this; while (nodes.length > 0) { nodes = $.map(nodes, function(node) { if ( (node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0 ) { ancestors.push(node); return node; } }); } return filtered(ancestors, selector); }, parent: function parent(selector) { return filtered(uniq(this.pluck("parentNode")), selector); }, children: function children(selector) { return filtered( this.map(function() { return _children(this); }), selector ); }, contents: function contents() { return this.map(function() { return this.contentDocument || _slice.call(this.childNodes); }); }, siblings: function siblings(selector) { return filtered( this.map(function(i, el) { return _filter.call(_children(el.parentNode), function(child) { return child !== el; }); }), selector ); }, empty: function empty() { return this.each(function() { this.innerHTML = ""; }); }, pluck: function pluck(property) { return $.map(this, function(el) { return el[property]; }); }, show: function show() { return this.each(function() { this.style.display == "none" && (this.style.display = ""); if (getComputedStyle(this, "").getPropertyValue("display") == "none") this.style.display = defaultDisplay(this.nodeName); }); }, replaceWith: function replaceWith(newContent) { return this.before(newContent).remove(); }, wrap: function wrap(structure) { var func = isFunction(structure); if (this[0] && !func) var dom = $(structure).get(0), clone = dom.parentNode || this.length > 1; return this.each(function(index) { $(this).wrapAll( func ? structure.call(this, index) : clone ? dom.cloneNode(true) : dom ); }); }, wrapAll: function wrapAll(structure) { if (this[0]) { $(this[0]).before((structure = $(structure))); var children; while ((children = structure.children()).length) { structure = children.first(); } $(structure).append(this); } return this; }, wrapInner: function wrapInner(structure) { var func = isFunction(structure); return this.each(function(index) { var self = $(this), contents = self.contents(), dom = func ? structure.call(this, index) : structure; contents.length ? contents.wrapAll(dom) : self.append(dom); }); }, unwrap: function unwrap() { this.parent().each(function() { $(this).replaceWith($(this).children()); }); return this; }, clone: function clone() { return this.map(function() { return this.cloneNode(true); }); }, hide: function hide() { return this.css("display", "none"); }, toggle: function toggle(setting) { return this.each(function() { var el = $(this); (setting === undefined$1 ? el.css("display") == "none" : setting) ? el.show() : el.hide(); }); }, prev: function prev(selector) { return $(this.pluck("previousElementSibling")).filter(selector || "*"); }, next: function next(selector) { return $(this.pluck("nextElementSibling")).filter(selector || "*"); }, html: function html(_html) { return 0 in arguments ? this.each(function(idx) { var originHtml = this.innerHTML; $(this) .empty() .append(funcArg(this, _html, idx, originHtml)); }) : 0 in this ? this[0].innerHTML : null; }, text: function text(_text) { return 0 in arguments ? this.each(function(idx) { var newText = funcArg(this, _text, idx, this.textContent); this.textContent = newText == null ? "" : "" + newText; }) : 0 in this ? this.pluck("textContent").join("") : null; }, attr: function attr(name, value) { var result; return typeof name == "string" && !(1 in arguments) ? 0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined$1 : this.each(function(idx) { if (this.nodeType !== 1) return; if (isObject(name)) for (key in name) { setAttribute(this, key, name[key]); } else setAttribute( this, name, funcArg(this, value, idx, this.getAttribute(name)) ); }); }, removeAttr: function removeAttr(name) { return this.each(function() { this.nodeType === 1 && name.split(" ").forEach(function(attribute) { setAttribute(this, attribute); }, this); }); }, prop: function prop(name, value) { name = propMap[name] || name; return 1 in arguments ? this.each(function(idx) { this[name] = funcArg(this, value, idx, this[name]); }) : this[0] && this[0][name]; }, removeProp: function removeProp(name) { name = propMap[name] || name; return this.each(function() { delete this[name]; }); }, data: function data(name, value) { var attrName = "data-" + name.replace(capitalRE, "-$1").toLowerCase(); var data = 1 in arguments ? this.attr(attrName, value) : this.attr(attrName); return data !== null ? deserializeValue(data) : undefined$1; }, val: function val(value) { if (0 in arguments) { if (value == null) value = ""; return this.each(function(idx) { this.value = funcArg(this, value, idx, this.value); }); } else { return ( this[0] && (this[0].multiple ? $(this[0]) .find("option") .filter(function() { return this.selected; }) .pluck("value") : this[0].value) ); } }, offset: function offset(coordinates) { if (coordinates) return this.each(function(index) { var $this = $(this), coords = funcArg(this, coordinates, index, $this.offset()), parentOffset = $this.offsetParent().offset(), props = { top: coords.top - parentOffset.top, left: coords.left - parentOffset.left }; if ($this.css("position") == "static") props["position"] = "relative"; $this.css(props); }); if (!this.length) return null; if ( document.documentElement !== this[0] && !$.contains(document.documentElement, this[0]) ) return { top: 0, left: 0 }; var obj = this[0].getBoundingClientRect(); return { left: obj.left + window.pageXOffset, top: obj.top + window.pageYOffset, width: Math.round(obj.width), height: Math.round(obj.height) }; }, css: function css(property, value) { if (arguments.length < 2) { var element = this[0]; if (typeof property == "string") { if (!element) return; return ( element.style[camelize(property)] || getComputedStyle(element, "").getPropertyValue(property) ); } else if (isArray(property)) { if (!element) return; var props = {}; var computedStyle = getComputedStyle(element, ""); $.each(property, function(_, prop) { props[prop] = element.style[camelize(prop)] || computedStyle.getPropertyValue(prop); }); return props; } } var css = ""; if (type(property) == "string") { if (!value && value !== 0) this.each(function() { this.style.removeProperty(dasherize(property)); }); else css = dasherize(property) + ":" + maybeAddPx(property, value); } else { for (key in property) { if (!property[key] && property[key] !== 0) this.each(function() { this.style.removeProperty(dasherize(key)); }); else css += dasherize(key) + ":" + maybeAddPx(key, property[key]) + ";"; } } return this.each(function() { this.style.cssText += ";" + css; }); }, index: function index(element) { return element ? this.indexOf($(element)[0]) : this.parent() .children() .indexOf(this[0]); }, hasClass: function hasClass(name) { if (!name) return false; return emptyArray.some.call( this, function(el) { return this.test(className(el)); }, classRE(name) ); }, addClass: function addClass(name) { if (!name) return this; return this.each(function(idx) { if (!("className" in this)) return; classList = []; var cls = className(this), newName = funcArg(this, name, idx, cls); newName.split(/\s+/g).forEach(function(klass) { if (!$(this).hasClass(klass)) classList.push(klass); }, this); classList.length && className(this, cls + (cls ? " " : "") + classList.join(" ")); }); }, removeClass: function removeClass(name) { return this.each(function(idx) { if (!("className" in this)) return; if (name === undefined$1) return className(this, ""); classList = className(this); funcArg(this, name, idx, classList) .split(/\s+/g) .forEach(function(klass) { classList = classList.replace(classRE(klass), " "); }); className(this, classList.trim()); }); }, toggleClass: function toggleClass(name, when) { if (!name) return this; return this.each(function(idx) { var $this = $(this), names = funcArg(this, name, idx, className(this)); names.split(/\s+/g).forEach(function(klass) { (when === undefined$1 ? !$this.hasClass(klass) : when) ? $this.addClass(klass) : $this.removeClass(klass); }); }); }, scrollTop: function scrollTop(value) { if (!this.length) return; var hasScrollTop = "scrollTop" in this[0]; if (value === undefined$1) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset; return this.each( hasScrollTop ? function() { this.scrollTop = value; } : function() { this.scrollTo(this.scrollX, value); } ); }, scrollLeft: function scrollLeft(value) { if (!this.length) return; var hasScrollLeft = "scrollLeft" in this[0]; if (value === undefined$1) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset; return this.each( hasScrollLeft ? function() { this.scrollLeft = value; } : function() { this.scrollTo(value, this.scrollY); } ); }, position: function position() { if (!this.length) return; var elem = this[0], offsetParent = this.offsetParent(), offset = this.offset(), parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); offset.top -= parseFloat($(elem).css("margin-top")) || 0; offset.left -= parseFloat($(elem).css("margin-left")) || 0; parentOffset.top += parseFloat($(offsetParent[0]).css("border-top-width")) || 0; parentOffset.left += parseFloat($(offsetParent[0]).css("border-left-width")) || 0; return { top: offset.top - parentOffset.top, left: offset.left - parentOffset.left }; }, offsetParent: function offsetParent() { return this.map(function() { var parent = this.offsetParent || document.body; while ( parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static" ) { parent = parent.offsetParent; } return parent; }); } }; $.fn.detach = $.fn.remove; ["width", "height"].forEach(function(dimension) { var dimensionProperty = dimension.replace(/./, function(m) { return m[0].toUpperCase(); }); $.fn[dimension] = function(value) { var offset, el = this[0]; if (value === undefined$1) return isWindow(el) ? el["inner" + dimensionProperty] : isDocument(el) ? el.documentElement["scroll" + dimensionProperty] : (offset = this.offset()) && offset[dimension]; else return this.each(function(idx) { el = $(this); el.css(dimension, funcArg(this, value, idx, el[dimension]())); }); }; }); function traverseNode(node, fun) { fun(node); for (var i = 0, len = node.childNodes.length; i < len; i++) { traverseNode(node.childNodes[i], fun); } } function executeScript(doc, content, nonce) { var nearestNode = doc.getElementsByTagName("script")[0]; if (!nearestNode) { return; } var parentNode = nearestNode.parentNode; if (!parentNode) { return; } var script = doc.createElement("script"); script.innerHTML = content; if (isNotBlank(nonce)) { script.setAttribute("nonce", nonce); } parentNode.appendChild(script); parentNode.removeChild(script); } adjacencyOperators.forEach(function(operator, operatorIndex) { var inside = operatorIndex % 2; $.fn[operator] = function() { var argType, nodes = $.map(arguments, function(arg) { var arr = []; argType = type(arg); if (argType == "array") { arg.forEach(function(el) { if (el.nodeType !== undefined$1) return arr.push(el); else if ($.zepto.isZ(el)) return (arr = arr.concat(el.get())); arr = arr.concat(zepto.fragment(el)); }); return arr; } return argType == "object" || arg == null ? arg : zepto.fragment(arg); }), parent, copyByClone = this.length > 1; if (nodes.length < 1) return this; return this.each(function(_, target) { parent = inside ? target : target.parentNode; target = operatorIndex == 0 ? target.nextSibling : operatorIndex == 1 ? target.firstChild : operatorIndex == 2 ? target : null; var parentInDocument = $.contains(document.documentElement, parent); var SCRIPT_TYPES = /^(text|application)\/(javascript|ecmascript)$/; var config = getConfig(); var scriptNonce = config[CSP_SCRIPT_NONCE]; var styleNonce = config[CSP_STYLE_NONCE]; nodes.forEach(function(node) { if (copyByClone) node = node.cloneNode(true); else if (!parent) return $(node).remove(); if (isNotBlank(scriptNonce) && node.tagName === "SCRIPT") { node.setAttribute("nonce", scriptNonce); } if (isNotBlank(styleNonce) && node.tagName === "STYLE") { node.setAttribute("nonce", styleNonce); } parent.insertBefore(node, target); if (parentInDocument) traverseNode(node, function(el) { if ( el.nodeName != null && el.nodeName.toUpperCase() === "SCRIPT" && (!el.type || SCRIPT_TYPES.test(el.type.toLowerCase())) && !el.src ) { executeScript(document, el.innerHTML, el.nonce); } }); }); }); }; $.fn[ inside ? operator + "To" : "insert" + (operatorIndex ? "Before" : "After") ] = function(html) { $(html)[operator](this); return this; }; }); zepto.Z.prototype = Z.prototype = $.fn; zepto.uniq = uniq; zepto.deserializeValue = deserializeValue; $.zepto = zepto; return $; })(); (function($) { var _zid = 1, undefined$1, slice = Array.prototype.slice, isFunction = $.isFunction, isString = function isString(obj) { return typeof obj == "string"; }, handlers = {}, specialEvents = {}, focusinSupported = "onfocusin" in window, focus = { focus: "focusin", blur: "focusout" }, hover = { mouseenter: "mouseover", mouseleave: "mouseout" }; specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = "MouseEvents"; function zid(element) { return element._zid || (element._zid = _zid++); } function findHandlers(element, event, fn, selector) { event = parse(event); if (event.ns) var matcher = matcherFor(event.ns); return (handlers[zid(element)] || []).filter(function(handler) { return ( handler && (!event.e || handler.e == event.e) && (!event.ns || matcher.test(handler.ns)) && (!fn || zid(handler.fn) === zid(fn)) && (!selector || handler.sel == selector) ); }); } function parse(event) { var parts = ("" + event).split("."); return { e: parts[0], ns: parts .slice(1) .sort() .join(" ") }; } function matcherFor(ns) { return new RegExp("(?:^| )" + ns.replace(" ", " .* ?") + "(?: |$)"); } function eventCapture(handler, captureSetting) { return ( (handler.del && !focusinSupported && handler.e in focus) || !!captureSetting ); } function realEvent(type) { return hover[type] || (focusinSupported && focus[type]) || type; } function add(element, events, fn, data, selector, delegator, capture) { var id = zid(element), set = handlers[id] || (handlers[id] = []); events.split(/\s/).forEach(function(event) { if (event == "ready") return $(document).ready(fn); var handler = parse(event); handler.fn = fn; handler.sel = selector; if (handler.e in hover) fn = function fn(e) { var related = e.relatedTarget; if (!related || (related !== this && !$.contains(this, related))) return handler.fn.apply(this, arguments); }; handler.del = delegator; var callback = delegator || fn; handler.proxy = function(e) { e = compatible(e); if (e.isImmediatePropagationStopped()) return; e.data = data; var result = callback.apply( element, e._args == undefined$1 ? [e] : [e].concat(e._args) ); if (result === false) e.preventDefault(), e.stopPropagation(); return result; }; handler.i = set.length; set.push(handler); if ("addEventListener" in element) element.addEventListener( realEvent(handler.e), handler.proxy, eventCapture(handler, capture) ); }); } function remove(element, events, fn, selector, capture) { var id = zid(element); (events || "").split(/\s/).forEach(function(event) { findHandlers(element, event, fn, selector).forEach(function(handler) { delete handlers[id][handler.i]; if ("removeEventListener" in element) element.removeEventListener( realEvent(handler.e), handler.proxy, eventCapture(handler, capture) ); }); }); } $.event = { add: add, remove: remove }; $.proxy = function(fn, context) { var args = 2 in arguments && slice.call(arguments, 2); if (isFunction(fn)) { var proxyFn = function proxyFn() { return fn.apply( context, args ? args.concat(slice.call(arguments)) : arguments ); }; proxyFn._zid = zid(fn); return proxyFn; } else if (isString(context)) { if (args) { args.unshift(fn[context], fn); return $.proxy.apply(null, args); } else { return $.proxy(fn[context], fn); } } else { throw new TypeError("expected function"); } }; $.fn.bind = function(event, data, callback) { return this.on(event, data, callback); }; $.fn.unbind = function(event, callback) { return this.off(event, callback); }; $.fn.one = function(event, selector, data, callback) { return this.on(event, selector, data, callback, 1); }; var returnTrue = function returnTrue() { return true; }, returnFalse = function returnFalse() { return false; }, ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/, eventMethods = { preventDefault: "isDefaultPrevented", stopImmediatePropagation: "isImmediatePropagationStopped", stopPropagation: "isPropagationStopped" }; function compatible(event, source) { if (source || !event.isDefaultPrevented) { source || (source = event); $.each(eventMethods, function(name, predicate) { var sourceMethod = source[name]; event[name] = function() { this[predicate] = returnTrue; return sourceMethod && sourceMethod.apply(source, arguments); }; event[predicate] = returnFalse; }); try { event.timeStamp || (event.timeStamp = new Date().getTime()); } catch (ignored) {} if ( source.defaultPrevented !== undefined$1 ? source.defaultPrevented : "returnValue" in source ? source.returnValue === false : source.getPreventDefault && source.getPreventDefault() ) event.isDefaultPrevented = returnTrue; } return event; } function createProxy(event) { var key, proxy = { originalEvent: event }; for (key in event) { if (!ignoreProperties.test(key) && event[key] !== undefined$1) proxy[key] = event[key]; } return compatible(proxy, event); } $.fn.delegate = function(selector, event, callback) { return this.on(event, selector, callback); }; $.fn.undelegate = function(selector, event, callback) { return this.off(event, selector, callback); }; $.fn.live = function(event, callback) { $(document.body).delegate(this.selector, event, callback); return this; }; $.fn.die = function(event, callback) { $(document.body).undelegate(this.selector, event, callback); return this; }; $.fn.on = function(event, selector, data, callback, one) { var autoRemove, delegator, $this = this; if (event && !isString(event)) { $.each(event, function(type, fn) { $this.on(type, selector, data, fn, one); }); return $this; } if (!isString(selector) && !isFunction(callback) && callback !== false) (callback = data), (data = selector), (selector = undefined$1); if (callback === undefined$1 || data === false) (callback = data), (data = undefined$1); if (callback === false) callback = returnFalse; return $this.each(function(_, element) { if (one) autoRemove = function autoRemove(e) { remove(element, e.type, callback); return callback.apply(this, arguments); }; if (selector) delegator = function delegator(e) { var evt, match = $(e.target) .closest(selector, element) .get(0); if (match && match !== element) { evt = $.extend(createProxy(e), { currentTarget: match, liveFired: element }); return (autoRemove || callback).apply( match, [evt].concat(slice.call(arguments, 1)) ); } }; add(element, event, callback, data, selector, delegator || autoRemove); }); }; $.fn.off = function(event, selector, callback) { var $this = this; if (event && !isString(event)) { $.each(event, function(type, fn) { $this.off(type, selector, fn); }); return $this; } if (!isString(selector) && !isFunction(callback) && callback !== false) (callback = selector), (selector = undefined$1); if (callback === false) callback = returnFalse; return $this.each(function() { remove(this, event, callback, selector); }); }; $.fn.trigger = function(event, args) { event = isString(event) || $.isPlainObject(event) ? $.Event(event) : compatible(event); event._args = args; return this.each(function() { if (event.type in focus && typeof this[event.type] == "function") this[event.type](); else if ("dispatchEvent" in this) this.dispatchEvent(event); else $(this).triggerHandler(event, args); }); }; $.fn.triggerHandler = function(event, args) { var e, result; this.each(function(i, element) { e = createProxy(isString(event) ? $.Event(event) : event); e._args = args; e.target = element; $.each(findHandlers(element, event.type || event), function( i, handler ) { result = handler.proxy(e); if (e.isImmediatePropagationStopped()) return false; }); }); return result; }; ( "focusin focusout focus blur load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select keydown keypress keyup error" ) .split(" ") .forEach(function(event) { $.fn[event] = function(callback) { return 0 in arguments ? this.bind(event, callback) : this.trigger(event); }; }); $.Event = function(type, props) { if (!isString(type)) (props = type), (type = props.type); var event = document.createEvent(specialEvents[type] || "Events"), bubbles = true; if (props) for (var name in props) { name == "bubbles" ? (bubbles = !!props[name]) : (event[name] = props[name]); } event.initEvent(type, bubbles, true); return compatible(event); }; })(Zepto); (function() { try { getComputedStyle(undefined); } catch (e) { var nativeGetComputedStyle = getComputedStyle; window.getComputedStyle = function(element, pseudoElement) { try { return nativeGetComputedStyle(element, pseudoElement); } catch (e) { return null; } }; } })(); (function($) { var zepto = $.zepto, oldQsa = zepto.qsa, childRe = /^\s*>/, classTag = "Zepto" + +new Date(); zepto.qsa = function(node, selector) { var sel = selector, nodes, taggedParent; try { if (!sel) sel = "*"; else if (childRe.test(sel)) (taggedParent = $(node).addClass(classTag)), (sel = "." + classTag + " " + sel); nodes = oldQsa(node, sel); } catch (e) { throw e; } finally { if (taggedParent) taggedParent.removeClass(classTag); } return nodes; }; })(Zepto); return Zepto; })(window); var MO_OBJECT = window.MutationObserver || window.WebkitMutationObserver; function canUseMutationObserver() { return isFunction(MO_OBJECT); } function getMutationObserver(callback) { return new MO_OBJECT(callback); } var ARRAY_EXPECTED = "Expected an array of promises"; function getMoImmediateFn() { var textnode = document.createTextNode(""); var twiddleNode = function twiddleNode() { textnode.textContent = textnode.textContent.length > 0 ? "" : "a"; }; var callbacks = []; var mo = getMutationObserver(function() { var len = callbacks.length; for (var i = 0; i < len; i += 1) { callbacks[i](); } callbacks.splice(0, len); }); mo.observe(textnode, { characterData: true }); return function(fn) { callbacks.push(fn); twiddleNode(); }; } function getOnReadyStateChangeImmediateFn() { return function(fn) { var scriptEl = $("<script>"); scriptEl.on("readystatechange", function() { scriptEl.on("readystatechange", null); scriptEl.remove(); scriptEl = null; fn(); }); $(document.documentElement).append(scriptEl); }; } function setupPromiseImmediateFn() { if (canUseMutationObserver()) { Promise$1._setImmediateFn(getMoImmediateFn()); return; } if (window.navigator.userAgent.indexOf("MSIE 10") !== -1) { Promise$1._setImmediateFn(getOnReadyStateChangeImmediateFn()); } } if (Promise$1._setImmediateFn) { setupPromiseImmediateFn(); } function create(func) { return new Promise$1(func); } function resolve(value) { return Promise$1.resolve(value); } function reject(value) { return Promise$1.reject(value); } function race(arr) { if (!isArray(arr)) { return reject(new TypeError(ARRAY_EXPECTED)); } return Promise$1.race(arr); } function all(arr) { if (!isArray(arr)) { return reject(new TypeError(ARRAY_EXPECTED)); } return Promise$1.all(arr); } function timeout(promise, time, message) { var id = -1; var delayedPromise = create(function(_, rej) { id = delay(function() { return rej(new Error(message)); }, time); }); return race([promise, delayedPromise]).then( function(val) { cancelDelay(id); return val; }, function(err) { cancelDelay(id); throw err; } ); } function isOptinAvailable(win) { if (isNil(win[ADOBE])) { return false; } var adobe = win[ADOBE]; if (isNil(adobe[OPTIN])) { return false; } var optin = adobe[OPTIN]; return isFunction(optin[FETCH_PERMISSIONS]) && isFunction(optin[IS_APPROVED]); } function isOptinEnabled(win, optinEnabled) { if (!optinEnabled) { return false; } return isOptinAvailable(win); } function isCategoryApproved(win, key) { if (!isOptinAvailable(win)) { return true; } var optIn = win[ADOBE][OPTIN]; var categories = win[ADOBE][OPTIN][CATEGORIES] || {}; var category = categories[key]; return optIn[IS_APPROVED](category); } function fetchPermissions(win, key) { if (!isOptinAvailable(win)) { return resolve(true); } var optIn = win[ADOBE][OPTIN]; var categories = win[ADOBE][OPTIN][CATEGORIES] || {}; var category = categories[key]; return create(function(res, rej) { optIn[FETCH_PERMISSIONS](function() { if (optIn[IS_APPROVED](category)) { res(true); } else { rej(ERROR_TARGET_NOT_OPTED_IN); } }, true); }); } function shouldUseOptin() { var config = getConfig(); var optinEnabled = config[OPTIN_ENABLED]; return isOptinEnabled(window, optinEnabled); } function isTargetApproved() { return isCategoryApproved(window, TARGET); } function isAnalyticsApproved() { return isCategoryApproved(window, ANALYTICS); } function fetchOptinPermissions() { return fetchPermissions(window, TARGET); } var SESSION_ID = uuid(); function getSessionIdFromQuery() { var location = window.location; var search = location.search; var params = parseQueryString(search); return params[SESSION_ID_PARAM]; } function saveSessionId(value, config) { setTargetCookie({ name: SESSION_ID_COOKIE, value: value, expires: config[SESSION_ID_LIFETIME], domain: config[COOKIE_DOMAIN] }); } function getSessionId() { if (shouldUseOptin() && !isTargetApproved()) { return SESSION_ID; } var config = getConfig(); var sessionIdQuery = getSessionIdFromQuery(); if (isNotBlank(sessionIdQuery)) { saveSessionId(sessionIdQuery, config); return getTargetCookie(SESSION_ID_COOKIE); } var sessionId = getTargetCookie(SESSION_ID_COOKIE); if (isBlank(sessionId)) { saveSessionId(SESSION_ID, config); } return getTargetCookie(SESSION_ID_COOKIE); } function setDeviceId(value) { var config = getConfig(); setTargetCookie({ name: DEVICE_ID_COOKIE, value: value, expires: config[DEVICE_ID_LIFETIME], domain: config[COOKIE_DOMAIN] }); } function getDeviceId() { return getTargetCookie(DEVICE_ID_COOKIE); } var CLUSTER_ID_REGEX = /.*\.(\d+)_\d+/; function extractCluster(id) { if (isBlank(id)) { return ""; } var result = CLUSTER_ID_REGEX.exec(id); if (isEmpty(result) || result.length !== 2) { return ""; } return result[1]; } function getEdgeCluster() { var config = getConfig(); if (!config[OVERRIDE_MBOX_EDGE_SERVER]) { return ""; } var result = getCookie(EDGE_CLUSTER_COOKIE); return isBlank(result) ? "" : result; } function setEdgeCluster(id) { var config = getConfig(); if (!config[OVERRIDE_MBOX_EDGE_SERVER]) { return; } var domain = config[COOKIE_DOMAIN]; var expires = new Date(now() + config[OVERRIDE_MBOX_EDGE_SERVER_TIMEOUT]); var savedCluster = getCookie(EDGE_CLUSTER_COOKIE); var attrs = { domain: domain, expires: expires }; if (isNotBlank(savedCluster)) { setCookie(EDGE_CLUSTER_COOKIE, savedCluster, attrs); return; } var cluster = extractCluster(id); if (isBlank(cluster)) { return; } setCookie(EDGE_CLUSTER_COOKIE, cluster, attrs); } function bootstrapNotify(win, doc) { if (isFunction(win.CustomEvent)) { return; } function CustomEvent(event, params) { var evt = doc.createEvent("CustomEvent"); params = params || { bubbles: false, cancelable: false, detail: undefined }; evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail ); return evt; } CustomEvent.prototype = win.Event.prototype; win.CustomEvent = CustomEvent; } function createTracking(getSessionId, getDeviceId) { var sessionId = getSessionId(); var deviceId = getDeviceId(); var result = {}; result.sessionId = sessionId; if (isNotBlank(deviceId)) { result.deviceId = deviceId; return result; } return result; } function notify(win, doc, eventName, detail) { var event = new win.CustomEvent(eventName, { detail: detail }); doc.dispatchEvent(event); } bootstrapNotify(window, document); var LIBRARY_LOADED = "at-library-loaded"; var REQUEST_START = "at-request-start"; var REQUEST_SUCCEEDED$1 = "at-request-succeeded"; var REQUEST_FAILED$1 = "at-request-failed"; var CONTENT_RENDERING_START = "at-content-rendering-start"; var CONTENT_RENDERING_SUCCEEDED = "at-content-rendering-succeeded"; var CONTENT_RENDERING_FAILED = "at-content-rendering-failed"; var CONTENT_RENDERING_NO_OFFERS = "at-content-rendering-no-offers"; var CONTENT_RENDERING_REDIRECT = "at-content-rendering-redirect"; function buildPayload(type, detail) { var mbox = detail.mbox, error = detail.error, url = detail.url, analyticsDetails = detail.analyticsDetails, responseTokens = detail.responseTokens, execution = detail.execution; var tracking = createTracking(getSessionId, getDeviceId); var payload = { type: type, tracking: tracking }; if (!isNil(mbox)) { payload.mbox = mbox; } if (!isNil(error)) { payload.error = error; } if (!isNil(url)) { payload.url = url; } if (!isEmpty(analyticsDetails)) { payload.analyticsDetails = analyticsDetails; } if (!isEmpty(responseTokens)) { payload.responseTokens = responseTokens; } if (!isEmpty(execution)) { payload.execution = execution; } return payload; } function notifyLibraryLoaded() { var payload = buildPayload(LIBRARY_LOADED, {}); notify(window, document, LIBRARY_LOADED, payload); } function notifyRequestStart(detail) { var payload = buildPayload(REQUEST_START, detail); notify(window, document, REQUEST_START, payload); } function notifyRequestSucceeded(detail, redirect) { var payload = buildPayload(REQUEST_SUCCEEDED$1, detail); payload.redirect = redirect; notify(window, document, REQUEST_SUCCEEDED$1, payload); } function notifyRequestFailed(detail) { var payload = buildPayload(REQUEST_FAILED$1, detail); notify(window, document, REQUEST_FAILED$1, payload); } function notifyRenderingStart(detail) { var payload = buildPayload(CONTENT_RENDERING_START, detail); notify(window, document, CONTENT_RENDERING_START, payload); } function notifyRenderingSucceeded(detail) { var payload = buildPayload(CONTENT_RENDERING_SUCCEEDED, detail); notify(window, document, CONTENT_RENDERING_SUCCEEDED, payload); } function notifyRenderingFailed(detail) { var payload = buildPayload(CONTENT_RENDERING_FAILED, detail); notify(window, document, CONTENT_RENDERING_FAILED, payload); } function notifyRenderingNoOffers(detail) { var payload = buildPayload(CONTENT_RENDERING_NO_OFFERS, detail); notify(window, document, CONTENT_RENDERING_NO_OFFERS, payload); } function notifyRenderingRedirect(detail) { var payload = buildPayload(CONTENT_RENDERING_REDIRECT, detail); notify(window, document, CONTENT_RENDERING_REDIRECT, payload); } function isElement(value) { return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); } var EQ_START = ":eq("; var EQ_END = ")"; var EQ_LENGTH = EQ_START.length; var DIGIT_IN_SELECTOR_PATTERN = /((\.|#)(-)?\d{1})/g; function createPair(match) { var first = match.charAt(0); var second = match.charAt(1); var third = match.charAt(2); var result = { key: match }; if (second === "-") { result.val = "" + first + second + "\\3" + third + " "; } else { result.val = first + "\\3" + second + " "; } return result; } function escapeDigitsInSelector(selector) { var matches = selector.match(DIGIT_IN_SELECTOR_PATTERN); if (isEmpty(matches)) { return selector; } var pairs = map(createPair, matches); return reduce( function(acc, pair) { return acc.replace(pair.key, pair.val); }, selector, pairs ); } function parseSelector(selector) { var result = []; var sel = trim(selector); var currentIndex = sel.indexOf(EQ_START); var head; var tail; var eq; var index; while (currentIndex !== -1) { head = trim(sel.substring(0, currentIndex)); tail = trim(sel.substring(currentIndex)); index = tail.indexOf(EQ_END); eq = trim(tail.substring(EQ_LENGTH, index)); sel = trim(tail.substring(index + 1)); currentIndex = sel.indexOf(EQ_START); if (head && eq) { result.push({ sel: head, eq: Number(eq) }); } } if (sel) { result.push({ sel: sel }); } return result; } function select(selector) { if (isElement(selector)) { return $(selector); } if (!isString(selector)) { return $(selector); } var selectorAsString = escapeDigitsInSelector(selector); if (selectorAsString.indexOf(EQ_START) === -1) { return $(selectorAsString); } var parts = parseSelector(selectorAsString); return reduce( function(acc, part) { var sel = part.sel, eq = part.eq; acc = acc.find(sel); if (isNumber(eq)) { acc = acc.eq(eq); } return acc; }, $(document), parts ); } function exists$2(selector) { return select(selector).length > 0; } function fragment(content) { return $("<" + DIV_TAG + "/>").append(content); } function wrap(content) { return $(content); } function prev(selector) { return select(selector).prev(); } function next(selector) { return select(selector).next(); } function parent(selector) { return select(selector).parent(); } function is(query, selector) { return select(selector).is(query); } function find(query, selector) { return select(selector).find(query); } function children(selector) { return select(selector).children(); } var LOAD_ERROR = "Unable to load target-vec.js"; var LOAD_AUTHORING = "Loading target-vec.js"; var NAMESPACE = "_AT"; var EDITOR = "clickHandlerForExperienceEditor"; var CURRENT_VIEW = "currentView"; function initNamespace() { window[NAMESPACE] = window[NAMESPACE] || {}; window[NAMESPACE].querySelectorAll = select; } function handleAuthoringTriggeredView(options) { if (!isAuthoringEnabled()) { return; } var viewName = options[VIEW_NAME]; window[NAMESPACE][CURRENT_VIEW] = viewName; } function setupClickHandler() { document.addEventListener( CLICK, function(event) { if (isFunction(window[NAMESPACE][EDITOR])) { window[NAMESPACE][EDITOR](event); } }, true ); } function initAuthoringCode() { if (!isAuthoringEnabled()) { return; } initNamespace(); var config = getConfig(); var authoringScriptUrl = config[AUTHORING_SCRIPT_URL]; var success = function success() { return setupClickHandler(); }; var error = function error() { return logWarn(LOAD_ERROR); }; logDebug(LOAD_AUTHORING); loadScript(authoringScriptUrl) .then(success) ["catch"](error); } var QA_MODE_COOKIE = "at_qa_mode"; var PREVIEW_TOKEN = "at_preview_token"; var PREVIEW_INDEX = "at_preview_index"; var ACTIVITIES_ONLY = "at_preview_listed_activities_only"; var TRUE_AUDIENCE_IDS = "at_preview_evaluate_as_true_audience_ids"; var FALSE_AUDIENCE_IDS = "at_preview_evaluate_as_false_audience_ids"; var UNDERSCORE = "_"; var notNull = function notNull(v) { return !isNil(v); }; function toNumber(value) { return parseInt(value, 10); } function getIndex(value) { var result = toNumber(value); return isNaN(result) ? null : result; } function extractAudienceIds(value) { return split(UNDERSCORE, value); } function parsePreviewIndex(value) { var pair = split(UNDERSCORE, value); var activityIndex = getIndex(pair[0]); if (isNil(activityIndex)) { return null; } var result = {}; result.activityIndex = activityIndex; var experienceIndex = getIndex(pair[1]); if (!isNil(experienceIndex)) { result.experienceIndex = experienceIndex; } return result; } function parsePreviewIndexes(values) { return filter(notNull, map(parsePreviewIndex, values)); } function extractPreviewIndexes(value) { if (isArray(value)) { return parsePreviewIndexes(value); } return parsePreviewIndexes([value]); } function extractQaMode(queryString) { var query = parseQueryString(queryString); var token = query[PREVIEW_TOKEN]; if (isBlank(token)) { return null; } var result = {}; result.token = token; var listedActivitiesOnly = query[ACTIVITIES_ONLY]; if (isNotBlank(listedActivitiesOnly) && listedActivitiesOnly === TRUE) { result.listedActivitiesOnly = true; } var trueAudiences = query[TRUE_AUDIENCE_IDS]; if (isNotBlank(trueAudiences)) { result.evaluateAsTrueAudienceIds = extractAudienceIds(trueAudiences); } var falseAudiences = query[FALSE_AUDIENCE_IDS]; if (isNotBlank(falseAudiences)) { result.evaluateAsFalseAudienceIds = extractAudienceIds(falseAudiences); } var previewIndexes = query[PREVIEW_INDEX]; if (isEmpty(previewIndexes)) { return result; } result.previewIndexes = extractPreviewIndexes(previewIndexes); return result; } function initQaMode(win) { var result = extractQaMode(win.location.search); if (isNil(result)) { return; } var expires = new Date(now() + 1.86e6); setCookie(QA_MODE_COOKIE, JSON.stringify(result), { expires: expires }); } function getQaMode() { var result = getCookie(QA_MODE_COOKIE); if (isBlank(result)) { return {}; } try { return JSON.parse(result); } catch (e) { return {}; } } var PREVIEW_MODE_COOKIE = "at_preview_mode"; var PREVIEW_MODE_TOKEN = "at_preview"; function extractPreviewMode(queryString) { var query = parseQueryString(queryString); var token = query[PREVIEW_MODE_TOKEN]; if (isBlank(token)) { return null; } return { token: token }; } function initPreviewMode(win) { var result = extractPreviewMode(win.location.search); if (isNil(result)) { return; } var expires = new Date(now() + 1.86e6); setCookie(PREVIEW_MODE_COOKIE, JSON.stringify(result), { expires: expires }); } function getPreview() { var result = getCookie(PREVIEW_MODE_COOKIE); if (isBlank(result)) { return {}; } try { return JSON.parse(result); } catch (e) { return {}; } } function remove(selector) { return select(selector) .empty() .remove(); } function after(content, selector) { return select(selector).after(content); } function before(content, selector) { return select(selector).before(content); } function append(content, selector) { return select(selector).append(content); } function prepend(content, selector) { return select(selector).prepend(content); } function setHtml(content, selector) { return select(selector).html(content); } function getHtml(selector) { return select(selector).html(); } function setText(content, selector) { return select(selector).text(content); } var STYLE_PREFIX = "at-"; var BODY_STYLE_ID = "at-body-style"; var BODY_STYLE_ID_SELECTOR = "#" + BODY_STYLE_ID; var ALL_VIEWS_STYLE_ID = STYLE_PREFIX + "views"; function createStyleMarkup(id, content) { return ( "<" + STYLE_TAG + " " + ID + '="' + id + '" ' + CLASS + '="' + FLICKER_CONTROL_CLASS + '">' + content + "</" + STYLE_TAG + ">" ); } function createActionStyle(styleDef, selector) { var id = STYLE_PREFIX + hash(selector); var style = selector + " {" + styleDef + "}"; return createStyleMarkup(id, style); } function createAllViewsStyle(styleDef, aggregateSelector) { var style = aggregateSelector + " {" + styleDef + "}"; return createStyleMarkup(ALL_VIEWS_STYLE_ID, style); } function addHidingSnippet(config) { var bodyHidingEnabled = config[BODY_HIDING_ENABLED]; if (bodyHidingEnabled !== true) { return; } if (exists$2(BODY_STYLE_ID_SELECTOR)) { return; } var bodyHiddenStyle = config[BODY_HIDDEN_STYLE]; append(createStyleMarkup(BODY_STYLE_ID, bodyHiddenStyle), HEAD_TAG); } function removeHidingSnippet(config) { var bodyHidingEnabled = config[BODY_HIDING_ENABLED]; if (bodyHidingEnabled !== true) { return; } if (!exists$2(BODY_STYLE_ID_SELECTOR)) { return; } remove(BODY_STYLE_ID_SELECTOR); } function addActionHidings(config, selectors) { if (isEmpty(selectors)) { return; } var alreadyHidden = function alreadyHidden(selector) { return !exists$2("#" + (STYLE_PREFIX + hash(selector))); }; var selectorsToHide = filter(alreadyHidden, selectors); if (isEmpty(selectorsToHide)) { return; } var styleDef = config[DEFAULT_CONTENT_HIDDEN_STYLE]; var buildStyle = function buildStyle(selector) { return createActionStyle(styleDef, selector); }; var content = join("\n", map(buildStyle, selectorsToHide)); append(content, HEAD_TAG); } function addAllViewsHidings(config, selectors) { if (isEmpty(selectors) || exists$2("#" + ALL_VIEWS_STYLE_ID)) { return; } var styleDef = config[DEFAULT_CONTENT_HIDDEN_STYLE]; var aggregateSelector = join(", ", selectors); var content = createAllViewsStyle(styleDef, aggregateSelector); append(content, HEAD_TAG); } function injectHidingSnippetStyle() { addHidingSnippet(getConfig()); } function removeHidingSnippetStyle() { removeHidingSnippet(getConfig()); } function injectActionHidingStyles(selectors) { addActionHidings(getConfig(), selectors); } function injectAllViewsHidingStyle(selectors) { addAllViewsHidings(getConfig(), selectors); } function removeActionHidingStyle(selector) { var id = STYLE_PREFIX + hash(selector); remove("#" + id); } function removeAllViewsHidingStyle() { var hidingStyleSelector = "#" + ALL_VIEWS_STYLE_ID; if (exists$2(hidingStyleSelector)) { remove(hidingStyleSelector); } } var OPTOUT_MESSAGE = "Disabled due to optout"; var MCAAMB = "MCAAMB"; var MCAAMLH = "MCAAMLH"; var MCMID = "MCMID"; var MCOPTOUT = "MCOPTOUT"; var SDID_METHOD = "getSupplementalDataID"; var CIDS_METHOD = "getCustomerIDs"; var SUPPORTS_NS = true; var NAMESPACE_TYPE = "NS"; var DATASOURCE_TYPE = "DS"; var TRACK_SERVER_PROP = "trackingServer"; var TRACK_SERVER_SECURE_PROP = TRACK_SERVER_PROP + "Secure"; function hasId(value) { return !isNil(value[ID]); } function hasAuthState(value) { return !isNil(value[AUTH_STATE]); } function getAuthenticatedState(value) { switch (value) { case 0: return "unknown"; case 1: return "authenticated"; case 2: return "logged_out"; default: return "unknown"; } } function isPrimary(value) { return value[PRIMARY]; } function isCustomerId(value) { return hasId(value) || hasAuthState(value); } function normalizeCustomerIds(customerIds, customerIdType) { return reduce( function(acc, value, key) { var item = {}; item[INTEGRATION_CODE] = key; if (hasId(value)) { item[ID] = value[ID]; } if (hasAuthState(value)) { item[AUTHENTICATED_STATE] = getAuthenticatedState(value[AUTH_STATE]); } item[TYPE] = customerIdType; if (isPrimary(value)) { item[PRIMARY] = true; } acc.push(item); return acc; }, [], filter(isCustomerId, customerIds) ); } function buildDeliveryCustomerIds(customerIds) { if (!customerIds.nameSpaces && !customerIds.dataSources) { return normalizeCustomerIds(customerIds, DATASOURCE_TYPE); } var normalizedCustomerIds = []; if (customerIds.nameSpaces) { normalizedCustomerIds.push.apply( normalizedCustomerIds, normalizeCustomerIds(customerIds.nameSpaces, NAMESPACE_TYPE) ); } if (customerIds.dataSources) { normalizedCustomerIds.push.apply( normalizedCustomerIds, normalizeCustomerIds(customerIds.dataSources, DATASOURCE_TYPE) ); } return normalizedCustomerIds; } function getCustomerIds(visitor) { if (isNil(visitor)) { return []; } if (!isFunction(visitor[CIDS_METHOD])) { return []; } var customerIds = visitor[CIDS_METHOD](SUPPORTS_NS); if (!isObject(customerIds)) { return []; } return buildDeliveryCustomerIds(customerIds); } function getSdid(visitor, consumerId) { if (isNil(visitor)) { return null; } if (!isFunction(visitor[SDID_METHOD])) { return null; } return visitor[SDID_METHOD](consumerId); } function getInstanceProperty(visitor, property) { if (isNil(visitor)) { return null; } var result = visitor[property]; if (isNil(result)) { return null; } return result; } var VISITOR = "Visitor"; var GET_INSTANCE_METHOD = "getInstance"; var IS_ALLOWED_METHOD = "isAllowed"; function getInstance(win, imsOrgId, sdidParamExpiry) { if (isBlank(imsOrgId)) { return null; } if (isNil(win[VISITOR])) { return null; } if (!isFunction(win[VISITOR][GET_INSTANCE_METHOD])) { return null; } var visitor = win[VISITOR][GET_INSTANCE_METHOD](imsOrgId, { sdidParamExpiry: sdidParamExpiry }); if ( isObject(visitor) && isFunction(visitor[IS_ALLOWED_METHOD]) && visitor[IS_ALLOWED_METHOD]() ) { return visitor; } return null; } var TIMEOUT_MESSAGE = "Visitor API requests timed out"; var ERROR_MESSAGE = "Visitor API requests error"; function getVisitorValuesAsync(visitor, optoutEnabled) { if (!isFunction(visitor.getVisitorValues)) { return resolve({}); } var fields = [MCMID, MCAAMB, MCAAMLH]; if (optoutEnabled) { fields.push(MCOPTOUT); } return create(function(res) { visitor.getVisitorValues(function(values) { return res(values); }, fields); }); } function handleError(error) { logDebug(ERROR_MESSAGE, error); return {}; } function getAsyncValues(visitor, visitorApiTimeout, optoutEnabled) { if (isNil(visitor)) { return resolve({}); } var requests = getVisitorValuesAsync(visitor, optoutEnabled); return timeout(requests, visitorApiTimeout, TIMEOUT_MESSAGE)["catch"]( handleError ); } function getVisitorValues(visitor, optoutEnabled) { if (!isFunction(visitor.getVisitorValues)) { return {}; } var fields = [MCMID, MCAAMB, MCAAMLH]; if (optoutEnabled) { fields.push(MCOPTOUT); } var result = {}; visitor.getVisitorValues(function(values) { return assign(result, values); }, fields); return result; } function getSyncValues(visitor, optoutEnabled) { if (isNil(visitor)) { return {}; } return getVisitorValues(visitor, optoutEnabled); } function getVisitorInstance() { var config = getConfig(); var imsOrgId = config[IMS_ORG_ID]; var sdidParamExpiry = config[SUPPLEMENTAL_DATA_ID_PARAM_TIMEOUT]; return getInstance(window, imsOrgId, sdidParamExpiry); } function getAsyncVisitorValues() { var visitor = getVisitorInstance(); var config = getConfig(); var visitorApiTimeout = config[VISITOR_API_TIMEOUT]; var optoutEnabled = config[OPTOUT_ENABLED]; return getAsyncValues(visitor, visitorApiTimeout, optoutEnabled); } function getSyncVisitorValues() { var visitor = getVisitorInstance(); var config = getConfig(); var optoutEnabled = config[OPTOUT_ENABLED]; return getSyncValues(visitor, optoutEnabled); } function getCustomerIdsVisitorValues() { return getCustomerIds(getVisitorInstance()); } function getSdidVisitorValue(consumerId) { return getSdid(getVisitorInstance(), consumerId); } function getVisitorProperty(property) { return getInstanceProperty(getVisitorInstance(), property); } var storage = {}; function setItem(key, value) { storage[key] = value; } function getItem(key) { return storage[key]; } var LOG_PREFIX = "Data provider"; var TIMED_OUT = "timed out"; var MAX_TIMEOUT = 2000; function areDataProvidersPresent(win) { var globalSettings = win[GLOBAL_SETTINGS]; if (isNil(globalSettings)) { return false; } var dataProviders = globalSettings[DATA_PROVIDERS]; if (!isArray(dataProviders) || isEmpty(dataProviders)) { return false; } return true; } function isValidDataProvider(dataProvider) { var name = dataProvider[NAME]; if (!isString(name) || isEmpty(name)) { return false; } var version = dataProvider[VERSION]; if (!isString(version) || isEmpty(version)) { return false; } var wait = dataProvider[TIMEOUT]; if (!isNil(wait) && !isNumber(wait)) { return false; } var provider = dataProvider[PROVIDER]; if (!isFunction(provider)) { return false; } return true; } function createPromise(provider) { return create(function(success, error) { provider(function(err, params) { if (!isNil(err)) { error(err); return; } success(params); }); }); } function createTrace(nameKey, name, versionKey, version, resKey, res) { var dataProviderTrace = {}; dataProviderTrace[nameKey] = name; dataProviderTrace[versionKey] = version; dataProviderTrace[resKey] = res; var result = {}; result[DATA_PROVIDER] = dataProviderTrace; return result; } function convertToPromise(dataProvider) { var name = dataProvider[NAME]; var version = dataProvider[VERSION]; var wait = dataProvider[TIMEOUT] || MAX_TIMEOUT; var provider = dataProvider[PROVIDER]; var promise = createPromise(provider); return timeout(promise, wait, TIMED_OUT) .then(function(params) { var trace = createTrace(NAME, name, VERSION, version, PARAMS, params); logDebug(LOG_PREFIX, SUCCESS, trace); addClientTrace(trace); return params; }) ["catch"](function(error) { var trace = createTrace(NAME, name, VERSION, version, ERROR, error); logDebug(LOG_PREFIX, ERROR, trace); addClientTrace(trace); return {}; }); } function collectParams(arr) { var result = reduce( function(acc, value) { return assign(acc, value); }, {}, arr ); setItem(DATA_PROVIDERS, result); return result; } function executeAsyncDataProviders(win) { if (!areDataProvidersPresent(win)) { return resolve({}); } var dataProviders = win[GLOBAL_SETTINGS][DATA_PROVIDERS]; var validProviders = filter(isValidDataProvider, dataProviders); return all(map(convertToPromise, validProviders)).then(collectParams); } function executeSyncDataProviders() { var result = getItem(DATA_PROVIDERS); if (isNil(result)) { return {}; } return result; } function getAsyncDataProvidersParameters() { return executeAsyncDataProviders(window); } function getSyncDataProvidersParameters() { return executeSyncDataProviders(); } var TOKEN_PARAM = "authorization"; var TOKEN_COOKIE = "mboxDebugTools"; function getTokenFromQueryString(win) { var location = win.location; var search = location.search; var params = parseQueryString(search); var result = params[TOKEN_PARAM]; if (isBlank(result)) { return null; } return result; } function getTokenFromCookie() { var result = getCookie(TOKEN_COOKIE); if (isBlank(result)) { return null; } return result; } function getTraceToken() { var param = getTokenFromQueryString(window); var cookie = getTokenFromCookie(); return param || cookie; } function isPair(pair) { return !isEmpty(pair) && pair.length === 2 && isNotBlank(pair[0]); } function createPair$1(param) { var index = param.indexOf("="); if (index === -1) { return []; } return [param.substr(0, index), param.substr(index + 1)]; } function objectToParamsInternal(obj, ks, result, keyFunc) { forEach(function(value, key) { if (isObject(value)) { ks.push(key); objectToParamsInternal(value, ks, result, keyFunc); ks.pop(); } else if (isEmpty(ks)) { result[keyFunc(key)] = value; } else { result[keyFunc(join(".", ks.concat(key)))] = value; } }, obj); } function queryStringToParams(queryString) { return filter(function(value, key) { return isNotBlank(key); }, parseQueryString(queryString)); } function arrayToParams(array) { var pairs = reduce( function(acc, param) { acc.push(createPair$1(param)); return acc; }, [], filter(isNotBlank, array) ); return reduce( function(acc, pair) { acc[decode(trim(pair[0]))] = decode(trim(pair[1])); return acc; }, {}, filter(isPair, pairs) ); } function objectToParams(object, keyFunc) { var result = {}; if (isNil(keyFunc)) { objectToParamsInternal(object, [], result, identity); } else { objectToParamsInternal(object, [], result, keyFunc); } return result; } function functionToParams(func) { if (!isFunction(func)) { return {}; } var params = null; try { params = func(); } catch (_ignore) { return {}; } if (isNil(params)) { return {}; } if (isArray(params)) { return arrayToParams(params); } if (isString(params) && isNotBlank(params)) { return queryStringToParams(params); } if (isObject(params)) { return objectToParams(params); } return {}; } function getParamsAll(mboxParams) { return assign({}, mboxParams, functionToParams(window.targetPageParamsAll)); } function getParams(globalMboxParams) { return assign( {}, globalMboxParams, functionToParams(window.targetPageParams) ); } function getTargetPageParams(mbox) { var config = getConfig(); var globalMbox = config[GLOBAL_MBOX_NAME]; var mboxParams = config[MBOX_PARAMS]; var globalMboxParams = config[GLOBAL_MBOX_PARAMS]; if (globalMbox !== mbox) { return getParamsAll(mboxParams || {}); } return assign( getParamsAll(mboxParams || {}), getParams(globalMboxParams || {}) ); } function getWebGLRendererInternal() { var canvas = document.createElement("canvas"); var gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl"); if (isNil(gl)) { return null; } var glInfo = gl.getExtension("WEBGL_debug_renderer_info"); if (isNil(glInfo)) { return null; } var result = gl.getParameter(glInfo.UNMASKED_RENDERER_WEBGL); if (isNil(result)) { return null; } return result; } var WEB_GL_RENDERER_INTERNAL = getWebGLRendererInternal(); function getPixelRatio() { var ratio = window.devicePixelRatio; if (!isNil(ratio)) { return ratio; } ratio = 1; var screen = window.screen; var systemXDPI = screen.systemXDPI, logicalXDPI = screen.logicalXDPI; if (!isNil(systemXDPI) && !isNil(logicalXDPI) && systemXDPI > logicalXDPI) { ratio = systemXDPI / logicalXDPI; } return ratio; } function getScreenOrientation() { var screen = window.screen; var orientation = screen.orientation, width = screen.width, height = screen.height; if (isNil(orientation)) { return width > height ? "landscape" : "portrait"; } if (isNil(orientation.type)) { return null; } var parts = split("-", orientation.type); if (isEmpty(parts)) { return null; } var result = parts[0]; if (!isNil(result)) { return result; } return null; } function getWebGLRenderer() { return WEB_GL_RENDERER_INTERNAL; } var PROFILE_PREFIX = "profile."; var THIRD_PARTY_ID = "mbox3rdPartyId"; var PROPERTY_TOKEN = "at_property"; var ORDER_ID = "orderId"; var ORDER_TOTAL = "orderTotal"; var PRODUCT_PURCHASED_ID = "productPurchasedId"; var PRODUCT_ID = "productId"; var CATEGORY_ID = "categoryId"; function isThirdPartyId(param) { return param === THIRD_PARTY_ID; } function isProfileParam(param) { return param.indexOf(PROFILE_PREFIX) !== -1; } function isPropertyToken(param) { return param === PROPERTY_TOKEN; } function isOrderId(param) { return param === ORDER_ID; } function isOrderTotal(param) { return param === ORDER_TOTAL; } function isProductPurchasedId(param) { return param === PRODUCT_PURCHASED_ID; } function isProductId(param) { return param === PRODUCT_ID; } function isCategoryId(param) { return param === CATEGORY_ID; } function isSpecialParam(param) { return ( isProfileParam(param) || isThirdPartyId(param) || isPropertyToken(param) || isOrderId(param) || isOrderTotal(param) || isProductPurchasedId(param) || isProductId(param) || isCategoryId(param) ); } function extractProfileParam(param) { return param.substring(PROFILE_PREFIX.length); } function getThirdPartyId(parameters) { return parameters[THIRD_PARTY_ID]; } function getPropertyToken(params) { return params[PROPERTY_TOKEN]; } function getOrderId(params) { return params[ORDER_ID]; } function getOrderTotal(params) { return params[ORDER_TOTAL]; } function getPurchasedProductIds(params) { var value = params[PRODUCT_PURCHASED_ID]; var result = map(trim, split(",", value)); return filter(isNotBlank, result); } function getProductId(params) { return params[PRODUCT_ID]; } function getCategoryId(params) { return params[CATEGORY_ID]; } function getParams$1(params) { return reduce( function(acc, value, key) { if (isSpecialParam(key)) { return acc; } acc[key] = isNil(value) ? "" : value; return acc; }, {}, params ); } function getProfileParams(params) { return reduce( function(acc, value, key) { if (!isProfileParam(key)) { return acc; } var profileKey = extractProfileParam(key); if (isBlank(profileKey)) { return acc; } acc[profileKey] = isNil(value) ? "" : value; return acc; }, {}, params ); } var POST = "POST"; var NETWORK_ERROR = "Network request failed"; var REQUEST_TIMEOUT = "Request timed out"; var MALFORMED_RESPONSE = "Malformed response JSON"; function addOnload(xhr, resolve, reject) { xhr.onload = function() { var status = xhr.status === 1223 ? 204 : xhr.status; if (status < 100 || status > 599) { reject(new Error(NETWORK_ERROR)); return; } var response; try { response = JSON.parse(xhr.responseText); } catch (e) { reject(new Error(MALFORMED_RESPONSE)); return; } var headers = xhr.getAllResponseHeaders(); resolve({ status: status, headers: headers, response: response }); }; return xhr; } function addOnerror(xhr, reject) { xhr.onerror = function() { reject(new Error(NETWORK_ERROR)); }; return xhr; } function addOntimeout(xhr, timeout, reject) { xhr.timeout = timeout; xhr.ontimeout = function() { reject(new Error(REQUEST_TIMEOUT)); }; return xhr; } function addHeaders(xhr) { var headers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; forEach(function(values, key) { if (!isArray(values)) { return; } forEach(function(value) { xhr.setRequestHeader(key, value); }, values); }, headers); return xhr; } function executeXhr(_ref) { var url = _ref.url, headers = _ref.headers, body = _ref.body, timeout = _ref.timeout, async = _ref.async; return create(function(resolve, reject) { var xhr = new window.XMLHttpRequest(); xhr = addOnload(xhr, resolve, reject); xhr = addOnerror(xhr, reject); xhr.open(POST, url, async); xhr.withCredentials = true; xhr = addHeaders(xhr, headers); if (async) { xhr = addOntimeout(xhr, timeout, reject); } xhr.send(JSON.stringify(body)); }).then(function(xhrResponse) { var response = xhrResponse.response; var status = response.status, message = response.message; if (!isNil(status) && !isNil(message)) { throw new Error(message); } return response; }); } var EDGE_SERVER_PREFIX = "mboxedge"; var EDGE_SERVER_DOMAIN = ".tt.omtrdc.net"; var notEmpty = function notEmpty(val) { return !isEmpty(val); }; function throwIfOptout(values) { var optout = values[MCOPTOUT]; if (optout) { throw new Error(OPTOUT_MESSAGE); } return values; } function getAsyncThirdPartyData() { var visitorValues = getAsyncVisitorValues(); var dataProvidersParams = getAsyncDataProvidersParameters(); return all([visitorValues.then(throwIfOptout), dataProvidersParams]); } function getSyncThirdPartyData() { var visitorValues = getSyncVisitorValues(); var dataProvidersParams = getSyncDataProvidersParameters(); return [visitorValues, dataProvidersParams]; } function getAllParams(providersParams) { var config = getConfig(); var globalMbox = config[GLOBAL_MBOX_NAME]; return assign({}, providersParams, getTargetPageParams(globalMbox)); } function getTimeOffset() { return -new Date().getTimezoneOffset(); } function createScreen() { var screen = window.screen; return { width: screen.width, height: screen.height, orientation: getScreenOrientation(), colorDepth: screen.colorDepth, pixelRatio: getPixelRatio() }; } function createWindow() { var documentElement = document.documentElement; return { width: documentElement.clientWidth, height: documentElement.clientHeight }; } function createBrowser() { var location = window.location; return { host: location.hostname, webGLRenderer: getWebGLRenderer() }; } function createAddress() { var location = window.location; return { url: location.href, referringUrl: document.referrer }; } function createContext(context) { if (!isNil(context) && context.channel === WEB_CHANNEL) { return context; } var validContext = context || {}; var beacon = validContext.beacon; return { userAgent: window.navigator.userAgent, timeOffsetInMinutes: getTimeOffset(), channel: WEB_CHANNEL, screen: createScreen(), window: createWindow(), browser: createBrowser(), address: createAddress(), geo: context && context.geo, beacon: beacon }; } function createAudienceManager(audienceManager, visitorValues) { if (!isNil(audienceManager)) { return audienceManager; } var result = {}; if (isEmpty(visitorValues)) { return result; } var locationHint = visitorValues[MCAAMLH]; var locationHintNumber = parseInt(locationHint, 10); if (!isNaN(locationHintNumber)) { result.locationHint = locationHintNumber; } var blob = visitorValues[MCAAMB]; if (isNotBlank(blob)) { result.blob = blob; } return result; } function createCustomerId(data) { var id = data.id, integrationCode = data.integrationCode, authenticatedState = data.authenticatedState, type = data.type, primary = data.primary; var result = {}; if (isNotBlank(id)) { result.id = id; } if (isNotBlank(integrationCode)) { result.integrationCode = integrationCode; } if (isNotBlank(authenticatedState)) { result.authenticatedState = authenticatedState; } if (isNotBlank(type)) { result.type = type; } if (primary) { result.primary = primary; } return result; } function createCustomerIds(customerIdsValues) { return map(createCustomerId, customerIdsValues); } function createVisitorId( id, deviceId, thirdPartyId, visitorValues, customerIdsValues ) { var result = {}; if (isNotBlank(deviceId)) { result.tntId = deviceId; } if (isNotBlank(thirdPartyId)) { result.thirdPartyId = thirdPartyId; } if (isNotBlank(id.thirdPartyId)) { result.thirdPartyId = id.thirdPartyId; } var mid = visitorValues[MCMID]; if (isNotBlank(mid)) { result.marketingCloudVisitorId = mid; } if (isNotBlank(id.marketingCloudVisitorId)) { result.marketingCloudVisitorId = id.marketingCloudVisitorId; } if (!isEmpty(id.customerIds)) { result.customerIds = id.customerIds; return result; } if (!isEmpty(customerIdsValues)) { result.customerIds = createCustomerIds(customerIdsValues); } return result; } function createExperienceCloud(experienceCloud, visitorValues) { var result = {}; var audienceManager = createAudienceManager( experienceCloud.audienceManager, visitorValues ); if (!isEmpty(audienceManager)) { result.audienceManager = audienceManager; } if (!isEmpty(experienceCloud.analytics)) { result.analytics = experienceCloud.analytics; } return result; } function createProperty(property, allParams) { if (!isNil(property) && isNotBlank(property.token)) { return property; } var result = {}; var token = getPropertyToken(allParams); if (isNotBlank(token)) { result.token = token; } return result; } function createTrace$1(trace) { if (!isNil(trace) && isNotBlank(trace.authorizationToken)) { return trace; } var result = {}; var authorizationToken = getTraceToken(); if (isNotBlank(authorizationToken)) { result.authorizationToken = authorizationToken; } return result; } function createPreview(preview) { if (!isNil(preview)) { return preview; } return getPreview(); } function createQaMode(qaMode) { if (!isNil(qaMode)) { return qaMode; } return getQaMode(); } function createOrder(params) { var result = {}; var orderId = getOrderId(params); if (!isNil(orderId)) { result.id = orderId; } var orderTotal = getOrderTotal(params); var orderTotalNumber = parseFloat(orderTotal); if (!isNaN(orderTotalNumber)) { result.total = orderTotalNumber; } var purchasedProductIds = getPurchasedProductIds(params); if (!isEmpty(purchasedProductIds)) { result.purchasedProductIds = purchasedProductIds; } return result; } function createProduct(params) { var result = {}; var productId = getProductId(params); if (!isNil(productId)) { result.id = productId; } var categoryId = getCategoryId(params); if (!isNil(categoryId)) { result.categoryId = categoryId; } return result; } function createRequestDetails(item, allParams) { var result = {}; var params = assign({}, getParams$1(allParams), item.parameters || {}); var profileParams = assign( {}, getProfileParams(allParams), item.profileParameters || {} ); var order = assign({}, createOrder(allParams), item.order || {}); var product = assign({}, createProduct(allParams), item.product || {}); if (!isEmpty(params)) { result.parameters = params; } if (!isEmpty(profileParams)) { result.profileParameters = profileParams; } if (!isEmpty(order)) { result.order = order; } if (!isEmpty(product)) { result.product = product; } return result; } function createMboxRequestDetails(item, allParams) { var providersParams = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var config = getConfig(); var globalMbox = config[GLOBAL_MBOX_NAME]; var index = item.index, name = item.name, address = item.address; var params = assign( {}, name === globalMbox ? allParams : providersParams, getTargetPageParams(name) ); var result = createRequestDetails(item, params); if (!isNil(index)) { result.index = index; } if (isNotBlank(name)) { result.name = name; } if (!isEmpty(address)) { result.address = address; } return result; } function createViewRequestDetails(item, allParams) { var name = item.name, address = item.address; var result = createRequestDetails(item, allParams); if (isNotBlank(name)) { result.name = name; } if (!isEmpty(address)) { result.address = address; } return result; } function createExecute(request, allParams, providersParams) { var _request$execute = request.execute, execute = _request$execute === void 0 ? {} : _request$execute; var result = {}; if (isEmpty(execute)) { return result; } var pageLoad = execute.pageLoad; if (!isNil(pageLoad)) { result.pageLoad = createRequestDetails(pageLoad, allParams); } var mboxes = execute.mboxes; if (!isNil(mboxes) && isArray(mboxes) && !isEmpty(mboxes)) { var temp = filter( notEmpty, map(function(e) { return createMboxRequestDetails(e, allParams, providersParams); }, mboxes) ); if (!isEmpty(temp)) { result.mboxes = temp; } } return result; } function createPrefetch(request, allParams, providersParams) { var _request$prefetch = request.prefetch, prefetch = _request$prefetch === void 0 ? {} : _request$prefetch; var result = {}; if (isEmpty(prefetch)) { return result; } var mboxes = prefetch.mboxes; if (!isNil(mboxes) && isArray(mboxes) && !isEmpty(mboxes)) { result.mboxes = map(function(e) { return createMboxRequestDetails(e, allParams, providersParams); }, mboxes); } var views = prefetch.views; if (!isNil(views) && isArray(views) && !isEmpty(views)) { result.views = map(function(e) { return createViewRequestDetails(e, allParams); }, views); } return result; } function createAnalytics(consumerId, request) { if (shouldUseOptin() && !isAnalyticsApproved()) { return null; } var config = getConfig(); var sdid = getSdidVisitorValue(consumerId); var server = getVisitorProperty(TRACK_SERVER_PROP); var serverSecure = getVisitorProperty(TRACK_SERVER_SECURE_PROP); var _request$experienceCl = request.experienceCloud, experienceCloud = _request$experienceCl === void 0 ? {} : _request$experienceCl; var _experienceCloud$anal = experienceCloud.analytics, analytics = _experienceCloud$anal === void 0 ? {} : _experienceCloud$anal; var logging = analytics.logging, supplementalDataId = analytics.supplementalDataId, trackingServer = analytics.trackingServer, trackingServerSecure = analytics.trackingServerSecure; var result = {}; if (!isNil(logging)) { result.logging = logging; } else { result.logging = config[ANALYTICS_LOGGING]; } if (!isNil(supplementalDataId)) { result.supplementalDataId = supplementalDataId; } if (isNotBlank(sdid)) { result.supplementalDataId = sdid; } if (!isNil(trackingServer)) { result.trackingServer = trackingServer; } if (isNotBlank(server)) { result.trackingServer = server; } if (!isNil(trackingServerSecure)) { result.trackingServerSecure = trackingServerSecure; } if (isNotBlank(serverSecure)) { result.trackingServerSecure = serverSecure; } if (isEmpty(result)) { return null; } return result; } function createDeliveryRequest(request, visitorValues, providersParams) { var allParams = getAllParams(providersParams); var deviceId = getDeviceId(); var thirdPartyId = getThirdPartyId(allParams); var customerIdsValues = getCustomerIdsVisitorValues(); var visitorId = createVisitorId( request.id || {}, deviceId, thirdPartyId, visitorValues, customerIdsValues ); var property = createProperty(request.property, allParams); var experienceCloud = createExperienceCloud( request.experienceCloud || {}, visitorValues ); var trace = createTrace$1(request.trace); var preview = createPreview(request.preview); var qaMode = createQaMode(request.qaMode); var execute = createExecute(request, allParams, providersParams); var prefetch = createPrefetch(request, allParams, providersParams); var notifications = request.notifications; var result = {}; result.requestId = uuid(); result.context = createContext(request.context); if (!isEmpty(visitorId)) { result.id = visitorId; } if (!isEmpty(property)) { result.property = property; } if (!isEmpty(trace)) { result.trace = trace; } if (!isEmpty(experienceCloud)) { result.experienceCloud = experienceCloud; } if (!isEmpty(preview)) { result.preview = preview; } if (!isEmpty(qaMode)) { result.qaMode = qaMode; } if (!isEmpty(execute)) { result.execute = execute; } if (!isEmpty(prefetch)) { result.prefetch = prefetch; } if (!isEmpty(notifications)) { result.notifications = notifications; } return result; } function buildRequest(request, params, data) { var visitorValues = data[0]; var providersValues = data[1]; var providersParams = assign({}, providersValues, params); return createDeliveryRequest(request, visitorValues, providersParams); } function createAsyncDeliveryRequest(request, params) { return getAsyncThirdPartyData().then(function(data) { return buildRequest(request, params, data); }); } function createSyncDeliveryRequest(request, params) { var data = getSyncThirdPartyData(); return buildRequest(request, params, data); } function getTimeout(config, timeout) { if (!isNumber(timeout)) { return config[TIMEOUT]; } if (timeout < 0) { return config[TIMEOUT]; } return timeout; } function getServerDomain(config) { var serverDomain = config[SERVER_DOMAIN]; var overrideMboxEdgeServer = config[OVERRIDE_MBOX_EDGE_SERVER]; if (!overrideMboxEdgeServer) { return serverDomain; } var cluster = getEdgeCluster(); if (isBlank(cluster)) { return serverDomain; } return "" + EDGE_SERVER_PREFIX + cluster + EDGE_SERVER_DOMAIN; } function createRequestUrl(config) { var scheme = config[SCHEME]; var host = getServerDomain(config); var path = config[ENDPOINT]; var client = config[CLIENT_CODE]; var sessionId = getSessionId(); var version = config[VERSION]; var queryString = stringifyQueryString({ client: client, sessionId: sessionId, version: version }); return scheme + "//" + host + path + "?" + queryString; } function executeDeliveryRequest(request, requestTimeout) { var config = getConfig(); var url = createRequestUrl(config); var headers = _defineProperty({}, CONTENT_TYPE, [TEXT_PLAIN]); var timeout = getTimeout(config, requestTimeout); var async = true; var options = { url: url, headers: headers, body: request, timeout: timeout, async: async }; return executeXhr(options).then(function(response) { return assign(response, { decisioningMethod: DECISIONING_METHOD.SERVER_SIDE }); }); } function executeRequest(options, request, requestTimeout) { logDebug(REQUEST, request); addClientTrace({ request: request }); return executeDeliveryRequest(request, requestTimeout).then(function( response ) { logDebug(RESPONSE, response); addClientTrace({ response: response }); return { request: request, response: response }; }); } var prop = function prop(key) { return function(obj) { return obj[key]; }; }; var not = function not(pred) { return function(val) { return !pred(val); }; }; var notNil = not(isNil); var notBlank = not(isBlank); var filterBy = function filterBy(pred) { return function(coll) { return filter(pred, coll); }; }; var isError = function isError(val) { return val.status === ERROR; }; var isActions = function isActions(val) { return val.type === ACTIONS; }; var isRedirect = function isRedirect(val) { return val.type === REDIRECT; }; var filterNotNil = filterBy(notNil); var filterNotBlank = filterBy(notBlank); var selectOptions = prop(OPTIONS); var selectContent = prop(CONTENT); var selectResponseTokens = prop(RESPONSE_TOKENS); var hasName = function hasName(val) { return isNotBlank(val.name); }; var hasIndex = function hasIndex(val) { return !isNil(val.index); }; var isValidMbox = function isValidMbox(val) { return isObject(val) && hasName(val); }; var isValidPrefetchMbox = function isValidPrefetchMbox(val) { return isObject(val) && hasName(val) && hasIndex(val); }; var isValidView = function isValidView(val) { return isObject(val) && hasName(val); }; var hasSelector = function hasSelector(val) { return isNotBlank(val.selector); }; var selectData = prop(DATA); var hasData = flow([selectData, notNil]); function createSuccess(type, data) { return { status: SUCCESS, type: type, data: data }; } function createError(type, data) { return { status: ERROR, type: type, data: data }; } function isValidOption(option) { return isObject(option); } function isValidOptionEventToken(option) { if (!isValidOption(option)) { return false; } return isNotBlank(option.eventToken); } function isValidMetric(metric) { if (isEmpty(metric) || isBlank(metric.type)) { return false; } return isNotBlank(metric.eventToken); } function isValidSelectorMetric(metric) { if (!isValidMetric(metric)) { return false; } return isNotBlank(metric.selector); } function hasDeviceId(res) { var id = res.id; return isObject(id) && isNotBlank(id.tntId); } function handleDeviceId(context) { var response = context.response; if (hasDeviceId(response)) { setDeviceId(response.id.tntId); } return context; } function handleEdgeCluster(context) { var response = context.response; if (hasDeviceId(response)) { var id = response.id; var tntId = id.tntId; setEdgeCluster(tntId); } setEdgeCluster(null); return context; } function addTraceIfExists() { var item = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var trace = item.trace; if (!isEmpty(trace)) { addServerTrace(trace); } } function handleTraces(httpContext) { var response = httpContext.response; var _response$execute = response.execute, execute = _response$execute === void 0 ? {} : _response$execute, _response$prefetch = response.prefetch, prefetch = _response$prefetch === void 0 ? {} : _response$prefetch; var _execute$pageLoad = execute.pageLoad, pageLoad = _execute$pageLoad === void 0 ? {} : _execute$pageLoad, _execute$mboxes = execute.mboxes, mboxes = _execute$mboxes === void 0 ? [] : _execute$mboxes; var _prefetch$mboxes = prefetch.mboxes, prefetchMboxes = _prefetch$mboxes === void 0 ? [] : _prefetch$mboxes, _prefetch$views = prefetch.views, views = _prefetch$views === void 0 ? [] : _prefetch$views; addTraceIfExists(pageLoad); forEach(addTraceIfExists, mboxes); forEach(addTraceIfExists, prefetchMboxes); forEach(addTraceIfExists, views); return httpContext; } var SDID_PARAM = "adobe_mc_sdid"; function getRedirectUriParams(uri) { var result = uri.queryKey; var param = result[SDID_PARAM]; if (!isString(param)) { return result; } if (isBlank(param)) { return result; } var nowInSeconds = Math.round(now() / 1000); result[SDID_PARAM] = param.replace(/\|TS=\d+/, "|TS=" + nowInSeconds); return result; } function getUriParams(uri) { return uri.queryKey; } function createUrlInternal(url, params, uriParamsFunc) { var parsedUri = parseUri$1(url); var protocol = parsedUri.protocol; var host = parsedUri.host; var path = parsedUri.path; var port = parsedUri.port === "" ? "" : ":" + parsedUri.port; var anchor = isBlank(parsedUri.anchor) ? "" : "#" + parsedUri.anchor; var uriParams = uriParamsFunc(parsedUri); var queryString = stringifyQueryString(assign({}, uriParams, params)); var query = isBlank(queryString) ? "" : "?" + queryString; return protocol + "://" + host + port + path + query + anchor; } function createRedirectUrl(url, params) { return createUrlInternal(url, params, getRedirectUriParams); } function createUrl(url, params) { return createUrlInternal(url, params, getUriParams); } function createRedirectOption(option) { var url = option.content; if (isBlank(url)) { logDebug(EMPTY_URL, option); return null; } var result = assign({}, option); result.content = createRedirectUrl(url, {}); return result; } var NETWORK_ERROR$1 = "Network request failed"; var REQUEST_TIMEOUT$1 = "Request timed out"; var URL_REQUIRED = "URL is required"; var GET = "GET"; var POST$1 = "POST"; var METHOD = "method"; var URL = "url"; var HEADERS = "headers"; var DATA$1 = "data"; var CREDENTIALS = "credentials"; var TIMEOUT$1 = "timeout"; var ASYNC = "async"; function throwError(message) { throw new Error(message); } function processOptions(options) { var method = options[METHOD] || GET; var url = options[URL] || throwError(URL_REQUIRED); var headers = options[HEADERS] || {}; var data = options[DATA$1] || null; var credentials = options[CREDENTIALS] || false; var timeout = options[TIMEOUT$1] || 3000; var async = isNil(options[ASYNC]) ? true : options[ASYNC] === true; var result = {}; result[METHOD] = method; result[URL] = url; result[HEADERS] = headers; result[DATA$1] = data; result[CREDENTIALS] = credentials; result[TIMEOUT$1] = timeout; result[ASYNC] = async; return result; } function addOnload$1(xhr, resolve, reject) { xhr.onload = function() { var status = xhr.status === 1223 ? 204 : xhr.status; if (status < 100 || status > 599) { reject(new Error(NETWORK_ERROR$1)); return; } var response = xhr.responseText; var headers = xhr.getAllResponseHeaders(); var result = { status: status, headers: headers, response: response }; resolve(result); }; return xhr; } function addOnerror$1(xhr, reject) { xhr.onerror = function() { reject(new Error(NETWORK_ERROR$1)); }; return xhr; } function addOntimeout$1(xhr, timeout, reject) { xhr.timeout = timeout; xhr.ontimeout = function() { reject(new Error(REQUEST_TIMEOUT$1)); }; return xhr; } function addCredentials(xhr, credentials) { if (credentials === true) { xhr.withCredentials = credentials; } return xhr; } function addHeaders$1(xhr, headers) { forEach(function(value, key) { forEach(function(v) { return xhr.setRequestHeader(key, v); }, value); }, headers); return xhr; } function createXhrPromise(win, opts) { var options = processOptions(opts); var method = options[METHOD]; var url = options[URL]; var headers = options[HEADERS]; var data = options[DATA$1]; var credentials = options[CREDENTIALS]; var timeout = options[TIMEOUT$1]; var async = options[ASYNC]; return create(function(resolve, reject) { var xhr = new win.XMLHttpRequest(); xhr = addOnload$1(xhr, resolve, reject); xhr = addOnerror$1(xhr, reject); xhr.open(method, url, async); xhr = addCredentials(xhr, credentials); xhr = addHeaders$1(xhr, headers); if (async) { xhr = addOntimeout$1(xhr, timeout, reject); } xhr.send(data); }); } function xhr(options) { return createXhrPromise(window, options); } function createOptions(url, params, timeout) { var result = {}; result[METHOD] = GET; result[URL] = createUrl(url, params); result[TIMEOUT$1] = timeout; return result; } function isSuccess(status) { return (status >= 200 && status < 300) || status === 304; } function createOption(res) { var status = res.status; if (!isSuccess(status)) { return null; } var content = res.response; if (isBlank(content)) { return null; } var result = {}; result.type = HTML; result.content = content; return result; } function createHtmlOption(option) { var content = option.content; var config = getConfig(); var timeout = config[TIMEOUT$1]; return xhr(createOptions(content, {}, timeout)) .then(createOption) ["catch"](function() { return null; }); } var CLICK_TRACK_PATTERN = /CLKTRK#(\S+)/; var CLICK_TRACK_REPLACE_PATTERN = /CLKTRK#(\S+)\s/; function getClickTrackNodeId(action) { var selector = action[SELECTOR]; if (isBlank(selector)) { return ""; } var result = CLICK_TRACK_PATTERN.exec(selector); if (isEmpty(result) || result.length !== 2) { return ""; } return result[1]; } function getContent(id, content) { var div = document.createElement(DIV_TAG); div.innerHTML = content; var firstElement = div.firstElementChild; if (isNil(firstElement)) { return content; } firstElement.id = id; return firstElement.outerHTML; } function processClickTrackId(action) { var content = action[CONTENT]; var nodeId = getClickTrackNodeId(action); if (isBlank(nodeId) || isBlank(content)) { return action; } var selector = action[SELECTOR]; action[SELECTOR] = selector.replace(CLICK_TRACK_REPLACE_PATTERN, ""); action[CONTENT] = getContent(nodeId, content); return action; } var notNull$1 = function notNull(val) { return !isNil(val); }; function hasSelector$1(action) { var selector = action.selector; return !isNil(selector); } function setHtml$1(action) { if (!hasSelector$1(action)) { return null; } var result = processClickTrackId(action); var content = result[CONTENT]; if (!isString(content)) { logDebug(EMPTY_CONTENT, result); return null; } return result; } function setText$1(action) { if (!hasSelector$1(action)) { return null; } var result = processClickTrackId(action); var content = result[CONTENT]; if (!isString(content)) { logDebug(EMPTY_CONTENT, result); return null; } return result; } function appendHtml(action) { if (!hasSelector$1(action)) { return null; } var result = processClickTrackId(action); var content = result[CONTENT]; if (!isString(content)) { logDebug(EMPTY_CONTENT, result); return null; } return result; } function prependHtml(action) { if (!hasSelector$1(action)) { return null; } var result = processClickTrackId(action); var content = result[CONTENT]; if (!isString(content)) { logDebug(EMPTY_CONTENT, result); return null; } return result; } function replaceHtml(action) { if (!hasSelector$1(action)) { return null; } var result = processClickTrackId(action); var content = result[CONTENT]; if (!isString(content)) { logDebug(EMPTY_CONTENT, result); return null; } return result; } function insertBefore(action) { if (!hasSelector$1(action)) { return null; } var result = processClickTrackId(action); var content = result[CONTENT]; if (!isString(content)) { logDebug(EMPTY_CONTENT, result); return null; } return result; } function insertAfter(action) { if (!hasSelector$1(action)) { return null; } var result = processClickTrackId(action); var content = result[CONTENT]; if (!isString(content)) { logDebug(EMPTY_CONTENT, result); return null; } return result; } function customCode(action) { if (!hasSelector$1(action)) { return null; } var content = action[CONTENT]; if (!isString(content)) { logDebug(EMPTY_CONTENT, action); return null; } return action; } function setAttribute(action) { if (!hasSelector$1(action)) { return null; } var content = action[CONTENT]; if (!isObject(content)) { logDebug(EMPTY_ATTRIBUTE, action); return null; } return action; } function setImageSource(action) { if (!hasSelector$1(action)) { return null; } var content = action[CONTENT]; if (!isString(content)) { logDebug(EMPTY_IMAGE_URL, action); return null; } return action; } function setStyle(action) { if (!hasSelector$1(action)) { return null; } var content = action[CONTENT]; if (!isObject(content)) { logDebug(EMPTY_PROPERTY, action); return null; } return action; } function resize(action) { if (!hasSelector$1(action)) { return null; } var content = action[CONTENT]; if (!isObject(content)) { logDebug(EMPTY_SIZES, action); return null; } return action; } function move(action) { if (!hasSelector$1(action)) { return null; } var content = action[CONTENT]; if (!isObject(content)) { logDebug(EMPTY_COORDINATES, action); return null; } return action; } function remove$1(action) { if (!hasSelector$1(action)) { return null; } return action; } function rearrange(action) { if (!hasSelector$1(action)) { return null; } var content = action[CONTENT]; if (!isObject(content)) { logDebug(EMPTY_REARRANGE, action); return null; } return action; } function redirect(action) { var content = action.content; if (isBlank(content)) { logDebug(EMPTY_URL, action); return null; } action.content = createRedirectUrl(content, {}); return action; } function processAction(action) { var type = action[TYPE]; if (isBlank(type)) { return null; } switch (type) { case SET_HTML: return setHtml$1(action); case SET_TEXT: return setText$1(action); case APPEND_HTML: return appendHtml(action); case PREPEND_HTML: return prependHtml(action); case REPLACE_HTML: return replaceHtml(action); case INSERT_BEFORE: return insertBefore(action); case INSERT_AFTER: return insertAfter(action); case CUSTOM_CODE: return customCode(action); case SET_ATTRIBUTE: return setAttribute(action); case SET_IMAGE_SOURCE: return setImageSource(action); case SET_STYLE: return setStyle(action); case RESIZE: return resize(action); case MOVE: return move(action); case REMOVE: return remove$1(action); case REARRANGE: return rearrange(action); case REDIRECT: return redirect(action); default: return null; } } function createActionsOption(option) { var actions = option[CONTENT]; if (!isArray(actions)) { return null; } if (isEmpty(actions)) { return null; } var processedActions = filter(notNull$1, map(processAction, actions)); if (isEmpty(processedActions)) { return null; } var result = assign({}, option); result.content = processedActions; return result; } function getTokens() { var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var options = value.options; if (!isArray(options)) { return []; } if (isEmpty(options)) { return []; } return filterNotNil(map(selectResponseTokens, options)); } function getResponseTokens() { var response = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _response$execute = response.execute, execute = _response$execute === void 0 ? {} : _response$execute, _response$prefetch = response.prefetch, prefetch = _response$prefetch === void 0 ? {} : _response$prefetch; var _execute$pageLoad = execute.pageLoad, pageLoad = _execute$pageLoad === void 0 ? {} : _execute$pageLoad, _execute$mboxes = execute.mboxes, mboxes = _execute$mboxes === void 0 ? [] : _execute$mboxes; var _prefetch$mboxes = prefetch.mboxes, prefetchMboxes = _prefetch$mboxes === void 0 ? [] : _prefetch$mboxes, _prefetch$views = prefetch.views, views = _prefetch$views === void 0 ? [] : _prefetch$views; var pageLoadTokens = getTokens(pageLoad); var mboxesTokens = flatten(map(getTokens, mboxes)); var prefetchMboxesTokens = flatten(map(getTokens, prefetchMboxes)); var viewsTokens = flatten(map(getTokens, views)); return flatten([ pageLoadTokens, mboxesTokens, prefetchMboxesTokens, viewsTokens ]); } function getRedirect() { var response = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _response$execute = response.execute, execute = _response$execute === void 0 ? {} : _response$execute; var _execute$pageLoad = execute.pageLoad, pageLoad = _execute$pageLoad === void 0 ? {} : _execute$pageLoad, _execute$mboxes = execute.mboxes, mboxes = _execute$mboxes === void 0 ? [] : _execute$mboxes; var pageLoadOpts = selectOptions(pageLoad) || []; var mboxesOpts = flatten(filterNotNil(map(selectOptions, mboxes))); var options = flatten([pageLoadOpts, mboxesOpts]); var actions = flatten(map(selectContent, filter(isActions, options))); var redirectOptions = filter(isRedirect, options); var redirectActions = filter(isRedirect, actions); var redirects = redirectOptions.concat(redirectActions); var result = {}; if (isEmpty(redirects)) { return result; } var redirect = redirects[0]; var url = redirect.content; if (isBlank(url)) { return result; } result.url = url; return result; } function getAnalytics() { var item = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var analytics = item.analytics; return isEmpty(analytics) ? [] : [analytics]; } function getAnalyticsDetails() { var response = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _response$execute = response.execute, execute = _response$execute === void 0 ? {} : _response$execute, _response$prefetch = response.prefetch, prefetch = _response$prefetch === void 0 ? {} : _response$prefetch; var _execute$pageLoad = execute.pageLoad, pageLoad = _execute$pageLoad === void 0 ? {} : _execute$pageLoad, _execute$mboxes = execute.mboxes, mboxes = _execute$mboxes === void 0 ? [] : _execute$mboxes; var _prefetch$mboxes = prefetch.mboxes, prefetchMboxes = _prefetch$mboxes === void 0 ? [] : _prefetch$mboxes, _prefetch$views = prefetch.views, views = _prefetch$views === void 0 ? [] : _prefetch$views; var pageLoadDetails = getAnalytics(pageLoad); var mboxesDetails = flatten(map(getAnalytics, mboxes)); var prefetchMboxesDetails = flatten(map(getAnalytics, prefetchMboxes)); var viewsDetails = flatten(map(getAnalytics, views)); return flatten([ pageLoadDetails, mboxesDetails, prefetchMboxesDetails, viewsDetails ]); } function addContextDetails(to, from) { to.parameters = from.parameters; to.profileParameters = from.profileParameters; to.order = from.order; to.product = from.product; } function addOptionsAndMetrics(result, arr) { var options = arr[0]; var metrics = arr[1]; var hasOptions = !isEmpty(options); var hasMetrics = !isEmpty(metrics); if (!hasOptions && !hasMetrics) { return result; } if (hasOptions) { result.options = options; } if (hasMetrics) { result.metrics = metrics; } return result; } function processOption(option) { var type = option.type; switch (type) { case REDIRECT: return resolve(createRedirectOption(option)); case DYNAMIC: return createHtmlOption(option); case ACTIONS: return resolve(createActionsOption(option)); default: return resolve(option); } } function processOptions$1(options, predicate) { if (!isArray(options)) { return resolve([]); } if (isEmpty(options)) { return resolve([]); } var validOptions = filter(predicate, options); if (isEmpty(validOptions)) { return resolve([]); } var optionsPromises = map(function(opt) { return processOption(opt); }, validOptions); return all(optionsPromises).then(filterNotNil); } function processMetrics(metrics, predicate) { if (!isArray(metrics)) { return resolve([]); } if (isEmpty(metrics)) { return resolve([]); } return resolve(filter(predicate, metrics)); } function processPageLoad(httpContext) { var response = httpContext.response; var execute = response.execute; if (!isObject(execute)) { return resolve(null); } var pageLoad = execute.pageLoad; if (!isObject(pageLoad)) { return resolve(null); } var analytics = pageLoad.analytics, options = pageLoad.options, metrics = pageLoad.metrics; var result = { analytics: analytics }; return all([ processOptions$1(options, isValidOption), processMetrics(metrics, isValidSelectorMetric) ]).then(function(arr) { return addOptionsAndMetrics(result, arr); }); } function processExecuteMbox(item) { var name = item.name, analytics = item.analytics, options = item.options, metrics = item.metrics; var result = { name: name, analytics: analytics }; return all([ processOptions$1(options, isValidOption), processMetrics(metrics, isValidMetric) ]).then(function(arr) { return addOptionsAndMetrics(result, arr); }); } function processExecuteMboxes(httpContext) { var response = httpContext.response; var execute = response.execute; if (!isObject(execute)) { return resolve([]); } var mboxes = execute.mboxes; if (!isArray(mboxes) || isEmpty(mboxes)) { return resolve([]); } var validMboxes = filter(isValidMbox, mboxes); return all(map(processExecuteMbox, validMboxes)).then(filterNotNil); } function sameMbox(mbox, index, name) { return mbox.index === index && mbox.name === name; } function getRequestMbox(request, index, name) { var _request$prefetch = request.prefetch, prefetch = _request$prefetch === void 0 ? {} : _request$prefetch; var _prefetch$mboxes = prefetch.mboxes, mboxes = _prefetch$mboxes === void 0 ? [] : _prefetch$mboxes; if (isEmpty(mboxes)) { return null; } return first( filter(function(item) { return sameMbox(item, index, name); }, mboxes) ); } function processPrefetchMbox(request, item) { var index = item.index, name = item.name, state = item.state, analytics = item.analytics, options = item.options, metrics = item.metrics; var requestMbox = getRequestMbox(request, index, name); var result = { name: name, state: state, analytics: analytics }; if (!isNil(requestMbox)) { addContextDetails(result, requestMbox); } return all([ processOptions$1(options, isValidOptionEventToken), processMetrics(metrics, isValidMetric) ]).then(function(arr) { return addOptionsAndMetrics(result, arr); }); } function processPrefetchMboxes(httpContext) { var request = httpContext.request, response = httpContext.response; var prefetch = response.prefetch; if (!isObject(prefetch)) { return resolve([]); } var mboxes = prefetch.mboxes; if (!isArray(mboxes) || isEmpty(mboxes)) { return resolve([]); } var validMboxes = filter(isValidPrefetchMbox, mboxes); var process = function process(item) { return processPrefetchMbox(request, item); }; return all(map(process, validMboxes)).then(filterNotNil); } function getRequestView(request) { var _request$prefetch2 = request.prefetch, prefetch = _request$prefetch2 === void 0 ? {} : _request$prefetch2; var _prefetch$views = prefetch.views, views = _prefetch$views === void 0 ? [] : _prefetch$views; if (isEmpty(views)) { return null; } return views[0]; } function processView(request, view) { var name = view.name, state = view.state, analytics = view.analytics, options = view.options, metrics = view.metrics; var requestView = getRequestView(request); var result = { name: name.toLowerCase(), state: state, analytics: analytics }; if (!isNil(requestView)) { addContextDetails(result, requestView); } return all([ processOptions$1(options, isValidOptionEventToken), processMetrics(metrics, isValidSelectorMetric) ]).then(function(arr) { return addOptionsAndMetrics(result, arr); }); } function processPrefetchViews(httpContext) { var request = httpContext.request, response = httpContext.response; var prefetch = response.prefetch; if (!isObject(prefetch)) { return resolve([]); } var views = prefetch.views; if (!isArray(views) || isEmpty(views)) { return resolve([]); } var validViews = filter(isValidView, views); var process = function process(view) { return processView(request, view); }; return all(map(process, validViews)).then(filterNotNil); } function processPrefetchMetrics(httpContext) { var response = httpContext.response; var prefetch = response.prefetch; if (!isObject(prefetch)) { return resolve([]); } var metrics = prefetch.metrics; return processMetrics(metrics, isValidSelectorMetric); } function processMeta(httpContext) { var response = httpContext.response; var remoteMboxes = response.remoteMboxes, remoteViews = response.remoteViews, decisioningMethod = response.decisioningMethod; var meta = {}; if (isObject(remoteMboxes)) { meta.remoteMboxes = remoteMboxes; } if (isObject(remoteViews)) { meta.remoteViews = remoteViews; } if (isString(decisioningMethod)) { meta.decisioningMethod = decisioningMethod; } return resolve(meta); } function createResponseContext(arr) { var pageLoad = arr[0]; var mboxes = arr[1]; var prefetchMboxes = arr[2]; var views = arr[3]; var prefetchMetrics = arr[4]; var meta = arr[5]; var result = {}; var execute = {}; if (isObject(pageLoad)) { execute.pageLoad = pageLoad; } if (!isEmpty(mboxes)) { execute.mboxes = mboxes; } var prefetch = {}; if (!isEmpty(prefetchMboxes)) { prefetch.mboxes = prefetchMboxes; } if (!isEmpty(views)) { prefetch.views = views; } if (!isEmpty(prefetchMetrics)) { prefetch.metrics = prefetchMetrics; } if (!isEmpty(execute)) { result.execute = execute; } if (!isEmpty(prefetch)) { result.prefetch = prefetch; } if (!isEmpty(meta)) { result.meta = meta; } return result; } function processResponse(httpContext) { var handlers = [handleTraces, handleDeviceId, handleEdgeCluster]; var context = flow(handlers)(httpContext); var pageLoad = processPageLoad(context); var mboxes = processExecuteMboxes(context); var prefetchMboxes = processPrefetchMboxes(context); var views = processPrefetchViews(context); var prefetchMetrics = processPrefetchMetrics(context); var meta = processMeta(context); var promises = [ pageLoad, mboxes, prefetchMboxes, views, prefetchMetrics, meta ]; return all(promises).then(createResponseContext); } function hasRedirect(response) { var redirect = getRedirect(response); return !isEmpty(redirect); } function createEventPayload(response) { var responseTokens = getResponseTokens(response); var payload = {}; if (!isEmpty(responseTokens)) { payload.responseTokens = responseTokens; } return payload; } function handleRequestSuccess(response) { var payload = createEventPayload(response); var analyticsDetails = getAnalyticsDetails(response); if (!isEmpty(analyticsDetails)) { payload.analyticsDetails = analyticsDetails; } logDebug(REQUEST_SUCCEEDED, response); notifyRequestSucceeded(payload, hasRedirect(response)); return resolve(response); } function handleMboxRequestSuccess(mbox, response) { var payload = createEventPayload(response); payload.mbox = mbox; logDebug(REQUEST_SUCCEEDED, response); notifyRequestSucceeded(payload, hasRedirect(response)); return resolve(response); } function handleRequestError(error) { logWarn(REQUEST_FAILED, error); notifyRequestFailed({ error: error }); return reject(error); } function handleMboxRequestError(mbox, error) { logWarn(REQUEST_FAILED, error); notifyRequestFailed({ mbox: mbox, error: error }); return reject(error); } function executeGetOffer(options) { var config = getConfig(); var globalMbox = config[GLOBAL_MBOX_NAME]; var mbox = options.mbox, timeout = options.timeout; var params = isObject(options.params) ? options.params : {}; var successFunc = function successFunc(response) { return handleMboxRequestSuccess(mbox, response); }; var errorFunc = function errorFunc(error) { return handleMboxRequestError(mbox, error); }; var payload = {}; var execute = {}; if (mbox === globalMbox) { execute.pageLoad = {}; } else { execute.mboxes = [ { index: 0, name: mbox } ]; } payload.execute = execute; var analytics = createAnalytics(mbox, payload); if (!isEmpty(analytics)) { var experienceCloud = {}; experienceCloud.analytics = analytics; payload.experienceCloud = experienceCloud; } notifyRequestStart({ mbox: mbox }); return createAsyncDeliveryRequest(payload, params) .then(function(request) { return executeRequest(options, request, timeout); }) .then(processResponse) .then(successFunc) ["catch"](errorFunc); } function executeGetOffers(options) { var config = getConfig(); var globalMbox = config[GLOBAL_MBOX_NAME]; var _options$consumerId = options.consumerId, consumerId = _options$consumerId === void 0 ? globalMbox : _options$consumerId, request = options.request, timeout = options.timeout; var analytics = createAnalytics(consumerId, request); var successFunc = function successFunc(response) { return handleRequestSuccess(response); }; var errorFunc = function errorFunc(error) { return handleRequestError(error); }; if (!isEmpty(analytics)) { var experienceCloud = request.experienceCloud || {}; experienceCloud.analytics = analytics; request.experienceCloud = experienceCloud; } notifyRequestStart({}); return createAsyncDeliveryRequest(request, {}) .then(function(deliveryRequest) { return executeRequest(options, deliveryRequest, timeout); }) .then(processResponse) .then(successFunc) ["catch"](errorFunc); } function addClass(cssClass, selector) { return select(selector).addClass(cssClass); } function setCss(style, selector) { return select(selector).css(style); } function getAttr(name, selector) { return select(selector).attr(name); } function setAttr(name, value, selector) { return select(selector).attr(name, value); } function removeAttr(name, selector) { return select(selector).removeAttr(name); } function copyAttr(from, to, selector) { var value = getAttr(from, selector); if (isNotBlank(value)) { removeAttr(from, selector); setAttr(to, value, selector); } } function hasAttr(name, selector) { return isNotBlank(getAttr(name, selector)); } var VISIBILITY_STATE = "visibilityState"; var VISIBLE = "visible"; var DELAY = 100; function createError$1(selector) { return new Error("Could not find: " + selector); } function awaitUsingMutationObserver(selector, timeout, queryFunc) { return create(function(res, rej) { var mo = getMutationObserver(function() { var elems = queryFunc(selector); if (!isEmpty(elems)) { mo.disconnect(); res(elems); } }); delay(function() { mo.disconnect(); rej(createError$1(selector)); }, timeout); mo.observe(document, { childList: true, subtree: true }); }); } function canUseRequestAnimation() { return document[VISIBILITY_STATE] === VISIBLE; } function awaitUsingRequestAnimation(selector, timeout, queryFunc) { return create(function(res, rej) { function execute() { var elems = queryFunc(selector); if (!isEmpty(elems)) { res(elems); return; } window.requestAnimationFrame(execute); } execute(); delay(function() { rej(createError$1(selector)); }, timeout); }); } function awaitUsingTimer(selector, timeout, queryFunc) { return create(function(res, rej) { function execute() { var elems = queryFunc(selector); if (!isEmpty(elems)) { res(elems); return; } delay(execute, DELAY); } execute(); delay(function() { rej(createError$1(selector)); }, timeout); }); } function awaitSelector(selector) { var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getConfig()[SELECTORS_POLLING_TIMEOUT]; var queryFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : select; var elems = queryFunc(selector); if (!isEmpty(elems)) { return resolve(elems); } if (canUseMutationObserver()) { return awaitUsingMutationObserver(selector, timeout, queryFunc); } if (canUseRequestAnimation()) { return awaitUsingRequestAnimation(selector, timeout, queryFunc); } return awaitUsingTimer(selector, timeout, queryFunc); } function getDataSrc(item) { return getAttr(DATA_SRC, item); } function hasDataSrc(item) { return hasAttr(DATA_SRC, item); } function disableImages(html) { forEach(function(item) { return copyAttr(SRC, DATA_SRC, item); }, toArray(find(IMAGE_TAG, html))); return html; } function enableImages(html) { forEach(function(item) { return copyAttr(DATA_SRC, SRC, item); }, toArray(find(IMAGE_TAG, html))); return html; } function loadImage(src) { logDebug(LOADING_IMAGE, src); return getAttr(SRC, setAttr(SRC, src, wrap("<" + IMAGE_TAG + "/>"))); } function loadImages(html) { var elements = filter(hasDataSrc, toArray(find(IMAGE_TAG, html))); if (isEmpty(elements)) { return html; } forEach(loadImage, map(getDataSrc, elements)); return html; } function renderImages(html) { return flow([disableImages, loadImages, enableImages])(html); } function getUrl(item) { var src = getAttr(SRC, item); return isNotBlank(src) ? src : null; } function getScriptsUrls(html) { return filter(isNotBlank, map(getUrl, toArray(find(SCRIPT, html)))); } function loadScripts(urls) { return reduce( function(acc, url) { return acc.then(function() { logDebug(REMOTE_SCRIPT, url); addClientTrace({ remoteScript: url }); return loadScript(url); }); }, resolve(), urls ); } function handleRenderingSuccess(action) { return action; } function handleRenderingError(action, error) { logWarn(UNEXPECTED_ERROR, error); addClientTrace({ action: action, error: error }); return action; } function renderHtml(renderFunc, action) { var container = select(action[SELECTOR]); var html = renderImages(fragment(action[CONTENT])); var urls = getScriptsUrls(html); var result; try { result = resolve(renderFunc(container, html)); } catch (err) { return reject(handleRenderingError(action, err)); } if (isEmpty(urls)) { return result .then(function() { return handleRenderingSuccess(action); }) ["catch"](function(error) { return handleRenderingError(action, error); }); } return result .then(function() { return loadScripts(urls); }) .then(function() { return handleRenderingSuccess(action); }) ["catch"](function(error) { return handleRenderingError(action, error); }); } var HEAD_TAGS_SELECTOR = SCRIPT_TAG + "," + LINK_TAG + "," + STYLE_TAG; function getHeadContent(content) { var container = fragment(content); var result = reduce( function(acc, elem) { acc.push(getHtml(fragment(elem))); return acc; }, [], toArray(find(HEAD_TAGS_SELECTOR, container)) ); return join("", result); } function preprocessAction(action) { var result = assign({}, action); var content = result[CONTENT]; if (isBlank(content)) { return result; } var container = select(result[SELECTOR]); if (!is(HEAD_TAG, container)) { return result; } result[TYPE] = APPEND_HTML; result[CONTENT] = getHeadContent(content); return result; } function addPxIfRequired(value) { var hasPx = value.indexOf("px") === value.length - 2; return hasPx ? value : value + "px"; } function setHtmlRenderFunc(container, html) { return setHtml(getHtml(html), container); } function setHtml$2(action) { logDebug(ACTION_RENDERING, action); return renderHtml(setHtmlRenderFunc, action); } function setText$2(action) { var container = select(action[SELECTOR]); var content = action[CONTENT]; logDebug(ACTION_RENDERING, action); addClientTrace({ action: action }); setText(content, container); return resolve(action); } function appendHtmlRenderFunc(container, html) { return append(getHtml(html), container); } function appendHtml$1(action) { logDebug(ACTION_RENDERING, action); return renderHtml(appendHtmlRenderFunc, action); } function prependHtmlRenderFunc(container, html) { return prepend(getHtml(html), container); } function prependHtml$1(action) { logDebug(ACTION_RENDERING, action); return renderHtml(prependHtmlRenderFunc, action); } function replaceHtmlRenderFunc(container, html) { var parentContainer = parent(container); remove(before(getHtml(html), container)); return parentContainer; } function replaceHtml$1(action) { logDebug(ACTION_RENDERING, action); return renderHtml(replaceHtmlRenderFunc, action); } function insertBeforeRenderFunc(container, html) { return prev(before(getHtml(html), container)); } function insertBefore$1(action) { logDebug(ACTION_RENDERING, action); return renderHtml(insertBeforeRenderFunc, action); } function insertAfterRenderFunc(container, html) { return next(after(getHtml(html), container)); } function insertAfter$1(action) { logDebug(ACTION_RENDERING, action); return renderHtml(insertAfterRenderFunc, action); } function customCodeRenderFunc(container, html) { return parent(before(getHtml(html), container)); } function customCode$1(action) { logDebug(ACTION_RENDERING, action); return renderHtml(customCodeRenderFunc, action); } function setImageSource$1(action) { var content = action[CONTENT]; var container = select(action[SELECTOR]); logDebug(ACTION_RENDERING, action); addClientTrace({ action: action }); removeAttr(SRC, container); setAttr(SRC, loadImage(content), container); return resolve(action); } function setAttribute$1(action) { var content = action[CONTENT]; var container = select(action[SELECTOR]); logDebug(ACTION_RENDERING, action); addClientTrace({ action: action }); forEach(function(value, key) { return setAttr(key, value, container); }, content); return resolve(action); } function setCssWithPriority(container, style, priority) { forEach(function(elem) { forEach(function(value, key) { return elem.style.setProperty(key, value, priority); }, style); }, toArray(container)); } function setStyle$1(action) { var container = select(action[SELECTOR]); var content = action[CONTENT]; var priority = content[PRIORITY]; logDebug(ACTION_RENDERING, action); addClientTrace({ action: action }); if (isBlank(priority)) { setCss(content, container); } else { setCssWithPriority(container, content, priority); } return resolve(action); } function resize$1(action) { var container = select(action[SELECTOR]); var content = action[CONTENT]; content[WIDTH] = addPxIfRequired(content[WIDTH]); content[HEIGHT] = addPxIfRequired(content[HEIGHT]); logDebug(ACTION_RENDERING, action); addClientTrace({ action: action }); setCss(content, container); return resolve(action); } function move$1(action) { var container = select(action[SELECTOR]); var content = action[CONTENT]; content[LEFT] = addPxIfRequired(content[LEFT]); content[TOP] = addPxIfRequired(content[TOP]); logDebug(ACTION_RENDERING, action); addClientTrace({ action: action }); setCss(content, container); return resolve(action); } function remove$2(action) { var container = select(action[SELECTOR]); logDebug(ACTION_RENDERING, action); addClientTrace({ action: action }); remove(container); return resolve(action); } function rearrange$1(action) { var container = select(action[SELECTOR]); var content = action[CONTENT]; var from = content[FROM]; var to = content[TO]; var elements = toArray(children(container)); var elemFrom = elements[from]; var elemTo = elements[to]; if (!exists$2(elemFrom) || !exists$2(elemTo)) { logDebug(REARRANGE_MISSING, action); return reject(action); } logDebug(ACTION_RENDERING, action); addClientTrace({ action: action }); if (from < to) { after(elemFrom, elemTo); } else { before(elemFrom, elemTo); } return resolve(action); } function executeRenderAction(action) { var processedAction = preprocessAction(action); var type = processedAction[TYPE]; switch (type) { case SET_HTML: return setHtml$2(processedAction); case SET_TEXT: return setText$2(processedAction); case APPEND_HTML: return appendHtml$1(processedAction); case PREPEND_HTML: return prependHtml$1(processedAction); case REPLACE_HTML: return replaceHtml$1(processedAction); case INSERT_BEFORE: return insertBefore$1(processedAction); case INSERT_AFTER: return insertAfter$1(processedAction); case CUSTOM_CODE: return customCode$1(processedAction); case SET_ATTRIBUTE: return setAttribute$1(processedAction); case SET_IMAGE_SOURCE: return setImageSource$1(processedAction); case SET_STYLE: return setStyle$1(processedAction); case RESIZE: return resize$1(processedAction); case MOVE: return move$1(processedAction); case REMOVE: return remove$2(processedAction); case REARRANGE: return rearrange$1(processedAction); default: return resolve(processedAction); } } var ACTION_KEY_ATTR = "at-action-key"; function isClickTracking(action) { return action[TYPE] === TRACK_CLICK || action[TYPE] === SIGNAL_CLICK; } function hasValidSelector(action) { var selector = action[SELECTOR]; return isNotBlank(selector) || isElement(selector); } function markAsRendered(action) { var key = action.key; if (isBlank(key)) { return; } if (!hasValidSelector(action)) { return; } var selector = action[SELECTOR]; setAttr(ACTION_KEY_ATTR, key, selector); } function removeActionCssHiding(action) { var cssSelector = action[CSS_SELECTOR]; if (isBlank(cssSelector)) { return; } removeActionHidingStyle(cssSelector); } function displayAction(action) { if (!hasValidSelector(action)) { removeActionCssHiding(action); return; } var selector = action[SELECTOR]; if (isClickTracking(action)) { addClass(CLICK_TRACKING_CSS_CLASS, selector); return; } addClass(MARKER_CSS_CLASS, selector); removeActionCssHiding(action); } function displayActions(actions) { forEach(displayAction, actions); } function shouldRender(action) { var key = action.key; if (isBlank(key)) { return true; } var type = action[TYPE]; if (type === CUSTOM_CODE) { return action[PAGE]; } var selector = action[SELECTOR]; var currentKey = getAttr(ACTION_KEY_ATTR, selector); if (currentKey !== key) { return true; } if (currentKey === key) { return !action[PAGE]; } return false; } function renderAwaitedAction(action) { if (!shouldRender(action)) { displayAction(action); return action; } return executeRenderAction(action) .then(function() { logDebug(ACTION_RENDERED, action); addClientTrace({ action: action }); markAsRendered(action); displayAction(action); return action; }) ["catch"](function(error) { logWarn(UNEXPECTED_ERROR, error); addClientTrace({ action: action, error: error }); displayAction(action); var result = assign({}, action); result[ERROR] = true; return result; }); } function postProcess(actions) { var errorActions = filter(function(e) { return e[ERROR] === true; }, actions); if (isEmpty(errorActions)) { return resolve(); } displayActions(errorActions); return reject(actions); } function awaitAction(action) { var selector = action[SELECTOR]; return awaitSelector(selector) .then(function() { return action; }) ["catch"](function() { var result = assign({}, action); result[ERROR] = true; return result; }); } function awaitAndRenderAction(action) { return awaitAction(action).then(renderAwaitedAction); } function executeRenderActions(actions) { var promises = map(awaitAndRenderAction, actions); return all(promises).then(postProcess); } function addEventListener(type, func, selector) { return select(selector).on(type, func); } function removeEventListener(type, func, selector) { return select(selector).off(type, func); } var METRIC_ELEMENT_NOT_FOUND = "metric element not found"; function executeMetric(metric) { var selector = metric[SELECTOR]; return awaitSelector(selector) .then(function() { addClientTrace({ metric: metric }); var foundMetric = assign( { found: true }, metric ); return foundMetric; }) ["catch"](function() { logWarn(METRIC_ELEMENT_NOT_FOUND, metric); addClientTrace({ metric: metric, message: METRIC_ELEMENT_NOT_FOUND }); return metric; }); } function saveView(view) { var key = view.name; var views = getItem(VIEWS) || {}; views[key] = view; setItem(VIEWS, views); } function findView(key) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var _options$page = options.page, page = _options$page === void 0 ? true : _options$page; var views = getItem(VIEWS) || {}; var result = views[key]; if (isNil(result)) { return result; } var impressionId = options.impressionId; if (isNil(impressionId)) { return result; } return assign( { page: page, impressionId: impressionId }, result ); } function persistViews(views) { forEach(saveView, views); } var NAVIGATOR = "navigator"; var SEND_BEACON = "sendBeacon"; function executeSendBeacon(win, url, data) { return win[NAVIGATOR][SEND_BEACON](url, data); } function executeSyncXhr(http, url, data) { var headers = {}; headers[CONTENT_TYPE] = [TEXT_PLAIN]; var options = {}; options[METHOD] = POST$1; options[URL] = url; options[DATA$1] = data; options[CREDENTIALS] = true; options[ASYNC] = false; options[HEADERS] = headers; try { http(options); } catch (error) { return false; } return true; } function isBeaconSupported(win) { return NAVIGATOR in win && SEND_BEACON in win[NAVIGATOR]; } function sendBeacon(url, data) { if (isBeaconSupported(window)) { return executeSendBeacon(window, url, data); } return executeSyncXhr(xhr, url, data); } var SEND_BEACON_SUCCESS = "Beacon data sent"; var SEND_BEACON_ERROR = "Beacon data sent failed"; var VIEW_TRIGGERED = "View triggered notification"; var VIEW_RENDERED = "View rendered notification"; var MBOXES_RENDERED = "Mboxes rendered notification"; var EVENT_HANDLER = "Event handler notification"; var MBOX_EVENT_HANDLER = "Mbox event handler notification"; var VIEW_EVENT_HANDLER = "View event handler notification"; var PREFETCH_MBOXES = "prefetchMboxes"; var RENDERED = "rendered"; var TRIGGERED = "triggered"; function createRequest(consumerId) { var analytics = createAnalytics(consumerId, {}); var request = { context: { beacon: true } }; if (!isEmpty(analytics)) { var experienceCloud = {}; experienceCloud.analytics = analytics; request.experienceCloud = experienceCloud; } return request; } function createSyncNotificationRequest(consumerId, params, notifications) { var request = createRequest(consumerId); var result = createSyncDeliveryRequest(request, params); result.notifications = notifications; return result; } function createAsyncNotificationRequest(consumerId, params, notifications) { var request = createRequest(consumerId); return createAsyncDeliveryRequest(request, params).then(function(result) { result.notifications = notifications; return result; }); } function createNotification(item, type, tokens) { var id = uuid(); var timestamp = now(); var parameters = item.parameters, profileParameters = item.profileParameters, order = item.order, product = item.product; var result = { id: id, type: type, timestamp: timestamp, parameters: parameters, profileParameters: profileParameters, order: order, product: product }; if (isEmpty(tokens)) { return result; } result.tokens = tokens; return result; } function createMboxNotification(mbox, type, tokens) { var name = mbox.name, state = mbox.state; var notification = createNotification(mbox, type, tokens); notification.mbox = { name: name, state: state }; return notification; } function createViewNotification(view, type, tokens) { var name = view.name, state = view.state; var notification = createNotification(view, type, tokens); notification.view = { name: name, state: state }; return notification; } function executeBeaconNotification(request) { var config = getConfig(); var url = createRequestUrl(config); var data = JSON.stringify(request); if (sendBeacon(url, data)) { logDebug(SEND_BEACON_SUCCESS, url, request); return true; } logWarn(SEND_BEACON_ERROR, url, request); return false; } function sendEventNotification(source, type, token) { var config = getConfig(); var globalMbox = config[GLOBAL_MBOX_NAME]; var params = getTargetPageParams(globalMbox); var requestDetails = createRequestDetails({}, params); var notification = createNotification(requestDetails, type, [token]); var request = createSyncNotificationRequest(uuid(), params, [notification]); logDebug(EVENT_HANDLER, source, notification); addClientTrace({ source: source, event: type, request: request }); executeBeaconNotification(request); } function sendMboxEventNotification(name, type, token) { var params = getTargetPageParams(name); var requestDetails = createRequestDetails({}, params); var notification = createNotification(requestDetails, type, [token]); notification.mbox = { name: name }; var request = createSyncNotificationRequest(uuid(), params, [notification]); logDebug(MBOX_EVENT_HANDLER, name, notification); addClientTrace({ mbox: name, event: type, request: request }); executeBeaconNotification(request); } function sendMboxesRenderedNotifications(items) { var config = getConfig(); var globalMbox = config[GLOBAL_MBOX_NAME]; var notifications = []; var type = DISPLAY_EVENT; forEach(function(item) { var mbox = item.mbox, data = item.data; if (isNil(data)) { return; } var _data$eventTokens = data.eventTokens, eventTokens = _data$eventTokens === void 0 ? [] : _data$eventTokens; if (isEmpty(eventTokens)) { return; } notifications.push(createMboxNotification(mbox, type, eventTokens)); }, items); if (isEmpty(notifications)) { return; } var request = createSyncNotificationRequest(globalMbox, {}, notifications); logDebug(MBOXES_RENDERED, notifications); addClientTrace({ source: PREFETCH_MBOXES, event: RENDERED, request: request }); executeBeaconNotification(request); } function sendViewEventNotification(name, type, token) { var config = getConfig(); var globalMbox = config[GLOBAL_MBOX_NAME]; var params = getTargetPageParams(globalMbox); var requestDetails = createRequestDetails({}, params); var notification = createNotification(requestDetails, type, [token]); notification.view = { name: name }; var request = createSyncNotificationRequest(uuid(), params, [notification]); logDebug(VIEW_EVENT_HANDLER, name, notification); addClientTrace({ view: name, event: type, request: request }); executeBeaconNotification(request); } function sendViewTriggeredNotifications(options) { var name = options.viewName, impressionId = options.impressionId; var config = getConfig(); var globalMbox = config[GLOBAL_MBOX_NAME]; var params = getTargetPageParams(globalMbox); var requestDetails = createRequestDetails({}, params); var notification = createNotification(requestDetails, DISPLAY_EVENT, []); notification.view = { name: name }; logDebug(VIEW_TRIGGERED, name); createAsyncNotificationRequest(name, params, [notification]).then(function( request ) { request.impressionId = impressionId; addClientTrace({ view: name, event: TRIGGERED, request: request }); executeBeaconNotification(request); }); } function sendViewRenderedNotifications(item) { if (isNil(item)) { return; } var view = item.view, _item$data = item.data, data = _item$data === void 0 ? {} : _item$data; var _data$eventTokens2 = data.eventTokens, eventTokens = _data$eventTokens2 === void 0 ? [] : _data$eventTokens2; if (isEmpty(eventTokens)) { return; } var name = view.name, impressionId = view.impressionId; var persistedView = findView(name); if (isNil(persistedView)) { return; } var notification = createViewNotification( persistedView, DISPLAY_EVENT, eventTokens ); var request = createSyncNotificationRequest(name, {}, [notification]); request.impressionId = impressionId; logDebug(VIEW_RENDERED, name, eventTokens); addClientTrace({ view: name, event: RENDERED, request: request }); executeBeaconNotification(request); } var CACHE$1 = {}; var PAGE_LOAD$1 = "pageLoadMetrics"; var PREFETCH = "prefetchMetrics"; var selectMetrics = prop(METRICS); var createMetricSuccess = function createMetricSuccess() { return createSuccess(METRIC); }; var createMetricError = function createMetricError(error) { return createError(METRIC, error); }; function decorateElementIfRequired(type, selector) { if (type !== CLICK) { return; } addClass(CLICK_TRACKING_CSS_CLASS, selector); } function isHandlerCached(name, key) { return !isNil(CACHE$1[name]) && !isNil(CACHE$1[name][key]); } function removePreviousHandlersFromCache(currentViewName, type, selector) { if (!isNil(CACHE$1[currentViewName])) { return; } var viewNames = keys(CACHE$1); if (isEmpty(viewNames)) { return; } forEach(function(viewName) { var handlerNames = keys(CACHE$1[viewName]); forEach(function(handlerName) { var func = CACHE$1[viewName][handlerName]; removeEventListener(type, func, selector); }, handlerNames); delete CACHE$1[viewName]; }, viewNames); } function addHandlerToCache(name, key, handler) { CACHE$1[name] = CACHE$1[name] || {}; CACHE$1[name][key] = handler; } function attachEventHandler(name, fromView, metric, notifyFunc) { var type = metric.type, selector = metric.selector, eventToken = metric.eventToken; var key = hash(type + ":" + selector + ":" + eventToken); var handler = function handler() { return notifyFunc(name, type, eventToken); }; decorateElementIfRequired(type, selector); if (!fromView) { addEventListener(type, handler, selector); return; } if (isHandlerCached(name, key)) { return; } removePreviousHandlersFromCache(name, type, selector); addHandlerToCache(name, key, handler); addEventListener(type, handler, selector); } function attachMetricEventHandlers(name, fromView, metrics, notifyFunc) { return all(map(executeMetric, metrics)) .then(function(arr) { forEach( function(metric) { return attachEventHandler(name, fromView, metric, notifyFunc); }, filter(function(metric) { return metric.found; }, arr) ); return createMetricSuccess(); }) ["catch"](createMetricError); } function executeMboxMetrics(mbox) { var name = mbox.name; return attachMetricEventHandlers( name, false, selectMetrics(mbox), sendMboxEventNotification ); } function executeViewMetrics(view) { var name = view.name; return attachMetricEventHandlers( name, true, selectMetrics(view), sendViewEventNotification ); } function executePageLoadMetrics(pageLoad) { return attachMetricEventHandlers( PAGE_LOAD$1, false, selectMetrics(pageLoad), sendEventNotification ); } function executePrefetchMetrics(prefetch) { return attachMetricEventHandlers( PREFETCH, false, selectMetrics(prefetch), sendEventNotification ); } var selectContent$1 = prop(CONTENT); var selectCssSelector = prop(CSS_SELECTOR); var createRenderSuccess = function createRenderSuccess(eventToken) { return createSuccess(RENDER, eventToken); }; var createRenderError = function createRenderError(error) { return createError(RENDER, error); }; var hasNonErrorData = function hasNonErrorData(val) { return not(isError)(val) && hasData(val); }; function hideActions(actions) { var items = map(selectCssSelector, actions); injectActionHidingStyles(filterNotBlank(items)); } function hideAllViewsActions(actions) { var items = map(selectCssSelector, actions); injectAllViewsHidingStyle(filterNotNil(items)); } function extractActions(item) { var options = filter(isActions, selectOptions(item)); return flatten(map(selectContent$1, options)); } function isValidAction(action) { return isObject(action) && action.type !== SET_JSON; } function decorateActions(actions, key, page) { return map(function(e) { return assign( { key: key, page: page }, e ); }, filter(isValidAction, actions)); } function executeRendering(option, key, page) { var eventToken = option.eventToken, content = option.content; var actions = decorateActions(content, key, page); return executeRenderActions(actions) .then(function() { return createRenderSuccess(eventToken); }) ["catch"](createRenderError); } function isValidOption$1(option) { return isObject(option) && option.type !== JSON$1; } function renderOptions(func, item) { return map(func, filter(isValidOption$1, selectOptions(item))); } function postExecuteRendering(key, item, values) { var result = _defineProperty( { status: SUCCESS }, key, item ); var errors = map(selectData, filter(isError, values)); var data = {}; if (!isEmpty(errors)) { result.status = ERROR; data.errors = errors; } if (!isEmpty(data)) { result.data = data; } return result; } function postPrefetchRendering(key, item, values) { var result = _defineProperty( { status: SUCCESS }, key, item ); var errors = map(selectData, filter(isError, values)); var eventTokens = map(selectData, filter(hasNonErrorData, values)); var data = {}; if (!isEmpty(errors)) { result.status = ERROR; data.errors = errors; } if (!isEmpty(eventTokens)) { data.eventTokens = eventTokens; } if (!isEmpty(data)) { result.data = data; } return result; } function renderExecuteItem(item, postRenderingFunc, metricsFunc) { var render = function render(opt) { return executeRendering(opt, true); }; var options = renderOptions(render, item); return all(options) .then(postRenderingFunc) .then(function(result) { metricsFunc(item); return result; }); } function renderPrefetchItem(key, item, page, metricsFunc) { var name = item.name; var render = function render(opt) { return executeRendering(opt, name, page); }; var options = renderOptions(render, item); return all(options) .then(function(arr) { return postPrefetchRendering(key, item, arr); }) .then(function(result) { metricsFunc(item); return result; }); } function renderMbox(mbox) { var postRenderingFunc = function postRenderingFunc(arr) { return postExecuteRendering(MBOX, mbox, arr); }; return renderExecuteItem(mbox, postRenderingFunc, executeMboxMetrics); } function renderPrefetchMbox(mbox) { return renderPrefetchItem(MBOX, mbox, true, executeMboxMetrics); } function hideOptions(item) { var actions = extractActions(item); hideActions(actions); } function hidePageLoadOptions(context) { var skipPrehiding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (skipPrehiding) { return; } var _context$execute = context.execute, execute = _context$execute === void 0 ? {} : _context$execute; var _execute$pageLoad = execute.pageLoad, pageLoad = _execute$pageLoad === void 0 ? {} : _execute$pageLoad; if (!isEmpty(pageLoad)) { hideOptions(pageLoad); } } function hideAllViews(context) { var _context$prefetch = context.prefetch, prefetch = _context$prefetch === void 0 ? {} : _context$prefetch; var _prefetch$views = prefetch.views, views = _prefetch$views === void 0 ? [] : _prefetch$views; if (isEmpty(views)) { return; } var actions = flatten(map(extractActions, views)); hideAllViewsActions(actions); } function hideViewOptions(view) { var actions = extractActions(view); hideActions(actions); removeAllViewsHidingStyle(); } function renderPageLoad(pageLoad) { var postRenderingFunc = function postRenderingFunc(arr) { return postExecuteRendering(PAGE_LOAD, pageLoad, arr); }; return renderExecuteItem(pageLoad, postRenderingFunc, executePageLoadMetrics); } function renderMboxes(mboxes) { return all(map(renderMbox, mboxes)); } function renderPrefetchMboxes(mboxes) { return all(map(renderPrefetchMbox, mboxes)); } function renderPrefetchMetrics(prefetch) { var metrics = [executePrefetchMetrics(prefetch)]; return all(metrics).then(postExecuteRendering); } function renderView(view) { var page = view.page; return renderPrefetchItem(VIEW, view, page, executeViewMetrics); } function E() {} E.prototype = { on: function on(name, callback, ctx) { var e = this.e || (this.e = {}); (e[name] || (e[name] = [])).push({ fn: callback, ctx: ctx }); return this; }, once: function once(name, callback, ctx) { var self = this; function listener() { self.off(name, listener); callback.apply(ctx, arguments); } listener._ = callback; return this.on(name, listener, ctx); }, emit: function emit(name) { var data = [].slice.call(arguments, 1); var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); var i = 0; var len = evtArr.length; for (i; i < len; i++) { evtArr[i].fn.apply(evtArr[i].ctx, data); } return this; }, off: function off(name, callback) { var e = this.e || (this.e = {}); var evts = e[name]; var liveEvents = []; if (evts && callback) { for (var i = 0, len = evts.length; i < len; i++) { if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]); } } liveEvents.length ? (e[name] = liveEvents) : delete e[name]; return this; } }; var tinyEmitter = E; var TinyEmitter = E; tinyEmitter.TinyEmitter = TinyEmitter; function create$1() { return new tinyEmitter(); } function publishOn(eventBus, name, args) { eventBus.emit(name, args); } function subscribeTo(eventBus, name, func) { eventBus.on(name, func); } var EVENT_BUS = create$1(); function publish(name, args) { publishOn(EVENT_BUS, name, args); } function subscribe(name, func) { subscribeTo(EVENT_BUS, name, func); } function redirect$1(option) { return { type: REDIRECT, content: option.url }; } function setContent(action) { var result = {}; result.type = SET_HTML; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function setText$3(action) { var result = {}; result.type = SET_TEXT; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function appendContent(action) { var result = {}; result.type = APPEND_HTML; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function prependContent(action) { var result = {}; result.type = PREPEND_HTML; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function replaceContent(action) { var result = {}; result.type = REPLACE_HTML; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function insertBefore$2(action) { var result = {}; result.type = INSERT_BEFORE; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function insertAfter$2(action) { var result = {}; result.type = INSERT_AFTER; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function customCode$2(action) { var result = {}; result.type = CUSTOM_CODE; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function setAttribute$2(action) { var result = {}; result.selector = action.selector; result.cssSelector = action.cssSelector; if (action.attribute === SRC) { result.type = SET_IMAGE_SOURCE; result.content = action.value; return result; } result.type = SET_ATTRIBUTE; var content = {}; content[action.attribute] = action.value; result.content = content; return result; } function setStyle$2(action) { var _action$style = action.style, style = _action$style === void 0 ? {} : _action$style; var result = {}; result.selector = action.selector; result.cssSelector = action.cssSelector; if (!isNil(style.left) && !isNil(style.top)) { result.type = MOVE; result.content = style; return result; } if (!isNil(style.width) && !isNil(style.height)) { result.type = RESIZE; result.content = style; return result; } result.type = SET_STYLE; result.content = style; return result; } function remove$3(action) { var result = {}; result.type = REMOVE; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function rearrange$2(action) { var content = {}; content.from = action.from; content.to = action.to; var result = {}; result.type = REARRANGE; result.selector = action.selector; result.cssSelector = action.cssSelector; result.content = content; return result; } function hasSelectors(action) { return isNotBlank(action.selector) && isNotBlank(action.cssSelector); } function createPageLoad(items) { var result = {}; if (isEmpty(items)) { return result; } var options = []; var metrics = []; var actions = []; forEach(function(item) { var type = item.action; switch (type) { case SET_CONTENT: if (hasSelectors(item)) { actions.push(setContent(item)); } else { options.push({ type: HTML, content: item.content }); } break; case SET_JSON: if (!isEmpty(item.content)) { forEach(function(e) { return options.push({ type: JSON$1, content: e }); }, item.content); } break; case SET_TEXT: actions.push(setText$3(item)); break; case APPEND_CONTENT: actions.push(appendContent(item)); break; case PREPEND_CONTENT: actions.push(prependContent(item)); break; case REPLACE_CONTENT: actions.push(replaceContent(item)); break; case INSERT_BEFORE: actions.push(insertBefore$2(item)); break; case INSERT_AFTER: actions.push(insertAfter$2(item)); break; case CUSTOM_CODE: actions.push(customCode$2(item)); break; case SET_ATTRIBUTE: actions.push(setAttribute$2(item)); break; case SET_STYLE: actions.push(setStyle$2(item)); break; case REMOVE: actions.push(remove$3(item)); break; case REARRANGE: actions.push(rearrange$2(item)); break; case REDIRECT: options.push(redirect$1(item)); break; case TRACK_CLICK: metrics.push({ type: CLICK, selector: item.selector, eventToken: item.clickTrackId }); break; } }, items); var pageLoad = {}; var hasActions = !isEmpty(actions); if (hasActions) { options.push({ type: ACTIONS, content: actions }); } var hasOptions = !isEmpty(options); if (hasOptions) { pageLoad.options = options; } var hasMetrics = !isEmpty(metrics); if (hasMetrics) { pageLoad.metrics = metrics; } if (isEmpty(pageLoad)) { return result; } var execute = {}; execute.pageLoad = pageLoad; result.execute = execute; return result; } function createMboxes(name, items) { var result = {}; if (isEmpty(items)) { return result; } var options = []; var metrics = []; forEach(function(item) { var type = item.action; switch (type) { case SET_CONTENT: options.push({ type: HTML, content: item.content }); break; case SET_JSON: if (!isEmpty(item.content)) { forEach(function(e) { return options.push({ type: JSON$1, content: e }); }, item.content); } break; case REDIRECT: options.push(redirect$1(item)); break; case SIGNAL_CLICK: metrics.push({ type: CLICK, eventToken: item.clickTrackId }); break; } }, items); var mbox = { name: name }; var hasOptions = !isEmpty(options); if (hasOptions) { mbox.options = options; } var hasMetrics = !isEmpty(metrics); if (hasMetrics) { mbox.metrics = metrics; } if (isEmpty(mbox)) { return result; } var execute = {}; var mboxes = [mbox]; execute.mboxes = mboxes; result.execute = execute; return result; } function convertToContext(mbox, items, pageLoadEnabled) { if (pageLoadEnabled) { return createPageLoad(items); } return createMboxes(mbox, items); } var PAGE_LOAD_RENDERING_FAILED = "Page load rendering failed"; var MBOXES_RENDERING_FAILED = "Mboxes rendering failed"; var VIEW_RENDERING_FAILED = "View rendering failed"; var PREFETCH_RENDERING_FAILED = "Prefetch rendering failed"; var hasErrors = function hasErrors(items) { return !isEmpty(filter(isError, items)); }; function getPageLoadData(pageLoad) { var status = pageLoad.status, data = pageLoad.data; var result = { status: status, pageLoad: true }; if (!isNil(data)) { result.data = data; } return result; } function getMboxData(item) { var status = item.status, mbox = item.mbox, data = item.data; var name = mbox.name; var result = { status: status, mbox: name }; if (!isNil(data)) { result.data = data; } return result; } function getViewData(item) { var status = item.status, view = item.view, data = item.data; var name = view.name; var result = { status: status, view: name }; if (!isNil(data)) { result.data = data; } return result; } function getPrefetchMetricsData(prefetchMetrics) { var status = prefetchMetrics.status, data = prefetchMetrics.data; var result = { status: status, prefetchMetrics: true }; if (!isNil(data)) { result.data = data; } return result; } function handlePageLoad(pageLoad) { if (isNil(pageLoad)) { return [null]; } var result = map(getPageLoadData, [pageLoad]); if (hasErrors(result)) { logWarn(PAGE_LOAD_RENDERING_FAILED, pageLoad); } return result; } function handleMboxes(mboxes) { if (isNil(mboxes)) { return [null]; } var result = map(getMboxData, mboxes); if (hasErrors(result)) { logWarn(MBOXES_RENDERING_FAILED, mboxes); } return result; } function handlePrefetchMboxes(mboxes) { var func = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : sendMboxesRenderedNotifications; if (isNil(mboxes)) { return [null]; } var result = map(getMboxData, mboxes); if (hasErrors(result)) { logWarn(MBOXES_RENDERING_FAILED, mboxes); } func(mboxes); return result; } function handleView(item) { var func = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : sendViewRenderedNotifications; if (isNil(item)) { return [null]; } var result = map(getViewData, [item]); if (hasErrors(result)) { logWarn(VIEW_RENDERING_FAILED, item); } var view = item.view; if (!view.page) { return result; } func(item); return result; } function handlePrefetchMetrics(prefetchMetrics) { if (isNil(prefetchMetrics)) { return [null]; } var result = map(getPrefetchMetricsData, [prefetchMetrics]); if (hasErrors(result)) { logWarn(PREFETCH_RENDERING_FAILED, prefetchMetrics); } return result; } function handleRenderingSuccess$1(values) { var results = flatten([ handlePageLoad(values[0]), handleMboxes(values[1]), handlePrefetchMboxes(values[2]), handlePrefetchMetrics(values[3]) ]); var nonNull = filter(notNil, results); var errors = filter(isError, nonNull); if (!isEmpty(errors)) { return reject(errors); } return resolve(nonNull); } function handleRenderingError$1(err) { return reject(err); } function processOptions$2(selector, item) { if (isEmpty(item)) { return; } var options = item.options; if (isEmpty(options)) { return; } forEach(function(option) { if (option.type !== HTML) { return; } var type = SET_HTML; var content = option.content; option.type = ACTIONS; option.content = [ { type: type, selector: selector, content: content } ]; }, options); } function processMetrics$1(selector, item) { var metrics = item.metrics; if (isEmpty(metrics)) { return; } var name = item.name; forEach(function(metric) { metric.name = name; metric.selector = metric.selector || selector; }, metrics); } function createRenderingContext(selector, context) { var result = assign({}, context); var _result$execute = result.execute, execute = _result$execute === void 0 ? {} : _result$execute, _result$prefetch = result.prefetch, prefetch = _result$prefetch === void 0 ? {} : _result$prefetch; var _execute$pageLoad = execute.pageLoad, pageLoad = _execute$pageLoad === void 0 ? {} : _execute$pageLoad, _execute$mboxes = execute.mboxes, mboxes = _execute$mboxes === void 0 ? [] : _execute$mboxes; var _prefetch$mboxes = prefetch.mboxes, prefetchMboxes = _prefetch$mboxes === void 0 ? [] : _prefetch$mboxes; processOptions$2(selector, pageLoad); forEach(function(elem) { return processOptions$2(selector, elem); }, mboxes); forEach(function(elem) { return processMetrics$1(selector, elem); }, mboxes); forEach(function(elem) { return processOptions$2(selector, elem); }, prefetchMboxes); forEach(function(elem) { return processMetrics$1(selector, elem); }, prefetchMboxes); return result; } function persistViewsIfPresent(context) { var _context$prefetch = context.prefetch, prefetch = _context$prefetch === void 0 ? {} : _context$prefetch; var _prefetch$views = prefetch.views, views = _prefetch$views === void 0 ? [] : _prefetch$views; if (isEmpty(views)) { return; } persistViews(views); } function renderContext(context) { var promises = []; var _context$execute = context.execute, execute = _context$execute === void 0 ? {} : _context$execute; var _execute$pageLoad2 = execute.pageLoad, pageLoad = _execute$pageLoad2 === void 0 ? {} : _execute$pageLoad2, _execute$mboxes2 = execute.mboxes, mboxes = _execute$mboxes2 === void 0 ? [] : _execute$mboxes2; if (!isEmpty(pageLoad)) { promises.push(renderPageLoad(pageLoad)); } else { promises.push(resolve(null)); } if (!isEmpty(mboxes)) { promises.push(renderMboxes(mboxes)); } else { promises.push(resolve(null)); } var _context$prefetch2 = context.prefetch, prefetch = _context$prefetch2 === void 0 ? {} : _context$prefetch2; var _prefetch$mboxes2 = prefetch.mboxes, prefetchMboxes = _prefetch$mboxes2 === void 0 ? [] : _prefetch$mboxes2, _prefetch$metrics = prefetch.metrics, metrics = _prefetch$metrics === void 0 ? [] : _prefetch$metrics; if (!isEmpty(prefetchMboxes)) { promises.push(renderPrefetchMboxes(prefetchMboxes)); } else { promises.push(resolve(null)); } if (isArray(metrics) && !isEmpty(metrics)) { promises.push(renderPrefetchMetrics(prefetch)); } else { promises.push(resolve(null)); } removeHidingSnippetStyle(); return all(promises) .then(handleRenderingSuccess$1) ["catch"](handleRenderingError$1); } function executeRedirect(win, url) { delay(function() { return win.location.replace(url); }); } function retrieveSelector(selector) { if (isNotBlank(selector)) { return selector; } if (isElement(selector)) { return selector; } return HEAD_TAG; } function showElement(selector) { addClass(MARKER_CSS_CLASS, selector); } function executeApplyOffer(options) { var mbox = options.mbox, selector = options.selector, actions = options.offer; var config = getConfig(); var pageLoadEnabled = mbox === config[GLOBAL_MBOX_NAME]; if (isEmpty(actions)) { logDebug(NO_ACTIONS); showElement(selector); removeHidingSnippetStyle(); notifyRenderingNoOffers({ mbox: mbox }); return; } var context = convertToContext(mbox, actions, pageLoadEnabled); var renderingContext = createRenderingContext(selector, context); var redirect = getRedirect(renderingContext); if (!isEmpty(redirect)) { var url = redirect.url; logDebug(REDIRECT_ACTION, redirect); notifyRenderingRedirect({ url: url }); executeRedirect(window, url); return; } notifyRenderingStart({ mbox: mbox }); hidePageLoadOptions(renderingContext); renderContext(renderingContext) .then(function(execution) { if (isEmpty(execution)) { return; } notifyRenderingSucceeded({ mbox: mbox, execution: execution }); }) ["catch"](function(error) { return notifyRenderingFailed({ error: error }); }); } function executeApplyOffers(options) { var skipPrehiding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var selector = options.selector, response = options.response; if (isEmpty(response)) { logDebug(NO_ACTIONS); showElement(selector); removeHidingSnippetStyle(); notifyRenderingNoOffers({}); publish(NO_OFFERS_EVENT); return resolve(); } var renderingContext = createRenderingContext(selector, response); var redirect = getRedirect(renderingContext); if (!isEmpty(redirect)) { var url = redirect.url; logDebug(REDIRECT_ACTION, redirect); notifyRenderingRedirect({ url: url }); publish(REDIRECT_OFFER_EVENT); executeRedirect(window, url); return resolve(); } notifyRenderingStart({}); persistViewsIfPresent(renderingContext); publish(CACHE_UPDATED_EVENT); hidePageLoadOptions(renderingContext, skipPrehiding); return renderContext(renderingContext) .then(function(execution) { if (isEmpty(execution)) { return; } notifyRenderingSucceeded({ execution: execution }); }) ["catch"](function(error) { return notifyRenderingFailed({ error: error }); }); } function hasServerState(config) { var serverState = config[SERVER_STATE]; if (isEmpty(serverState)) { return false; } var request = serverState.request, response = serverState.response; if (isEmpty(request)) { return false; } if (isEmpty(response)) { return false; } return true; } function getServerState(config) { return config[SERVER_STATE]; } var INIT = "[page-init]"; function handleError$1(error) { logWarn(INIT, VIEW_DELIVERY_ERROR, error); addClientTrace({ source: INIT, error: error }); removeHidingSnippetStyle(); } function handleSuccess(response) { var skipPrehiding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var options = { selector: HEAD_TAG, response: response }; logDebug(INIT, RESPONSE, response); addClientTrace({ source: INIT, response: response }); executeApplyOffers(options, skipPrehiding)["catch"](handleError$1); } function scrubServerStateResponse(config, response) { var result = assign({}, response); var execute = result.execute, prefetch = result.prefetch; var pageLoadEnabled = config[PAGE_LOAD_ENABLED]; var viewsEnabled = config[VIEWS_ENABLED]; if (execute) { result.execute.mboxes = null; } if (execute && !pageLoadEnabled) { result.execute.pageLoad = null; } if (prefetch) { result.prefetch.mboxes = null; } if (prefetch && !viewsEnabled) { result.prefetch.views = null; } return result; } function processServerState(config) { var serverState = getServerState(config); var request = serverState.request, response = serverState.response; var skipPrehiding = true; logDebug(INIT, USING_SERVER_STATE); addClientTrace({ source: INIT, serverState: serverState }); var scrubbedResponse = scrubServerStateResponse(config, response); hidePageLoadOptions(scrubbedResponse); hideAllViews(scrubbedResponse); processResponse({ request: request, response: scrubbedResponse }) .then(function(res) { return handleSuccess(res, skipPrehiding); }) ["catch"](handleError$1); } function initDelivery() { if (!isDeliveryEnabled()) { logWarn(INIT, DELIVERY_DISABLED); addClientTrace({ source: INIT, error: DELIVERY_DISABLED }); return; } var config = getConfig(); if (hasServerState(config)) { processServerState(config); return; } var pageLoadEnabled = config[PAGE_LOAD_ENABLED]; var viewsEnabled = config[VIEWS_ENABLED]; if (!pageLoadEnabled && !viewsEnabled) { logDebug(INIT, PAGE_LOAD_DISABLED); addClientTrace({ source: INIT, error: PAGE_LOAD_DISABLED }); return; } injectHidingSnippetStyle(); var request = {}; if (pageLoadEnabled) { var execute = {}; execute.pageLoad = {}; request.execute = execute; } if (viewsEnabled) { var prefetch = {}; prefetch.views = [{}]; request.prefetch = prefetch; } var timeout = config[TIMEOUT]; logDebug(INIT, REQUEST, request); addClientTrace({ source: INIT, request: request }); var options = { request: request, timeout: timeout }; if (!shouldUseOptin() || isTargetApproved()) { executeGetOffers(options) .then(handleSuccess) ["catch"](handleError$1); return; } fetchOptinPermissions() .then(function() { executeGetOffers(options) .then(handleSuccess) ["catch"](handleError$1); }) ["catch"](handleError$1); } function createValid() { var result = {}; result[VALID] = true; return result; } function createInvalid(error) { var result = {}; result[VALID] = false; result[ERROR] = error; return result; } function validateMbox(mbox) { if (isBlank(mbox)) { return createInvalid(MBOX_REQUIRED); } if (mbox.length > MBOX_LENGTH) { return createInvalid(MBOX_TOO_LONG); } return createValid(); } function validateGetOfferOptions(options) { if (!isObject(options)) { return createInvalid(OPTIONS_REQUIRED); } var mbox = options[MBOX]; var mboxValidation = validateMbox(mbox); if (!mboxValidation[VALID]) { return mboxValidation; } if (!isFunction(options[SUCCESS])) { return createInvalid(SUCCESS_REQUIRED); } if (!isFunction(options[ERROR])) { return createInvalid(ERROR_REQUIRED); } return createValid(); } function validateGetOffersOptions(options) { if (!isObject(options)) { return createInvalid(OPTIONS_REQUIRED); } var request = options.request; if (!isObject(request)) { return createInvalid(REQUEST_REQUIRED); } var execute = request.execute, prefetch = request.prefetch; if (!isObject(execute) && !isObject(prefetch)) { return createInvalid(EXECUTE_OR_PREFETCH_REQUIRED); } return createValid(); } function validateSendNotificationsOptions(options) { if (!isObject(options)) { return createInvalid(OPTIONS_REQUIRED); } var request = options.request; if (!isObject(request)) { return createInvalid(REQUEST_REQUIRED); } var execute = request.execute, prefetch = request.prefetch, notifications = request.notifications; if (isObject(execute) || isObject(prefetch)) { return createInvalid(EXECUTE_OR_PREFETCH_NOT_ALLOWED); } if (!isArray(notifications)) { return createInvalid(NOTIFICATIONS_REQUIRED); } return createValid(); } function validateApplyOfferOptions(options) { if (!isObject(options)) { return createInvalid(OPTIONS_REQUIRED); } var mbox = options[MBOX]; var mboxValidation = validateMbox(mbox); if (!mboxValidation[VALID]) { return mboxValidation; } var offer = options[OFFER]; if (!isArray(offer)) { return createInvalid(OFFER_REQUIRED); } return createValid(); } function validateApplyOffersOptions(options) { if (!isObject(options)) { return createInvalid(OPTIONS_REQUIRED); } var response = options.response; if (!isObject(response)) { return createInvalid(RESPONE_REQUIRED); } return createValid(); } function validateTrackEventOptions(options) { if (!isObject(options)) { return createInvalid(OPTIONS_REQUIRED); } var mbox = options[MBOX]; var mboxValidation = validateMbox(mbox); if (!mboxValidation[VALID]) { return mboxValidation; } return createValid(); } function redirect$2(option) { return { action: REDIRECT, url: option.content }; } function setHtml$3(action) { var result = {}; result.action = SET_CONTENT; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function setText$4(action) { var result = {}; result.action = SET_TEXT; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function appendHtml$2(action) { var result = {}; result.action = APPEND_CONTENT; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function prependHtml$2(action) { var result = {}; result.action = PREPEND_CONTENT; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function replaceHtml$2(action) { var result = {}; result.action = REPLACE_CONTENT; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function insertBefore$3(action) { var result = {}; result.action = INSERT_BEFORE; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function insertAfter$3(action) { var result = {}; result.action = INSERT_AFTER; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function customCode$3(action) { var result = {}; result.action = CUSTOM_CODE; result.content = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function setAttribute$3(action) { var attribute = keys(action.content)[0]; var result = {}; result.action = SET_ATTRIBUTE; result.attribute = attribute; result.value = action.content[attribute]; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function setImageSource$2(action) { var result = {}; result.action = SET_ATTRIBUTE; result.attribute = SRC; result.value = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function setStyle$3(action) { var result = {}; result.action = SET_STYLE; result.style = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function resize$2(action) { var result = {}; result.action = SET_STYLE; result.style = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function move$2(action) { var result = {}; result.action = SET_STYLE; result.style = action.content; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function remove$4(action) { var result = {}; result.action = REMOVE; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function rearrange$3(action) { var result = {}; result.action = REARRANGE; result.from = action.content.from; result.to = action.content.to; result.selector = action.selector; result.cssSelector = action.cssSelector; return result; } function processActions(actions) { var result = []; forEach(function(action) { var type = action.type; switch (type) { case SET_HTML: result.push(setHtml$3(action)); break; case SET_TEXT: result.push(setText$4(action)); break; case APPEND_HTML: result.push(appendHtml$2(action)); break; case PREPEND_HTML: result.push(prependHtml$2(action)); break; case REPLACE_HTML: result.push(replaceHtml$2(action)); break; case INSERT_BEFORE: result.push(insertBefore$3(action)); break; case INSERT_AFTER: result.push(insertAfter$3(action)); break; case CUSTOM_CODE: result.push(customCode$3(action)); break; case SET_ATTRIBUTE: result.push(setAttribute$3(action)); break; case SET_IMAGE_SOURCE: result.push(setImageSource$2(action)); break; case SET_STYLE: result.push(setStyle$3(action)); break; case RESIZE: result.push(resize$2(action)); break; case MOVE: result.push(move$2(action)); break; case REMOVE: result.push(remove$4(action)); break; case REARRANGE: result.push(rearrange$3(action)); break; case REDIRECT: result.push(redirect$2(action)); break; } }, actions); return result; } function processMetrics$2(metrics) { if (isEmpty(metrics)) { return []; } var result = []; forEach(function(m) { if (m.type !== CLICK) { return; } if (hasSelector(m)) { result.push({ action: TRACK_CLICK, selector: m.selector, clickTrackId: m.eventToken }); } else { result.push({ action: SIGNAL_CLICK, clickTrackId: m.eventToken }); } }, metrics); return result; } function processItem(item) { if (isEmpty(item)) { return []; } var htmls = []; var jsons = []; var actions = []; var _item$options = item.options, options = _item$options === void 0 ? [] : _item$options, _item$metrics = item.metrics, metrics = _item$metrics === void 0 ? [] : _item$metrics; forEach(function(option) { var type = option.type; switch (type) { case HTML: htmls.push(option.content); break; case JSON$1: jsons.push(option.content); break; case REDIRECT: actions.push(redirect$2(option)); break; case ACTIONS: actions.push.apply(actions, processActions(option.content)); break; } }, options); if (!isEmpty(htmls)) { actions.push({ action: SET_CONTENT, content: htmls.join("") }); } if (!isEmpty(jsons)) { actions.push({ action: SET_JSON, content: jsons }); } var clickActions = processMetrics$2(metrics); if (!isEmpty(clickActions)) { actions.push.apply(actions, clickActions); } return actions; } function convertToActions(response) { var _response$execute = response.execute, execute = _response$execute === void 0 ? {} : _response$execute; var _execute$pageLoad = execute.pageLoad, pageLoad = _execute$pageLoad === void 0 ? {} : _execute$pageLoad; var _execute$mboxes = execute.mboxes, mboxes = _execute$mboxes === void 0 ? [] : _execute$mboxes; var result = []; result.push.apply(result, processItem(pageLoad)); result.push.apply(result, flatten(map(processItem, mboxes))); return result; } var GET_OFFER = "[getOffer()]"; function handleRequestSuccess$1(options, response) { var actions = convertToActions(response); options[SUCCESS](actions); } function handleRequestError$1(options, error) { var status = error[STATUS] || UNKNOWN; options[ERROR](status, error); } function getOffer(options) { var validationResult = validateGetOfferOptions(options); var error = validationResult[ERROR]; if (!validationResult[VALID]) { logWarn(GET_OFFER, error); addClientTrace({ source: GET_OFFER, options: options, error: error }); return; } if (!isDeliveryEnabled()) { delay(options[ERROR](WARNING, DELIVERY_DISABLED)); logWarn(GET_OFFER, DELIVERY_DISABLED); addClientTrace({ source: GET_OFFER, options: options, error: DELIVERY_DISABLED }); return; } var successFunc = function successFunc(response) { return handleRequestSuccess$1(options, response); }; var errorFunc = function errorFunc(err) { return handleRequestError$1(options, err); }; logDebug(GET_OFFER, options); addClientTrace({ source: GET_OFFER, options: options }); if (!shouldUseOptin() || isTargetApproved()) { executeGetOffer(options) .then(successFunc) ["catch"](errorFunc); return; } fetchOptinPermissions().then(function() { executeGetOffer(options) .then(successFunc) ["catch"](errorFunc); }); } var GET_OFFERS = "[getOffers()]"; function getOffers(options) { var validationResult = validateGetOffersOptions(options); var error = validationResult[ERROR]; if (!validationResult[VALID]) { logWarn(GET_OFFERS, error); addClientTrace({ source: GET_OFFERS, options: options, error: error }); return reject(validationResult); } if (!isDeliveryEnabled()) { logWarn(GET_OFFERS, DELIVERY_DISABLED); addClientTrace({ source: GET_OFFERS, options: options, error: DELIVERY_DISABLED }); return reject(new Error(DELIVERY_DISABLED)); } logDebug(GET_OFFERS, options); addClientTrace({ source: GET_OFFERS, options: options }); if (!shouldUseOptin() || isTargetApproved()) { return executeGetOffers(options); } return fetchOptinPermissions().then(function() { return executeGetOffers(options); }); } var APPLY_OFFER = "[applyOffer()]"; function applyOffer(options) { var selector = retrieveSelector(options.selector); var validationResult = validateApplyOfferOptions(options); var error = validationResult[ERROR]; if (!validationResult[VALID]) { logWarn(APPLY_OFFER, options, error); addClientTrace({ source: APPLY_OFFER, options: options, error: error }); showElement(selector); return; } if (!isDeliveryEnabled()) { logWarn(APPLY_OFFER, DELIVERY_DISABLED); addClientTrace({ source: APPLY_OFFER, options: options, error: DELIVERY_DISABLED }); showElement(selector); return; } options.selector = selector; logDebug(APPLY_OFFER, options); addClientTrace({ source: APPLY_OFFER, options: options }); executeApplyOffer(options); } var APPLY_OFFERS = "[applyOffers()]"; function applyOffers(options) { var selector = retrieveSelector(options.selector); var validationResult = validateApplyOffersOptions(options); var error = validationResult[ERROR]; if (!validationResult[VALID]) { logWarn(APPLY_OFFERS, options, error); addClientTrace({ source: APPLY_OFFERS, options: options, error: error }); showElement(selector); return reject(validationResult); } if (!isDeliveryEnabled()) { logWarn(APPLY_OFFERS, DELIVERY_DISABLED); addClientTrace({ source: APPLY_OFFERS, options: options, error: DELIVERY_DISABLED }); showElement(selector); return reject(new Error(DELIVERY_DISABLED)); } options.selector = selector; logDebug(APPLY_OFFERS, options); addClientTrace({ source: APPLY_OFFERS, options: options }); return executeApplyOffers(options); } var SEND_NOTIFICATIONS = "[sendNotifications()]"; function sendNotifications(options) { var config = getConfig(); var globalMbox = config[GLOBAL_MBOX_NAME]; var _options$consumerId = options.consumerId, consumerId = _options$consumerId === void 0 ? globalMbox : _options$consumerId, request = options.request; var validationResult = validateSendNotificationsOptions(options); var error = validationResult[ERROR]; if (!validationResult[VALID]) { logWarn(SEND_NOTIFICATIONS, error); addClientTrace({ source: SEND_NOTIFICATIONS, options: options, error: error }); return; } if (!isDeliveryEnabled()) { logWarn(SEND_NOTIFICATIONS, DELIVERY_DISABLED); addClientTrace({ source: SEND_NOTIFICATIONS, options: options, error: DELIVERY_DISABLED }); return; } logDebug(SEND_NOTIFICATIONS, options); addClientTrace({ source: SEND_NOTIFICATIONS, options: options }); var notifications = request.notifications; var notificationsRequest = createSyncNotificationRequest( consumerId, {}, notifications ); if (shouldUseOptin() && !isTargetApproved()) { logWarn(SEND_NOTIFICATIONS, ERROR_TARGET_NOT_OPTED_IN); return; } executeBeaconNotification(notificationsRequest); } var TRACK_EVENT = "[trackEvent()]"; function normalizeOptions(config, options) { var mbox = options[MBOX]; var result = assign({}, options); var optsParams = isObject(options.params) ? options.params : {}; result[PARAMS] = assign({}, getTargetPageParams(mbox), optsParams); result[TIMEOUT] = getTimeout(config, options[TIMEOUT]); result[SUCCESS] = isFunction(options[SUCCESS]) ? options[SUCCESS] : noop; result[ERROR] = isFunction(options[ERROR]) ? options[ERROR] : noop; return result; } function shouldTrackBySelector(options) { var type = options[TYPE]; var selector = options[SELECTOR]; return isNotBlank(type) && (isNotBlank(selector) || isElement(selector)); } function trackImmediateInternal(options) { var mbox = options.mbox; var optsParams = isObject(options.params) ? options.params : {}; var params = assign({}, getTargetPageParams(mbox), optsParams); var type = DISPLAY_EVENT; var requestDetails = createRequestDetails({}, params); var notification = createNotification(requestDetails, type, []); notification.mbox = { name: mbox }; var request = createSyncNotificationRequest(mbox, params, [notification]); if (executeBeaconNotification(request)) { logDebug(TRACK_EVENT_SUCCESS, options); options[SUCCESS](); return; } logWarn(TRACK_EVENT_ERROR, options); options[ERROR](UNKNOWN, TRACK_EVENT_ERROR); } function trackImmediate(options) { if (shouldUseOptin() && !isTargetApproved()) { logWarn(TRACK_EVENT_ERROR, ERROR_TARGET_NOT_OPTED_IN); options[ERROR](ERROR, ERROR_TARGET_NOT_OPTED_IN); return; } trackImmediateInternal(options); } function handleEvent(options) { trackImmediate(options); return !options.preventDefault; } function trackBySelector(options) { var selector = options[SELECTOR]; var type = options[TYPE]; var elements = toArray(select(selector)); var onEvent = function onEvent() { return handleEvent(options); }; forEach(function(element) { return addEventListener(type, onEvent, element); }, elements); } function trackEvent(opts) { var validationResult = validateTrackEventOptions(opts); var error = validationResult[ERROR]; if (!validationResult[VALID]) { logWarn(TRACK_EVENT, error); addClientTrace({ source: TRACK_EVENT, options: opts, error: error }); return; } var config = getConfig(); var options = normalizeOptions(config, opts); if (!isDeliveryEnabled()) { logWarn(TRACK_EVENT, DELIVERY_DISABLED); delay(options[ERROR](WARNING, DELIVERY_DISABLED)); addClientTrace({ source: TRACK_EVENT, options: opts, error: DELIVERY_DISABLED }); return; } logDebug(TRACK_EVENT, options); addClientTrace({ source: TRACK_EVENT, options: options }); if (shouldTrackBySelector(options)) { trackBySelector(options); return; } trackImmediate(options); } var TRIGGER_VIEW = "[triggerView()]"; var TASKS = []; var LOADING = 0; var LOADED = 1; var STATE = LOADING; function executeApplyOffersForView(view) { hideViewOptions(view); return renderView(view) .then(handleView) .then(function(execution) { if (isEmpty(execution)) { return; } notifyRenderingSucceeded({ execution: execution }); }) ["catch"](function(error) { logWarn(RENDERING_VIEW_FAILED, error); notifyRenderingFailed({ error: error }); }); } function processTriggeredViews() { while (TASKS.length > 0) { var triggeredView = TASKS.pop(); var viewName = triggeredView.viewName; var persistedView = findView(viewName, triggeredView); if (!isNil(persistedView)) { executeApplyOffersForView(persistedView); } } } function processResponseEvents() { STATE = LOADED; processTriggeredViews(); } function setupListeners() { subscribe(CACHE_UPDATED_EVENT, processResponseEvents); subscribe(NO_OFFERS_EVENT, processResponseEvents); subscribe(REDIRECT_OFFER_EVENT, processResponseEvents); } function getTriggerViewOptions(viewName, opts) { var result = {}; result.viewName = viewName; result.impressionId = uuid(); result.page = true; if (!isEmpty(opts)) { result.page = !!opts.page; } return result; } function handleTriggeredView(options) { handleAuthoringTriggeredView(options); var viewName = options.viewName; var persistedView = findView(viewName, options); if (isNil(persistedView) && options.page) { sendViewTriggeredNotifications(options); } TASKS.push(options); if (STATE !== LOADED) { return; } processTriggeredViews(); } function triggerView(value, opts) { if (!isString(value) || isBlank(value)) { logWarn(TRIGGER_VIEW, VIEW_NAME_ERROR, value); addClientTrace({ source: TRIGGER_VIEW, view: value, error: VIEW_NAME_ERROR }); return; } var viewName = value.toLowerCase(); var options = getTriggerViewOptions(viewName, opts); logDebug(TRIGGER_VIEW, viewName, options); addClientTrace({ source: TRIGGER_VIEW, view: viewName, options: options }); handleTriggeredView(options); } setupListeners(); var COMMON_MBOX_WARN = "function has been deprecated. Please use getOffer() and applyOffer() functions instead."; var REGISTER_EXTENSION_WARN = "adobe.target.registerExtension() function has been deprecated. Please review the documentation for alternatives."; var MBOX_CREATE_WARN = "mboxCreate() " + COMMON_MBOX_WARN; var MBOX_DEFINE_WARN = "mboxDefine() " + COMMON_MBOX_WARN; var MBOX_UPDATE_WARN = "mboxUpdate() " + COMMON_MBOX_WARN; function registerExtension() { logWarn(REGISTER_EXTENSION_WARN, arguments); } function mboxCreate() { logWarn(MBOX_CREATE_WARN, arguments); } function mboxDefine() { logWarn(MBOX_DEFINE_WARN, arguments); } function mboxUpdate() { logWarn(MBOX_UPDATE_WARN, arguments); } function overridePublicApi(win) { win.adobe = win.adobe || {}; win.adobe.target = { VERSION: "", event: {}, getOffer: noop, getOffers: noopPromise, applyOffer: noop, applyOffers: noopPromise, sendNotifications: noop, trackEvent: noop, triggerView: noop, registerExtension: noop, init: noop }; win.mboxCreate = noop; win.mboxDefine = noop; win.mboxUpdate = noop; } function init(win, doc, settings) { if ( win.adobe && win.adobe.target && typeof win.adobe.target.getOffer !== "undefined" ) { logWarn(ALREADY_INITIALIZED); return; } initConfig(settings); var config = getConfig(); var version = config[VERSION]; win.adobe = win.adobe || {}; win.adobe.target = win.adobe.target || {}; win.adobe.target.VERSION = version; win.adobe.target.event = { LIBRARY_LOADED: LIBRARY_LOADED, REQUEST_START: REQUEST_START, REQUEST_SUCCEEDED: REQUEST_SUCCEEDED$1, REQUEST_FAILED: REQUEST_FAILED$1, CONTENT_RENDERING_START: CONTENT_RENDERING_START, CONTENT_RENDERING_SUCCEEDED: CONTENT_RENDERING_SUCCEEDED, CONTENT_RENDERING_FAILED: CONTENT_RENDERING_FAILED, CONTENT_RENDERING_NO_OFFERS: CONTENT_RENDERING_NO_OFFERS, CONTENT_RENDERING_REDIRECT: CONTENT_RENDERING_REDIRECT }; if (!config[ENABLED]) { overridePublicApi(win); logWarn(DELIVERY_DISABLED); return; } initTraces(); initAuthoringCode(); initQaMode(win); initPreviewMode(win); win.adobe.target.getOffer = getOffer; win.adobe.target.getOffers = getOffers; win.adobe.target.applyOffer = applyOffer; win.adobe.target.applyOffers = applyOffers; win.adobe.target.sendNotifications = sendNotifications; win.adobe.target.trackEvent = trackEvent; win.adobe.target.triggerView = triggerView; win.adobe.target.registerExtension = registerExtension; win.mboxCreate = mboxCreate; win.mboxDefine = mboxDefine; win.mboxUpdate = mboxUpdate; notifyLibraryLoaded(); } var bootstrapLaunch = { init: init, initConfig: initConfig, initDelivery: initDelivery }; module.exports = bootstrapLaunch; } }, "adobe-target-v2/lib/messages.js": { "script": function(module, exports, require, turbine) { "use strict"; module.exports = { ALREADY_INITIALIZED: "AT: Adobe Target has already been initialized.", DELIVERY_DISABLED: "AT: Adobe Target content delivery is disabled. Update your DOCTYPE to support Standards mode.", NO_REQUEST: "AT: Target library is either not loaded or disabled, no request will be executed" }; } }, "adobe-target-v2/lib/targetSettings.js": { "script": function(module, exports, require, turbine) { "use strict"; var extensionSettings = turbine.getExtensionSettings(); var targetSettings = extensionSettings.targetSettings || {}; module.exports = { extensionSettings: extensionSettings, targetSettings: targetSettings }; } }, "adobe-target-v2/lib/librarySettings.js": { "script": function(module, exports, require, turbine) { "use strict"; var TARGET_DEFAULT_SETTINGS = { version: "2.5.0" }; module.exports = { TARGET_DEFAULT_SETTINGS: TARGET_DEFAULT_SETTINGS }; } }, "adobe-target-v2/lib/modules/event-util.js": { "script": function(module, exports, require, turbine) { "use strict"; function addEventListener(elem, type, handler) { elem.addEventListener(type, handler); } function removeEventListener(elem, type, handler) { elem.removeEventListener(type, handler); } module.exports = { addEventListener: addEventListener, removeEventListener: removeEventListener }; } }, "adobe-target-v2/lib/modules/page-load.js": { "script": function(module, exports, require, turbine) { "use strict"; var _librarySettings = require("../librarySettings"); var win = require("@adobe/reactor-window"); /* eslint-disable import/no-extraneous-dependencies */ var overrideProps = require("./object-override"); var _require = require("./params-store"), getParams = _require.getParams, getPageLoadParams = _require.getPageLoadParams; var _require2 = require("../targetSettings"), targetSettings = _require2.targetSettings; module.exports = function (settings) { targetSettings.mboxParams = getParams(); targetSettings.globalMboxParams = getPageLoadParams(); overrideProps(targetSettings, settings, ["bodyHidingEnabled", "bodyHiddenStyle"]); overrideProps(targetSettings, win.targetGlobalSettings || {}, ["enabled", "bodyHidingEnabled", "bodyHiddenStyle"]); overrideProps(targetSettings, _librarySettings.TARGET_DEFAULT_SETTINGS || {}, ["version"]); return targetSettings; }; } } } } }, "company": { "orgId": "8A720E205666B0F57F000101@AdobeOrg" }, "property": { "name": "Global AEM Sites", "settings": { "domains": [ "monsanto.com", "asgrow.com.ar", "asgrow.com.mx", "dekalb.com.ar", "dekalb.com.br", "dekalb.com.co", "dekalb.com.mx", "dekalb.co.za", "deltapine.com.br", "deruiter.com", "seminis.com", "westbred.com", "deruiterseeds.com", "fontanelle.com", "goldcountryseed.com", "hubnerseed.com", "krugerseed.com", "lewishybrids.com", "jungseedgenetics.com", "rea-hybrids.com", "specialtyhybrids.com", "stewartseeds.com", "stoneseed.com", "dekalbasgrowdeltapine.com", "channel.com", "cropscience.bayer.africa", "cropscience.bayer.cz", "cropscience.bayer.com.tr", "cropscience.bayer.sk", "intactarr2pro.uy", "intactarr2pro.com.py", "intactarr2pro.com.ar" ], "undefinedVarsReturnEmpty": false, "ruleComponentSequencingEnabled": false }, "id": "PR94652630c2834b2496b4e2714616e503" }, "rules": [ { "id": "RLc947dbf9c13b49f7aaa1c0f09042bb9c", "name": "Pixel-DAD:Harvest-contestThank-you:Google Ads - Asgrow", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageHarvest-contestThank-you%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC22715937389b417695aa1687d1635906-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLeaf4d971dced4737bfc2e4aca4236177", "name": "Pixel-DAD:Disease-shield:VideoStart:Facebook Ads", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "DAD:Disease-shield:VideoStart:FacebookAds" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDEKALBInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageDisease-shield%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC868317ac2a2e4e5082a78c292f36ab7f-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL1e3e0e4c8ee44be09ea69c2045e0c1c5", "name": "Pixel-DAD:Thank-you-subscribe:Google Ads - DEKALB", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageThank-you-subscribe%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC1f08efa604bb488da39c081972d36a1d-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL74863eb6f42a4dab862118bedec94e57", "name": "Pixel-DAD:AllProduct:DCM - Deltapine/ Tribrand", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageAllProduct%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC3bf384dfcc184e58be570eff7534e35a-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL089eb8767c1b45f18c043b596810f08b", "name": "content: tool tracking", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "track tool interaction" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { //Last Updated 12-14-19 -toolTrack try{ var t = digitalData.event.temporaryEventId; if(typeof digitalData.event[t].eventInfo.toolName != 'undefined') s.eVar39 = digitalData.event[t].eventInfo.toolName; if(typeof digitalData.event[t].eventInfo.toolStep != 'undefined') s.eVar40 = digitalData.event[t].eventInfo.toolStep; if(typeof digitalData.event[t].eventInfo.toolInteraction != 'undefined') s.eVar41 = digitalData.event[t].eventInfo.toolInteraction; if(typeof digitalData.event[t].eventInfo.toolInteractionType != 'undefined') s.eVar60 = digitalData.event[t].eventInfo.toolInteractionType; if(typeof digitalData.event[t].eventInfo.toolInteractionValue != 'undefined') s.eVar61 = digitalData.event[t].eventInfo.toolInteractionValue; if(typeof digitalData.event[t].eventInfo.toolLayout != 'undefined') s.prop21 = digitalData.event[t].eventInfo.toolLayout; if(typeof digitalData.event[t].eventInfo.eventName != 'undefined') _satellite.setVar("toolTrack","true"); if(digitalData.event[0].eventInfo.toolInteraction){ s.events = s.apl(s.events, "event26"); } else{ s.events = s.apl(s.events, "event21"); } s.linkTrackEvents = s.apl(s.linkTrackEvents, "event26"); s.linkTrackVars = s.apl(s.linkTrackVars, 'eVar39,eVar40,eVar41,eVar60,eVar61,prop21'); s.tl(true,"o","Tool Interaction"); s.clearVars(); _satellite.track('dad-calculatecurve-dcm'); _satellite.track('dad-calculatecurve-fb'); _satellite.track('dad-calculatecurve-googleads'); } catch(e){ _satellite.logger.error(e); } delete digitalData.event.temporaryEventId; } }, "trackerProperties": { } } } ] }, { "id": "RL3ff8ee4f1adb46a182e8bf443010ad80", "name": "content: All - Video Started Playing", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "VideoStartedPlaying" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC081bcf50931f458c9d9806647ff16ec4-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL61512600b57b46f0a00a01511b30b7df", "name": "DecisionTree - ThankYouForAnswering | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "decisionTreeThankYouClicks" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.linkTrackEvents = "event148,event149"; if (event.detail.action == "seed-finder-click") { s.events = "event148"; } else if (event.detail.action == "back-to-beginning-click") { s.events = "event149"; } } }, "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "channel decision tree - thank your for answering", "linkType": "o" } } ] }, { "id": "RL3464969b0f5f4e69807d570da5b3f100", "name": "Pixel-DAD:VideoStart:JourneyFromNeedtoSeed:DCM/FB/GoogleAds-Deltapine/Triband", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "DAD:VideoStart:JourneyFromNeedtoSeed:DCM/FB/GoogleAds-Deltapine/Triband" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDeltapine%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageJourney-from-need-to-seed%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC0862fae5b2d447a1b3883b8a9397b4be-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL18e812424faa4b70b05930a387b05631", "name": "Pixel: Channel: On Email And Text Alerts Page", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "PixelsOnEmailAndTextAlertsPage" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isProduction%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isChannelSite%" } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isEmailAndTextAlertsPage%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC544e30c37e02461aa76e9f0ca4eb3aae-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC5d7f7504f41143dd860028c509326fe4-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL7ee26459ae28401aae31fef6cc39d97f", "name": "Pixel-DAD:Section:Agronomy:HelpfulQuestion:DCM - Asgrow", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "Pixel-DAD:Section:Agronomy:HelpfulQuestion:DCM-Asgrow" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionAgronomy%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC4ee6ce95a89042e4b3ac2fbb3645ad41-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLdb1d5de5926f425ebba5292853382df0", "name": "Munchkin LATAM (Asgrow/DEKALB - MX+AR & IntactaSites)", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "asgrow.com.mx", "asgrow.com.ar", "dekalb.com.mx", "dekalb.com.ar", "dekalb.com.co" ] } } ], "actions": [ { "modulePath": "marketo-munchkin/src/lib/actions/initialize.js", "settings": { "wsInfo": "j0hRc9jOKwEL", "asyncOnly": true, "httpsOnly": true, "munchkinId": "076-ZYW-786", "anonymizeIP": true } } ] }, { "id": "RLe319eaf60b6740c3bf570a7db95edbe9", "name": "Pixel-DAD:FinancePDFDownload:FB", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "a", "elementProperties": [ { "name": "href", "value": ".pdf", "valueIsRegex": true } ], "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "performance-financing-by-john-deere-financial.html", "valueIsRegex": true } ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC20b7f178ee3846dab15784e1a93c84b9-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLf00daebd66a04041985bddbccfa2c013", "name": "Pixel: Dekalb: Brazil: Third Party: Facebook: Lead/Register Complete", "events": [ { "modulePath": "core/src/lib/events/pageBottom.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "dekalb.com.br" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "/pt-br/fale-conosco/email-obrigado.html" } ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": "if(typeof(fbq !== 'undefined')){\n fbq('track', 'cadastro-dekalb');\n _satellite.notify('Third Party Facebook Lead/Register Complete tag fired.',1);\n}", "language": "javascript" } } ] }, { "id": "RLb05f6adae9db47318fc9d5d49f2a19f7", "name": "Pixel: De Ruiter: Third Party: Pardot", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "deruiterseeds.com" ] } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "equals" }, "leftOperand": "%launch environment%", "rightOperand": "production" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC05ab99293c794368bba1a90141845bea-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL6973a39665394153b76d0b7b70153bc0", "name": "Pixel-DAD:Section:Agronomy:HelpfulQuestion:Facebook Ads", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "Pixel-DAD:Section:Agronomy:HelpfulQuestion:FacebookAds" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionAgronomy%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCb7d3774f9eb54bd5a038f6925864c744-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLa33bb87d16804a78a5a1106770f64c14", "name": "Profitability Calculator", "events": [ { "modulePath": "core/src/lib/events/entersViewport.js", "settings": { "frequency": "firstEntry", "elementSelector": "[data-step-active='true']" }, "ruleOrder": 50.0 }, { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "[data-step-active]", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { /* For Page Load Use Case */ s.linkTrackVars = "events,eVar39,eVar40,prop34"; s.linkTrackEvents = "event140,event141,event142,event143"; s.eVar39 = event.element.getAttribute("data-tool-name"); // s.eVar39 = _satellite.getVar("Tool Name | Data Attribute"); s.eVar40 = event.element.getAttribute("data-tool-step"); // s.eVar40 = _satellite.getVar("Tool Step | Data Attribute"); s.prop34 = event.element.getAttribute("data-crop-selected"); // s.prop34 = _satellite.getVar("Crop Name | Data Attribute"); _satellite.logger.log("s.eVar39: "+s.eVar39); _satellite.logger.log("s.eVar40: "+s.eVar40); _satellite.logger.log("s.prop34: "+s.prop34); var step = event.element.getAttribute("data-tool-step"); // var step = _satellite.getVar('Tool Step | Data Attribute'); var stepNum = step.match(/\d+/)[0] if (stepNum) { if(step.includes("1")) { _satellite.logger.log("event140 (step1)"); s.events = "event140"; } else if(step.includes("2")) { _satellite.logger.log("event141 (step2)"); s.events = "event141"; } else if(step.includes("3")) { _satellite.logger.log("event142 (step3)"); s.events = "event142"; } else if(step.includes("4")) { _satellite.logger.log("event143 (step4)"); s.events = "event143"; } } // setTimeout(function(){ s.tl(this,'o','Prof Calc Step') }, 300); } }, "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%Tool Name | Data Attribute%" }, { "name": "eVar40", "type": "value", "value": "%Tool Step | Data Attribute%" } ], "props": [ { "name": "prop34", "type": "value", "value": "%Crop Selected | Data Attribute%" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkType": "o" } } ] }, { "id": "RL2b78bba6d3db4d1f844f7426e2448891", "name": "Pixel-DAD:Harvest-contestThank-you:DCM - DEKALB", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageHarvest-contestThank-you%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC868f366d689c4533ba983bb47c939b54-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL04b6bd66a3344581aaf63975f869afdd", "name": "ContactMe - ZipcodeSearch | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "contactMeEnterZip" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ], "events": [ { "name": "event145" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Zipcode Search", "linkType": "o" } } ] }, { "id": "RLddadde9c0ab344e791eaa5c575136497", "name": "Global | All Pages | pageload | Pixels - Facebook", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC2dbd9fd9307943a3a612cd3f132a2fd6-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL990333b2b1704dc5a91b449d3242b4a7", "name": "Pixel-DAD:Disease-shield:VideoStart:DCM - DEKALB", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "DAD:Disease-shield:VideoStart:DCM-DEKALB" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDEKALBInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageDisease-shield%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC1a5e6a4c24f642b6a2a04968a081dcdf-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL5d2edcc2cec94fc2ba4eacba951944cc", "name": "Pixel-DAD:Section:Agronomy:VideoStart:Google Ads - Asgrow", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "DAD:Section:Agronomy:VideoStart:GoogleAds-Asgrow" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionAgronomy%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC4e87045554934ba993fcaf67830b4d26-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLffa1c3e37aa342518265c20986910938", "name": "content: internal search", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "track internal search" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC012bba7bdfb44807a18b47f19446efdb-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RLc43f27e2a351473ebdf95b382d5f9db2", "name": "Pixel-DAD:Harvest-contestThank-you:DCM - Asgrow", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageHarvest-contestThank-you%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC61fd0cf02d304c0f9e1ccfd2bfefc7bd-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL5e60d8e28fef41aeb45d2a0e0d55e403", "name": "Pixel-DAD:Section:Success-Stories:HelpfulQuestion:Facebook Ads", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "Pixel-DAD:Section:Success-Stories:HelpfulQuestion:FacebookAds" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionSuccess-stories%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCc2b79e49a3664abb8b176b188d590531-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLce592c25916743099ac0706ea747df7f", "name": "Click | Seed Finder | mySeedList | AA", "events": [ { "modulePath": "core/src/lib/events/historyChange.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "endsWith", "caseInsensitive": true }, "leftOperand": "%content: page name%", "rightOperand": "my-seed-list" } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.eVar39=digitalData.event[0].eventInfo.toolName; s.prop21=digitalData.event[0].eventInfo.toolLayout; } }, "trackerProperties": { "pageName": "%content: page name%" } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "page" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RLc239e53885c54f6b88eaec39ce926bb4", "name": "Pixel-DAD:Section:Success-stories:VideoStart:Google Ads - Deltapine/ Tribrand", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "DAD:Section:Success-stories:VideoStart:GoogleAds-Deltapine/Tribrand" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionSuccess-stories%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC3dbb6464086d4b0ea42a9ed6aa986974-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL64d73024fd644208a65e527cf39ca7e8", "name": "DAD | Team Locator | map/card-Click | Pixels - DCM, FB, GoogleAds", "events": [ { "modulePath": "core/src/lib/events/dataElementChange.js", "settings": { "name": "DAD | TeamLocator | toolStep" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "equals" }, "leftOperand": "%DAD | TeamLocator | toolStep%", "rightOperand": "dealer map|search button click" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "contains" }, "leftOperand": "%content: hostname%", "rightOperand": "dekalbasgrowdeltapine" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCed7cfd0489e54c7b94b7c253e0be891c-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC64994ff23e034315bceb6c6f8ee384ab-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCf74263a45e2d4a84bcf005f9d69d4c93-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC4d0eab5290dc49f481febb4a1e56755b-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCe7ef5868686143e98da37c35c41807a2-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL8394e9f0f49e45e993e5b7ec99126cd9", "name": "Pixel-DAD:Thank-you-subscribe:DCM - DEKALB", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageThank-you-subscribe%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC5dd70e2faec8417ca93c4c7822239ebc-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL0189d0cf5b974c5ba50634ecec582ba6", "name": "DecisionTree - ToolStart | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "decisionTreeToolLoad" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ], "events": [ { "name": "event21" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Decision Tree Tool Load", "linkType": "o" } } ] }, { "id": "RL8b23c350294642c287f2783637bffc20", "name": "Pixel: Regional Brands: Third Party Tags: Adwords: Global Tag", "events": [ { "modulePath": "core/src/lib/events/pageBottom.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "fontanelle.com", "goldcountryseed.com", "hubnerseed.com", "krugerseed.com", "lewishybrids.com", "jungseedgenetics.com", "rea-hybrids.com", "specialtyhybrids.com", "stewartseeds.com", "stoneseed.com" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": "// Global site tag (gtag.js) - Google AdWords: 796531584 - Last Updated 09-17-18\nvar gaSrc = document.createElement('script');\ngaSrc.setAttribute('language','javascript');\ngaSrc.setAttribute('src','https://www.googletagmanager.com/gtag/js?id=AW-796531584');\ndocument.head.appendChild(gaSrc);\n\nwindow.dataLayer = window.dataLayer || [];\nfunction gtag(){dataLayer.push(arguments);}\ngtag('js', new Date());\ngtag('config', 'AW-796531584');", "language": "javascript" } } ] }, { "id": "RLc503ae2a75a343d58a96dcb2c040f3b8", "name": "Pixel-DAD:CalculateCurves:DCM - DEKALB", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "dad-calculatecurve-dcm" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isToolOptimizeMySeed%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCed54479eb99b466a9a37560af4791e5b-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL0cf3dddebbf94713a0a4991a402f90e4", "name": "AllPages - MCIDCrossDomainCheck | DOMReady", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 10.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC0a2961c288a94bb6bf6f95a622fbde2d-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL2046bc29b23546b99fb6bb51aec557dd", "name": "HarvestResults - Interaction | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "harvestresultssearch" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ], "props": [ { "name": "prop41", "type": "value", "value": "%event.detail.zipCodeStatus%" }, { "name": "prop42", "type": "value", "value": "%event.detail.radiusStatus%" } ], "events": [ { "name": "event22" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Harvest Results - User Interactions", "linkType": "o" } } ] }, { "id": "RLf3c6208ff08c4492b0c897a581202841", "name": "DAD | All Pages | pageLoad | Pixels - GoogleAds, Twitter", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "contains" }, "leftOperand": "%content: hostname%", "rightOperand": "dekalbasgrowdeltapine" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC2c92e475b04a400f831aef92fb357f3d-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC164330b7b0c74776997b2d9509a9d6ed-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC9d47f290603b481db6eea9ef0c39a95a-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL5d94e09c851e46f9a95cbdcd69e05958", "name": "Pixel: Channel: FieldCheckUp Series Pages: Video Started", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "VideoStartedOnFieldCheckUpSeriesPages" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isProduction%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isChannelSite%" } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isFieldCheckUpSeries%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCe466c010061e4a5fb66e0d507af8deb0-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL0dd37ddf86eb4e27b8512b1802c4668a", "name": "QuestionWidget - Response | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "questionResponse" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" }, { "name": "eVar41", "type": "value", "value": "%event.detail.toolInteraction%" }, { "name": "eVar61", "type": "value", "value": "%event.detail.toolInteractionValue%" } ], "events": [ { "name": "event26" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Question Response", "linkType": "o" } } ] }, { "id": "RL7697b44e795c47b2809bd41498f5e311", "name": "content: global event listener", "events": [ { "modulePath": "core/src/lib/events/dataElementChange.js", "settings": { "name": "content: events" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC94d67db947644a988930f40753a11919-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL5975377cb7944d6db6140edf23b59adf", "name": "content: email click tracking", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "a", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { return target && target.href && target.href.startsWith("mailto:"); } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": false, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC87532a348f35419fbf440cbab9b394f0-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL03ffb3f416f641bc9408ae154540f6a5", "name": "DecisionTree - ProductName | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "decisionTreeViewProfile" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ], "props": [ { "name": "prop14", "type": "value", "value": "%event.detail.productName%" } ], "events": [ { "name": "event147" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "channel decision tree product name", "linkType": "o" } } ] }, { "id": "RL3fceb91a30354c648f46d025aee35743", "name": "ProductEntrySearch - AllProductsClicks | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "productEntryAllProducts" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" }, { "name": "eVar41", "type": "value", "value": "%event.detail.toolInteraction%" }, { "name": "eVar61", "type": "value", "value": "%event.detail.toolInteractionValue%" } ], "events": [ { "name": "event156" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "View All Products", "linkType": "o" } } ] }, { "id": "RL4ed2c77f16054d53a43c9435e886571d", "name": "Pixel: Regional Brands: Third Party Tags: Adwords: Conversion Tag: Dealer Locator Start", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "fontanelle.com", "goldcountryseed.com", "hubnerseed.com", "krugerseed.com", "lewishybrids.com", "jungseedgenetics.com", "rea-hybrids.com", "specialtyhybrids.com", "stewartseeds.com", "stoneseed.com" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "/dealer-locator.html", "valueIsRegex": true } ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC7de929d16e4e44ee8df57bdd7c4f7a1f-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL7234414fcf8e4ea99b2bfc33c3285ff3", "name": "Pixel: Regional Brands: Third Party Tags: Adwords: Conversion Tag: View Product Profile", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "fontanelle.com", "goldcountryseed.com", "hubnerseed.com", "krugerseed.com", "lewishybrids.com", "jungseedgenetics.com", "rea-hybrids.com", "specialtyhybrids.com", "stewartseeds.com", "stoneseed.com" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "/products/corn/", "valueIsRegex": true }, { "value": "/products/soybeans/", "valueIsRegex": true }, { "value": "/products/alfalfa/", "valueIsRegex": true }, { "value": "/products/sorghum/", "valueIsRegex": true }, { "value": "/products/silage/", "valueIsRegex": true }, { "value": "/products/wheat/", "valueIsRegex": true } ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC29cfc56348f24ae1b6ff84e4806e4e9f-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL329def8a3def4e609817e9993b3bd71b", "name": "AllPages (westbred,dad,channel) | WindowLoaded | Pixel - Kortx", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "dekalbasgrowdeltapine.com", "westbred.com", "channel.com", "stoneseed.com", "stewartseeds.com", "specialtyhybrids.com", "rea-hybrids.com", "lewishybrids.com", "krugerseed.com", "jungseedgenetics.com", "hubnerseed.com", "goldcountryseed.com", "fontanelle.com" ] } }, { "modulePath": "core/src/lib/conditions/dateRange.js", "settings": { "end": "2021-07-30T05:00:00Z", "start": "2020-06-01T05:00:00Z" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC4bd0ae1c5981407b88060ab8355e342c-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RLe0630fbeae604150a70b258bd8f87d1b", "name": "Pixel-DAD:Section:Agronomy:HelpfulQuestion:DCM - DEKALB", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "Pixel-DAD:Section:Agronomy:HelpfulQuestion:DCM-DEKALB" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionAgronomy%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC1e187444855d415795c30e7354709efb-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL9661ede488be490cb1bca709ca67c358", "name": "Pixel-DAD:Section:Agronomy:VideoStart:DCM - Asgrow", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "DAD:Section:Agronomy:VideoStart:DCM-Asgrow" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionAgronomy%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC5c2dcd9e830e4dd88e8f0de5a3363d73-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL374c435096d74851a8e85f40f06d3f85", "name": "Click | Feedback Modal | Submit | AA ", "events": [ { "modulePath": "core/src/lib/events/dataElementChange.js", "settings": { "name": "feedbackModalSubmit | DL event" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTruthy" }, "leftOperand": "%feedbackModalSubmit | DL event%" } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.linkTrackVars = s.apl(s.linkTrackVars,"events,prop30"); s.linkTrackEvents = s.apl(s.linkTrackEvents,"event41"); s.events = s.apl(s.events,"event41"); s.prop30 = digitalData.event[0].eventInfo.aemCompFeedbackType+" | "+digitalData.event[0].eventInfo.aemCompFeedbackHelpful; } }, "trackerProperties": { } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkType": "o" } } ] }, { "id": "RL8a56d7805f5d4d49a20025803c8452ba", "name": "Pixel-DAD:AllProduct:Google Ads - Asgrow", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageAllProduct%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC9c547b186eb445978560494c7d4b26ae-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL0fe3e0308a46461c929af43d825e73bf", "name": "Pixel-Channel:Section:Agronomy:HelpfulQuestion:DCM", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "Pixel-Channel:Section:Agronomy:HelpfulQuestion:DCM" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isProduction%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isChannelSite%" } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionAgronomy%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC8a0eab37e5be482ea0a76a5d781faa66-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL9a48271020b6491ab7be089f0f378f66", "name": "DAD | SeedFinder | addProductToSeedList | Pixels - DCM, FB, GoogleAds", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "dad:seedFinder:addProdToSeedList" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "contains" }, "leftOperand": "%content: hostname%", "rightOperand": "dekalbasgrowdeltapine" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCc1b6c421df1d4dadb57f1a198287056c-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCec4b892104174eabbe30c50400882c41-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCe0138b3ef1b24d36b87ffd651c1005b5-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC392883a099874a228fbd71120b7671c8-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC5864bae9d36f41d69f0c3a057c1a9dd5-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL8739b3707c5242de9630c3327e1191f0", "name": "zPixel - GoogleAds | AllPages (Dekalbasgrowdeltapine) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "dekalbasgrowdeltapine.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10118915\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10118915');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10118915/dadall/dadall+standard'\n});", "language": "javascript" } } ] }, { "id": "RL9d1ae2c6512b402091b5f044e0046bf0", "name": "Video - End | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "trackVideoEnd" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar15", "type": "value", "value": "%event.detail.videoTitle%" } ], "events": [ { "name": "event56" }, { "name": "event57", "value": "1" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Youtube Video Starts", "linkType": "o" } } ] }, { "id": "RL542de107ecd74811811cf91cc5b2c243", "name": "Channel | FieldCheckUp | FormSubmit | Pixel-gtag", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "gtag-SignUpforFieldCheckUp" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isFieldCheckUpSeries%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC4836599e98b044c7bf5b89f45d2ac61a-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLb469b95cdbf449719801cec704cfd7ee", "name": "DecisionTree - ThankYouLoad | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "decisionTreeThankYouLoad" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ], "events": [ { "name": "event150" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "channel decision tree - thank your for answering", "linkType": "o" } } ] }, { "id": "RL61c5bfe78b2b47849db73b52a4febe2a", "name": "AllPages - Replace AEM with Marketo Forms - PageTop", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/protocol.js", "settings": { "protocol": "https:" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "var docsToCheck = [\n {\n \"pageRegex\" : /\\.channel\\.com\\/en-us\\/about\\/become-a-seedsman\\.html/i,\n \"formNumber\" : 1992,\n \"cssSelector\" : 'div[class=\"mdc-layout-grid__cell mdc-layout-grid__cell--span-6\"]'\n },\n {\n \"pageRegex\" : /\\.channel\\.com\\/en-us\\/tools\\/climate-fieldview\\.html/i,\n \"formNumber\" : 2007,\n \"cssSelector\" : 'div[class=\"mdc-layout-grid__cell mdc-layout-grid__cell--span-6\"]'\n },\n {\n \"pageRegex\" : /\\.channel\\.com\\/en-us\\/find-your-seedsman\\/contact-details\\.html\\/seedsman\\//i,\n \"formNumber\" : 2009,\n \"cssSelector\" : 'div[class=\"mdc-layout-grid contact-form contact-layout-grid\"]',\n \"pullEmail\" : true,\n \"hrefToUpdate\" : \"a[href='#dsm-contact-form']\"\n },\n {\n \"pageRegex\" : /\\.channel\\.com\\/en-us\\/tools\\/channel-epay\\.html/i,\n \"formNumber\" : 2012,\n \"cssSelector\" : 'div[class=\"mdc-form\"]'\n },\n {\n \"pageRegex\" : /\\.channel\\.com\\/en-us\\/financing\\.html/i,\n \"formNumber\" : 2014,\n \"cssSelector\" : 'div[class=\"mdc-form\"]'\n },\n {\n \"pageRegex\" : /\\.channel\\.com\\/en-us\\/tools\\/grain-marketing\\.html/i,\n \"formNumber\" : 1994,\n \"cssSelector\" : 'div[class=\"mdc-form\"]'\n },\n {\n \"pageRegex\" : /\\.dekalbasgrowdeltapine\\.com\\/en-us\\/media\\/media-inquiries\\.html/i,\n \"formNumber\" : 2029,\n \"cssSelector\" : 'div[class=\"mdc-form\"]'\n },\n {\n \"pageRegex\" : /\\.stewartseeds\\.com\\/en-us\\/we-see-you\\.html/i,\n //\"formNumber\" : 2666,\n \"formNumber\" : 1668,\n \"cssSelector\" : 'div[class=\"form aem-GridColumn aem-GridColumn--default--12\"]'\n },\n {\n \"pageRegex\" : /\\.stoneseed\\.com\\/en-us\\/we-see-you\\.html/i,\n //\"formNumber\" : 2675,\n \"formNumber\" : 1673,\n \"cssSelector\" : 'div[class=\"form aem-GridColumn aem-GridColumn--default--12\"]'\n },\n {\n \"pageRegex\" : /\\.fontanelle\\.com\\/en-us\\/we-see-you\\.html/i,\n \"formNumber\" : 1616,\n \"cssSelector\" : 'div[class=\"form aem-GridColumn aem-GridColumn--default--12\"]'\n },\n {\n \"pageRegex\" : /\\.lewishybrids\\.com\\/en-us\\/we-see-you\\.html/i,\n //\"formNumber\" : 2657,\n \"formNumber\" : 1646,\n \"cssSelector\" : 'div[class=\"form aem-GridColumn aem-GridColumn--default--12\"]'\n },\n {\n \"pageRegex\" : /\\.specialtyhybrids\\.com\\/en-us\\/we-see-you\\.html/i,\n //\"formNumber\" : 2663,\n \"formNumber\" : 1662,\n \"cssSelector\" : 'div[class=\"form aem-GridColumn aem-GridColumn--default--12\"]'\n },\n {\n \"pageRegex\" : /\\.jungseedgenetics\\.com\\/en-us\\/we-see-you\\.html/i,\n //\"formNumber\" : 2673,\n \"formNumber\" : 1636,\n \"cssSelector\" : 'div[class=\"form aem-GridColumn aem-GridColumn--default--12\"]'\n },\n {\n \"pageRegex\" : /\\.krugerseed\\.com\\/en-us\\/we-see-you\\.html/i,\n //\"formNumber\" : 2658,\n \"formNumber\" : 1641,\n \"cssSelector\" : 'div[class=\"form aem-GridColumn aem-GridColumn--default--12\"]'\n },\n {\n \"pageRegex\" : /\\.hubnerseed\\.com\\/en-us\\/we-see-you\\.html/i,\n //\"formNumber\" : 2679,\n \"formNumber\" : 1629,\n \"cssSelector\" : 'div[class=\"form aem-GridColumn aem-GridColumn--default--12\"]'\n },\n {\n \"pageRegex\" : /\\.rea-hybrids\\.com\\/en-us\\/we-see-you\\.html/i,\n //\"formNumber\" : 2635,\n \"formNumber\" : 1651,\n \"cssSelector\" : 'div[class=\"form aem-GridColumn aem-GridColumn--default--12\"]'\n },\n {\n \"pageRegex\" : /\\.goldcountryseed\\.com\\/en-us\\/we-see-you\\.html/i,\n //\"formNumber\" : 2689,\n \"formNumber\" : 1624,\n \"cssSelector\" : 'div[class=\"form aem-GridColumn aem-GridColumn--default--12\"]'\n }\n];\n\nvar applyMarketoStyling = function(readyCallback) {\n //#region Append Styling\n var cssMap = {\n \"channel\": \"https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/Channel.css\",\n \"dekalbasgrowdeltapine\": \"https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/DAD.css\",\n \"fontanelle\": \"https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/Fontanelle.css\",\n \"goldcountryseed\": \"https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/Gold-Country-Seed.css\",\n \"hubnerseed\": \"https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/Hubner-Seed.css\",\n \"lewishybrids\": \"https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/Lewis-Hybrids.css\",\n \"jungseedgenetics\": \"https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/Jung-Seed-Genetics.css\",\n \"krugerseed\": \"https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/Kruger-Seed.css\",\n \"rea-hybrids\": \"https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/Rea-Hybrids.css\",\n \"specialtyhybrids\": \"https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/Specialty-Hybrids.css\",\n \"stewartseeds\": \"https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/Stewart.css\",\n \"stoneseed\": \"https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/Stone-Seed.css\"\n }\n for (var h in cssMap) {\n if (new RegExp(h).test(location.hostname)) {\n $('<link rel=\"stylesheet\" href=\"%cssfile%\" type=\"text/css\">'.replace('%cssfile%', cssMap[h])).appendTo('head');\n break;\n }\n }\n //#endregion\n\n //#region Marketo form ready code\n MktoForms2.whenReady(function(form) {\n\n //#region Fine-tune styling\n var isTwoColumn = !!$('.mktoFormCol+.mktoFormCol').length;\n var mkto_style = [];\n mkto_style.push('Body,p,li,h1,h2,h3{color:inherit}');\n mkto_style.push('.mktoForm input[type=checkbox] + label:before {top:1em}');\n if(isTwoColumn) mkto_style.push('.mktoForm .mktoFormRow{display:flex}');\n else mkto_style.push('.mktoForm{max-width: 650px; margin: 0 auto;}');\n $('<style id=\"mkto-style\">' + mkto_style.join('\\n') + '</style>').appendTo('body');\n\n $('.mktoForm select>option:eq(0):contains(Select...)').text('');\n $('button[type=submit].mktoButton').parent('.mktoButtonWrap[style]').css('margin-left', 'inherit')\n $('.mktoFormCol+.mktoFormCol').parent('.mktoFormRow').children('.mktoFormCol:first-of-type').css('padding-right', '1.3em');\n //#endregion\n\n //#region Form UI setup\n form.onSubmit(function() {\n // Get the form field values\n\n\n $('.ui-autocomplete-multiselect-item').append(\"<span style='visibility:hidden;'>,</span>\");\n $('input#county').css(\"visibility\", \"hidden\");\n $('input#county').val($('.ui-autocomplete-multiselect-item').text());\n $('input#locationofInterest').css(\"visibility\", \"hidden\");\n $('input#locationofInterest').val($('.ui-autocomplete-multiselect-item').text());\n\n\n });\n $(function() {\n var availableTags = [\n \"Autauga County, Alabama \", \"Baldwin County, Alabama \", \"Barbour County, Alabama \", \"Bibb County, Alabama \", \"Blount County, Alabama \", \"Bullock County, Alabama \", \"Butler County, Alabama \", \"Calhoun County, Alabama \", \"Chambers County, Alabama \", \"Cherokee County, Alabama \", \"Chilton County, Alabama \", \"Choctaw County, Alabama \", \"Clarke County, Alabama \", \"Clay County, Alabama \", \"Cleburne County, Alabama \", \"Coffee County, Alabama \", \"Colbert County, Alabama \", \"Conecuh County, Alabama \", \"Coosa County, Alabama \", \"Covington County, Alabama \", \"Crenshaw County, Alabama \", \"Cullman County, Alabama \", \"Dale County, Alabama \", \"Dallas County, Alabama \", \"DeKalb County, Alabama \", \"Elmore County, Alabama \", \"Escambia County, Alabama \", \"Etowah County, Alabama \", \"Fayette County, Alabama \", \"Franklin County, Alabama \", \"Geneva County, Alabama \", \"Greene County, Alabama \", \"Hale County, Alabama \", \"Henry County, Alabama \", \"Houston County, Alabama \", \"Jackson County, Alabama \", \"Jefferson County, Alabama \", \"Lamar County, Alabama \", \"Lauderdale County, Alabama \", \"Lawrence County, Alabama \", \"Lee County, Alabama \", \"Limestone County, Alabama \", \"Lowndes County, Alabama \", \"Macon County, Alabama \", \"Madison County, Alabama \", \"Marengo County, Alabama \", \"Marion County, Alabama \", \"Marshall County, Alabama \", \"Mobile County, Alabama \", \"Monroe County, Alabama \", \"Montgomery County, Alabama \", \"Morgan County, Alabama \", \"Perry County, Alabama \", \"Pickens County, Alabama \", \"Pike County, Alabama \", \"Randolph County, Alabama \", \"Russell County, Alabama \", \"St. Clair County, Alabama \", \"Shelby County, Alabama \", \"Sumter County, Alabama \", \"Talladega County, Alabama \", \"Tallapoosa County, Alabama \", \"Tuscaloosa County, Alabama \", \"Walker County, Alabama \", \"Washington County, Alabama \", \"Wilcox County, Alabama \", \"Winston County, Alabama \", \"Aleutians East Borough, Alaska \", \"Aleutians West Census Area, Alaska \", \"Anchorage, Municipality of, Alaska \", \"Bethel Census Area, Alaska \", \"Bristol Bay Borough, Alaska \", \"Denali Borough, Alaska \", \"Dillingham Census Area, Alaska \", \"Fairbanks North Star Borough, Alaska \", \"Haines Borough, Alaska \", \"Hoonah-Angoon Census Area, Alaska \", \"Juneau, City and Borough, Alaska \", \"Kenai Peninsula Borough, Alaska \", \"Ketchikan Gateway Borough, Alaska \", \"Kodiak Island Borough, Alaska \", \"Lake and Peninsula Borough, Alaska \", \"Matanuska-Susitna Borough, Alaska \", \"Nome Census Area, Alaska \", \"North Slope Borough, Alaska \", \"Northwest Arctic Borough, Alaska \", \"Petersburg Census Area, Alaska \", \"Prince of Wales-Hyder Census Area, Alaska \", \"Sitka, City and Borough of, Alaska \", \"Skagway Borough, Municipality of, Alaska \", \"Southeast Fairbanks Census Area, Alaska \", \"Valdez-Cordova Census Area, Alaska \", \"Wade Hampton Census Area, Alaska \", \"Wrangell, City and Borough of, Alaska \", \"Yakutat, City and Borough of, Alaska \", \"Yukon-Koyukuk Census Area, Alaska \", \"Apache County, Arizona \", \"Cochise County, Arizona \", \"Coconino County, Arizona \", \"Gila County, Arizona \", \"Graham County, Arizona \", \"Greenlee County, Arizona \", \"La Paz County, Arizona \", \"Maricopa County, Arizona \", \"Mohave County, Arizona \", \"Navajo County, Arizona \", \"Pima County, Arizona \", \"Pinal County, Arizona \", \"Santa Cruz County, Arizona \", \"Yavapai County, Arizona \", \"Yuma County, Arizona \", \"Arkansas County, Arkansas \", \"Ashley County, Arkansas \", \"Baxter County, Arkansas \", \"Benton County, Arkansas \", \"Boone County, Arkansas \", \"Bradley County, Arkansas \", \"Calhoun County, Arkansas \", \"Carroll County, Arkansas \", \"Chicot County, Arkansas \", \"Clark County, Arkansas \", \"Clay County, Arkansas \", \"Cleburne County, Arkansas \", \"Cleveland County, Arkansas \", \"Columbia County, Arkansas \", \"Conway County, Arkansas \", \"Craighead County, Arkansas \", \"Crawford County, Arkansas \", \"Crittenden County, Arkansas \", \"Cross County, Arkansas \", \"Dallas County, Arkansas \", \"Desha County, Arkansas \", \"Drew County, Arkansas \", \"Faulkner County, Arkansas \", \"Franklin County, Arkansas \", \"Fulton County, Arkansas \", \"Garland County, Arkansas \", \"Grant County, Arkansas \", \"Greene County, Arkansas \", \"Hempstead County, Arkansas \", \"Hot Spring County, Arkansas \", \"Howard County, Arkansas \", \"Independence County, Arkansas \", \"Izard County, Arkansas \", \"Jackson County, Arkansas \", \"Jefferson County, Arkansas \", \"Johnson County, Arkansas \", \"Lafayette County, Arkansas \", \"Lawrence County, Arkansas \", \"Lee County, Arkansas \", \"Lincoln County, Arkansas \", \"Little River County, Arkansas \", \"Logan County, Arkansas \", \"Lonoke County, Arkansas \", \"Madison County, Arkansas \", \"Marion County, Arkansas \", \"Miller County, Arkansas \", \"Mississippi County, Arkansas \", \"Monroe County, Arkansas \", \"Montgomery County, Arkansas \", \"Nevada County, Arkansas \", \"Newton County, Arkansas \", \"Ouachita County, Arkansas \", \"Perry County, Arkansas \", \"Phillips County, Arkansas \", \"Pike County, Arkansas \", \"Poinsett County, Arkansas \", \"Polk County, Arkansas \", \"Pope County, Arkansas \", \"Prairie County, Arkansas \", \"Pulaski County, Arkansas \", \"Randolph County, Arkansas \", \"St. Francis County, Arkansas \", \"Saline County, Arkansas \", \"Scott County, Arkansas \", \"Searcy County, Arkansas \", \"Sebastian County, Arkansas \", \"Sevier County, Arkansas \", \"Sharp County, Arkansas \", \"Stone County, Arkansas \", \"Union County, Arkansas \", \"Van Buren County, Arkansas \", \"Washington County, Arkansas \", \"White County, Arkansas \", \"Woodruff County, Arkansas \", \"Yell County, Arkansas \", \"Alameda County, California \", \"Alpine County, California \", \"Amador County, California \", \"Butte County, California \", \"Calaveras County, California \", \"Colusa County, California \", \"Contra Costa County, California \", \"Del Norte County, California \", \"El Dorado County, California \", \"Fresno County, California \", \"Glenn County, California \", \"Humboldt County, California \", \"Imperial County, California \", \"Inyo County, California \", \"Kern County, California \", \"Kings County, California \", \"Lake County, California \", \"Lassen County, California \", \"Los Angeles County, California \", \"Madera County, California \", \"Marin County, California \", \"Mariposa County, California \", \"Mendocino County, California \", \"Merced County, California \", \"Modoc County, California \", \"Mono County, California \", \"Monterey County, California \", \"Napa County, California \", \"Nevada County, California \", \"Orange County, California \", \"Placer County, California \", \"Plumas County, California \", \"Riverside County, California \", \"Sacramento County, California \", \"San Benito County, California \", \"San Bernardino County, California \", \"San Diego County, California \", \"San Francisco, City and County of, California \", \"San Joaquin County, California \", \"San Luis Obispo County, California \", \"San Mateo County, California \", \"Santa Barbara County, California \", \"Santa Clara County, California \", \"Santa Cruz County, California \", \"Shasta County, California \", \"Sierra County, California \", \"Siskiyou County, California \", \"Solano County, California \", \"Sonoma County, California \", \"Stanislaus County, California \", \"Sutter County, California \", \"Tehama County, California \", \"Trinity County, California \", \"Tulare County, California \", \"Tuolumne County, California \", \"Ventura County, California \", \"Yolo County, California \", \"Yuba County, California \", \"Adams County, Colorado \", \"Alamosa County, Colorado \", \"Arapahoe County, Colorado \", \"Archuleta County, Colorado \", \"Baca County, Colorado \", \"Bent County, Colorado \", \"Boulder County, Colorado \", \"Broomfield, City and County of, Colorado \", \"Chaffee County, Colorado \", \"Cheyenne County, Colorado \", \"Clear Creek County, Colorado \", \"Conejos County, Colorado \", \"Costilla County, Colorado \", \"Crowley County, Colorado \", \"Custer County, Colorado \", \"Delta County, Colorado \", \"Denver, City and County of, Colorado \", \"Dolores County, Colorado \", \"Douglas County, Colorado \", \"Eagle County, Colorado \", \"Elbert County, Colorado \", \"El Paso County, Colorado \", \"Fremont County, Colorado \", \"Garfield County, Colorado \", \"Gilpin County, Colorado \", \"Grand County, Colorado \", \"Gunnison County, Colorado \", \"Hinsdale County, Colorado \", \"Huerfano County, Colorado \", \"Jackson County, Colorado \", \"Jefferson County, Colorado \", \"Kiowa County, Colorado \", \"Kit Carson County, Colorado \", \"Lake County, Colorado \", \"La Plata County, Colorado \", \"Larimer County, Colorado \", \"Las Animas County, Colorado \", \"Lincoln County, Colorado \", \"Logan County, Colorado \", \"Mesa County, Colorado \", \"Mineral County, Colorado \", \"Moffat County, Colorado \", \"Montezuma County, Colorado \", \"Montrose County, Colorado \", \"Morgan County, Colorado \", \"Otero County, Colorado \", \"Ouray County, Colorado \", \"Park County, Colorado \", \"Phillips County, Colorado \", \"Pitkin County, Colorado \", \"Prowers County, Colorado \", \"Pueblo County, Colorado \", \"Rio Blanco County, Colorado \", \"Rio Grande County, Colorado \", \"Routt County, Colorado \", \"Saguache County, Colorado \", \"San Juan County, Colorado \", \"San Miguel County, Colorado \", \"Sedgwick County, Colorado \", \"Summit County, Colorado \", \"Teller County, Colorado \", \"Washington County, Colorado \", \"Weld County, Colorado \", \"Yuma County, Colorado \", \"Fairfield County, Connecticut \", \"Hartford County, Connecticut \", \"Litchfield County, Connecticut \", \"Middlesex County, Connecticut \", \"New Haven County, Connecticut \", \"New London County, Connecticut \", \"Tolland County, Connecticut \", \"Windham County, Connecticut \", \"Kent County, Delaware \", \"New Castle County, Delaware \", \"Sussex County, Delaware \", \"District of Columbia, District of Columbia \", \"Alachua County, Florida \", \"Baker County, Florida \", \"Bay County, Florida \", \"Bradford County, Florida \", \"Brevard County, Florida \", \"Broward County, Florida \", \"Calhoun County, Florida \", \"Charlotte County, Florida \", \"Citrus County, Florida \", \"Clay County, Florida \", \"Collier County, Florida \", \"Columbia County, Florida \", \"DeSoto County, Florida \", \"Dixie County, Florida \", \"Duval County, Florida \", \"Escambia County, Florida \", \"Flagler County, Florida \", \"Franklin County, Florida \", \"Gadsden County, Florida \", \"Gilchrist County, Florida \", \"Glades County, Florida \", \"Gulf County, Florida \", \"Hamilton County, Florida \", \"Hardee County, Florida \", \"Hendry County, Florida \", \"Hernando County, Florida \", \"Highlands County, Florida \", \"Hillsborough County, Florida \", \"Holmes County, Florida \", \"Indian River County, Florida \", \"Jackson County, Florida \", \"Jefferson County, Florida \", \"Lafayette County, Florida \", \"Lake County, Florida \", \"Lee County, Florida \", \"Leon County, Florida \", \"Levy County, Florida \", \"Liberty County, Florida \", \"Madison County, Florida \", \"Manatee County, Florida \", \"Marion County, Florida \", \"Martin County, Florida \", \"Miami-Dade County, Florida \", \"Monroe County, Florida \", \"Nassau County, Florida \", \"Okaloosa County, Florida \", \"Okeechobee County, Florida \", \"Orange County, Florida \", \"Osceola County, Florida \", \"Palm Beach County, Florida \", \"Pasco County, Florida \", \"Pinellas County, Florida \", \"Polk County, Florida \", \"Putnam County, Florida \", \"St. Johns County, Florida \", \"St. Lucie County, Florida \", \"Santa Rosa County, Florida \", \"Sarasota County, Florida \", \"Seminole County, Florida \", \"Sumter County, Florida \", \"Suwannee County, Florida \", \"Taylor County, Florida \", \"Union County, Florida \", \"Volusia County, Florida \", \"Wakulla County, Florida \", \"Walton County, Florida \", \"Washington County, Florida \", \"Appling County, Georgia \", \"Atkinson County, Georgia \", \"Bacon County, Georgia \", \"Baker County, Georgia \", \"Baldwin County, Georgia \", \"Banks County, Georgia \", \"Barrow County, Georgia \", \"Bartow County, Georgia \", \"Ben Hill County, Georgia \", \"Berrien County, Georgia \", \"Bibb County, Georgia \", \"Bleckley County, Georgia \", \"Brantley County, Georgia \", \"Brooks County, Georgia \", \"Bryan County, Georgia \", \"Bulloch County, Georgia \", \"Burke County, Georgia \", \"Butts County, Georgia \", \"Calhoun County, Georgia \", \"Camden County, Georgia \", \"Candler County, Georgia \", \"Carroll County, Georgia \", \"Catoosa County, Georgia \", \"Charlton County, Georgia \", \"Chatham County, Georgia \", \"Chattahoochee County, Georgia \", \"Chattooga County, Georgia \", \"Cherokee County, Georgia \", \"Clarke County, Georgia \", \"Clay County, Georgia \", \"Clayton County, Georgia \", \"Clinch County, Georgia \", \"Cobb County, Georgia \", \"Coffee County, Georgia \", \"Colquitt County, Georgia \", \"Columbia County, Georgia \", \"Cook County, Georgia \", \"Coweta County, Georgia \", \"Crawford County, Georgia \", \"Crisp County, Georgia \", \"Dade County, Georgia \", \"Dawson County, Georgia \", \"Decatur County, Georgia \", \"DeKalb County, Georgia \", \"Dodge County, Georgia \", \"Dooly County, Georgia \", \"Dougherty County, Georgia \", \"Douglas County, Georgia \", \"Early County, Georgia \", \"Echols County, Georgia \", \"Effingham County, Georgia \", \"Elbert County, Georgia \", \"Emanuel County, Georgia \", \"Evans County, Georgia \", \"Fannin County, Georgia \", \"Fayette County, Georgia \", \"Floyd County, Georgia \", \"Forsyth County, Georgia \", \"Franklin County, Georgia \", \"Fulton County, Georgia \", \"Gilmer County, Georgia \", \"Glascock County, Georgia \", \"Glynn County, Georgia \", \"Gordon County, Georgia \", \"Grady County, Georgia \", \"Greene County, Georgia \", \"Gwinnett County, Georgia \", \"Habersham County, Georgia \", \"Hall County, Georgia \", \"Hancock County, Georgia \", \"Haralson County, Georgia \", \"Harris County, Georgia \", \"Hart County, Georgia \", \"Heard County, Georgia \", \"Henry County, Georgia \", \"Houston County, Georgia \", \"Irwin County, Georgia \", \"Jackson County, Georgia \", \"Jasper County, Georgia \", \"Jeff Davis County, Georgia \", \"Jefferson County, Georgia \", \"Jenkins County, Georgia \", \"Johnson County, Georgia \", \"Jones County, Georgia \", \"Lamar County, Georgia \", \"Lanier County, Georgia \", \"Laurens County, Georgia \", \"Lee County, Georgia \", \"Liberty County, Georgia \", \"Lincoln County, Georgia \", \"Long County, Georgia \", \"Lowndes County, Georgia \", \"Lumpkin County, Georgia \", \"McDuffie County, Georgia \", \"McIntosh County, Georgia \", \"Macon County, Georgia \", \"Madison County, Georgia \", \"Marion County, Georgia \", \"Meriwether County, Georgia \", \"Miller County, Georgia \", \"Mitchell County, Georgia \", \"Monroe County, Georgia \", \"Montgomery County, Georgia \", \"Morgan County, Georgia \", \"Murray County, Georgia \", \"Muscogee County, Georgia \", \"Newton County, Georgia \", \"Oconee County, Georgia \", \"Oglethorpe County, Georgia \", \"Paulding County, Georgia \", \"Peach County, Georgia \", \"Pickens County, Georgia \", \"Pierce County, Georgia \", \"Pike County, Georgia \", \"Polk County, Georgia \", \"Pulaski County, Georgia \", \"Putnam County, Georgia \", \"Quitman County, Georgia \", \"Rabun County, Georgia \", \"Randolph County, Georgia \", \"Richmond County, Georgia \", \"Rockdale County, Georgia \", \"Schley County, Georgia \", \"Screven County, Georgia \", \"Seminole County, Georgia \", \"Spalding County, Georgia \", \"Stephens County, Georgia \", \"Stewart County, Georgia \", \"Sumter County, Georgia \", \"Talbot County, Georgia \", \"Taliaferro County, Georgia \", \"Tattnall County, Georgia \", \"Taylor County, Georgia \", \"Telfair County, Georgia \", \"Terrell County, Georgia \", \"Thomas County, Georgia \", \"Tift County, Georgia \", \"Toombs County, Georgia \", \"Towns County, Georgia \", \"Treutlen County, Georgia \", \"Troup County, Georgia \", \"Turner County, Georgia \", \"Twiggs County, Georgia \", \"Union County, Georgia \", \"Upson County, Georgia \", \"Walker County, Georgia \", \"Walton County, Georgia \", \"Ware County, Georgia \", \"Warren County, Georgia \", \"Washington County, Georgia \", \"Wayne County, Georgia \", \"Webster County, Georgia \", \"Wheeler County, Georgia \", \"White County, Georgia \", \"Whitfield County, Georgia \", \"Wilcox County, Georgia \", \"Wilkes County, Georgia \", \"Wilkinson County, Georgia \", \"Worth County, Georgia \", \"Hawaii County, Hawai?i \", \"Honolulu, City and County of, Hawai?i \", \"Kalawao County, Hawai?i \", \"Kauai County, Hawai?i \", \"Maui County, Hawai?i \", \"Ada County, Idaho \", \"Adams County, Idaho \", \"Bannock County, Idaho \", \"Bear Lake County, Idaho \", \"Benewah County, Idaho \", \"Bingham County, Idaho \", \"Blaine County, Idaho \", \"Boise County, Idaho \", \"Bonner County, Idaho \", \"Bonneville County, Idaho \", \"Boundary County, Idaho \", \"Butte County, Idaho \", \"Camas County, Idaho \", \"Canyon County, Idaho \", \"Caribou County, Idaho \", \"Cassia County, Idaho \", \"Clark County, Idaho \", \"Clearwater County, Idaho \", \"Custer County, Idaho \", \"Elmore County, Idaho \", \"Franklin County, Idaho \", \"Fremont County, Idaho \", \"Gem County, Idaho \", \"Gooding County, Idaho \", \"Idaho County, Idaho \", \"Jefferson County, Idaho \", \"Jerome County, Idaho \", \"Kootenai County, Idaho \", \"Latah County, Idaho \", \"Lemhi County, Idaho \", \"Lewis County, Idaho \", \"Lincoln County, Idaho \", \"Madison County, Idaho \", \"Minidoka County, Idaho \", \"Nez Perce County, Idaho \", \"Oneida County, Idaho \", \"Owyhee County, Idaho \", \"Payette County, Idaho \", \"Power County, Idaho \", \"Shoshone County, Idaho \", \"Teton County, Idaho \", \"Twin Falls County, Idaho \", \"Valley County, Idaho \", \"Washington County, Idaho \", \"Adams County, Illinois \", \"Alexander County, Illinois \", \"Bond County, Illinois \", \"Boone County, Illinois \", \"Brown County, Illinois \", \"Bureau County, Illinois \", \"Calhoun County, Illinois \", \"Carroll County, Illinois \", \"Cass County, Illinois \", \"Champaign County, Illinois \", \"Christian County, Illinois \", \"Clark County, Illinois \", \"Clay County, Illinois \", \"Clinton County, Illinois \", \"Coles County, Illinois \", \"Cook County, Illinois \", \"Crawford County, Illinois \", \"Cumberland County, Illinois \", \"DeKalb County, Illinois \", \"De Witt County, Illinois \", \"Douglas County, Illinois \", \"DuPage County, Illinois \", \"Edgar County, Illinois \", \"Edwards County, Illinois \", \"Effingham County, Illinois \", \"Fayette County, Illinois \", \"Ford County, Illinois \", \"Franklin County, Illinois \", \"Fulton County, Illinois \", \"Gallatin County, Illinois \", \"Greene County, Illinois \", \"Grundy County, Illinois \", \"Hamilton County, Illinois \", \"Hancock County, Illinois \", \"Hardin County, Illinois \", \"Henderson County, Illinois \", \"Henry County, Illinois \", \"Iroquois County, Illinois \", \"Jackson County, Illinois \", \"Jasper County, Illinois \", \"Jefferson County, Illinois \", \"Jersey County, Illinois \", \"Jo Daviess County, Illinois \", \"Johnson County, Illinois \", \"Kane County, Illinois \", \"Kankakee County, Illinois \", \"Kendall County, Illinois \", \"Knox County, Illinois \", \"Lake County, Illinois \", \"LaSalle County, Illinois \", \"Lawrence County, Illinois \", \"Lee County, Illinois \", \"Livingston County, Illinois \", \"Logan County, Illinois \", \"McDonough County, Illinois \", \"McHenry County, Illinois \", \"McLean County, Illinois \", \"Macon County, Illinois \", \"Macoupin County, Illinois \", \"Madison County, Illinois \", \"Marion County, Illinois \", \"Marshall County, Illinois \", \"Mason County, Illinois \", \"Massac County, Illinois \", \"Menard County, Illinois \", \"Mercer County, Illinois \", \"Monroe County, Illinois \", \"Montgomery County, Illinois \", \"Morgan County, Illinois \", \"Moultrie County, Illinois \", \"Ogle County, Illinois \", \"Peoria County, Illinois \", \"Perry County, Illinois \", \"Piatt County, Illinois \", \"Pike County, Illinois \", \"Pope County, Illinois \", \"Pulaski County, Illinois \", \"Putnam County, Illinois \", \"Randolph County, Illinois \", \"Richland County, Illinois \", \"Rock Island County, Illinois \", \"St. Clair County, Illinois \", \"Saline County, Illinois \", \"Sangamon County, Illinois \", \"Schuyler County, Illinois \", \"Scott County, Illinois \", \"Shelby County, Illinois \", \"Stark County, Illinois \", \"Stephenson County, Illinois \", \"Tazewell County, Illinois \", \"Union County, Illinois \", \"Vermilion County, Illinois \", \"Wabash County, Illinois \", \"Warren County, Illinois \", \"Washington County, Illinois \", \"Wayne County, Illinois \", \"White County, Illinois \", \"Whiteside County, Illinois \", \"Will County, Illinois \", \"Williamson County, Illinois \", \"Winnebago County, Illinois \", \"Woodford County, Illinois \", \"Adams County, Indiana \", \"Allen County, Indiana \", \"Bartholomew County, Indiana \", \"Benton County, Indiana \", \"Blackford County, Indiana \", \"Boone County, Indiana \", \"Brown County, Indiana \", \"Carroll County, Indiana \", \"Cass County, Indiana \", \"Clark County, Indiana \", \"Clay County, Indiana \", \"Clinton County, Indiana \", \"Crawford County, Indiana \", \"Daviess County, Indiana \", \"Dearborn County, Indiana \", \"Decatur County, Indiana \", \"DeKalb County, Indiana \", \"Delaware County, Indiana \", \"Dubois County, Indiana \", \"Elkhart County, Indiana \", \"Fayette County, Indiana \", \"Floyd County, Indiana \", \"Fountain County, Indiana \", \"Franklin County, Indiana \", \"Fulton County, Indiana \", \"Gibson County, Indiana \", \"Grant County, Indiana \", \"Greene County, Indiana \", \"Hamilton County, Indiana \", \"Hancock County, Indiana \", \"Harrison County, Indiana \", \"Hendricks County, Indiana \", \"Henry County, Indiana \", \"Howard County, Indiana \", \"Huntington County, Indiana \", \"Jackson County, Indiana \", \"Jasper County, Indiana \", \"Jay County, Indiana \", \"Jefferson County, Indiana \", \"Jennings County, Indiana \", \"Johnson County, Indiana \", \"Knox County, Indiana \", \"Kosciusko County, Indiana \", \"LaGrange County, Indiana \", \"Lake County, Indiana \", \"LaPorte County, Indiana \", \"Lawrence County, Indiana \", \"Madison County, Indiana \", \"Marion County, Indiana \", \"Marshall County, Indiana \", \"Martin County, Indiana \", \"Miami County, Indiana \", \"Monroe County, Indiana \", \"Montgomery County, Indiana \", \"Morgan County, Indiana \", \"Newton County, Indiana \", \"Noble County, Indiana \", \"Ohio County, Indiana \", \"Orange County, Indiana \", \"Owen County, Indiana \", \"Parke County, Indiana \", \"Perry County, Indiana \", \"Pike County, Indiana \", \"Porter County, Indiana \", \"Posey County, Indiana \", \"Pulaski County, Indiana \", \"Putnam County, Indiana \", \"Randolph County, Indiana \", \"Ripley County, Indiana \", \"Rush County, Indiana \", \"St. Joseph County, Indiana \", \"Scott County, Indiana \", \"Shelby County, Indiana \", \"Spencer County, Indiana \", \"Starke County, Indiana \", \"Steuben County, Indiana \", \"Sullivan County, Indiana \", \"Switzerland County, Indiana \", \"Tippecanoe County, Indiana \", \"Tipton County, Indiana \", \"Union County, Indiana \", \"Vanderburgh County, Indiana \", \"Vermillion County, Indiana \", \"Vigo County, Indiana \", \"Wabash County, Indiana \", \"Warren County, Indiana \", \"Warrick County, Indiana \", \"Washington County, Indiana \", \"Wayne County, Indiana \", \"Wells County, Indiana \", \"White County, Indiana \", \"Whitley County, Indiana \", \"Adair County, Iowa \", \"Adams County, Iowa \", \"Allamakee County, Iowa \", \"Appanoose County, Iowa \", \"Audubon County, Iowa \", \"Benton County, Iowa \", \"Black Hawk County, Iowa \", \"Boone County, Iowa \", \"Bremer County, Iowa \", \"Buchanan County, Iowa \", \"Buena Vista County, Iowa \", \"Butler County, Iowa \", \"Calhoun County, Iowa \", \"Carroll County, Iowa \", \"Cass County, Iowa \", \"Cedar County, Iowa \", \"Cerro Gordo County, Iowa \", \"Cherokee County, Iowa \", \"Chickasaw County, Iowa \", \"Clarke County, Iowa \", \"Clay County, Iowa \", \"Clayton County, Iowa \", \"Clinton County, Iowa \", \"Crawford County, Iowa \", \"Dallas County, Iowa \", \"Davis County, Iowa \", \"Decatur County, Iowa \", \"Delaware County, Iowa \", \"Des Moines County, Iowa \", \"Dickinson County, Iowa \", \"Dubuque County, Iowa \", \"Emmet County, Iowa \", \"Fayette County, Iowa \", \"Floyd County, Iowa \", \"Franklin County, Iowa \", \"Fremont County, Iowa \", \"Greene County, Iowa \", \"Grundy County, Iowa \", \"Guthrie County, Iowa \", \"Hamilton County, Iowa \", \"Hancock County, Iowa \", \"Hardin County, Iowa \", \"Harrison County, Iowa \", \"Henry County, Iowa \", \"Howard County, Iowa \", \"Humboldt County, Iowa \", \"Ida County, Iowa \", \"Iowa County, Iowa \", \"Jackson County, Iowa \", \"Jasper County, Iowa \", \"Jefferson County, Iowa \", \"Johnson County, Iowa \", \"Jones County, Iowa \", \"Keokuk County, Iowa \", \"Kossuth County, Iowa \", \"Lee County, Iowa \", \"Linn County, Iowa \", \"Louisa County, Iowa \", \"Lucas County, Iowa \", \"Lyon County, Iowa \", \"Madison County, Iowa \", \"Mahaska County, Iowa \", \"Marion County, Iowa \", \"Marshall County, Iowa \", \"Mills County, Iowa \", \"Mitchell County, Iowa \", \"Monona County, Iowa \", \"Monroe County, Iowa \", \"Montgomery County, Iowa \", \"Muscatine County, Iowa \", \"O'Brien County, Iowa \", \"Osceola County, Iowa \", \"Page County, Iowa \", \"Palo Alto County, Iowa \", \"Plymouth County, Iowa \", \"Pocahontas County, Iowa \", \"Polk County, Iowa \", \"Pottawattamie County, Iowa \", \"Poweshiek County, Iowa \", \"Ringgold County, Iowa \", \"Sac County, Iowa \", \"Scott County, Iowa \", \"Shelby County, Iowa \", \"Sioux County, Iowa \", \"Story County, Iowa \", \"Tama County, Iowa \", \"Taylor County, Iowa \", \"Union County, Iowa \", \"Van Buren County, Iowa \", \"Wapello County, Iowa \", \"Warren County, Iowa \", \"Washington County, Iowa \", \"Wayne County, Iowa \", \"Webster County, Iowa \", \"Winnebago County, Iowa \", \"Winneshiek County, Iowa \", \"Woodbury County, Iowa \", \"Worth County, Iowa \", \"Wright County, Iowa \", \"Allen County, Kansas \", \"Anderson County, Kansas \", \"Atchison County, Kansas \", \"Barber County, Kansas \", \"Barton County, Kansas \", \"Bourbon County, Kansas \", \"Brown County, Kansas \", \"Butler County, Kansas \", \"Chase County, Kansas \", \"Chautauqua County, Kansas \", \"Cherokee County, Kansas \", \"Cheyenne County, Kansas \", \"Clark County, Kansas \", \"Clay County, Kansas \", \"Cloud County, Kansas \", \"Coffey County, Kansas \", \"Comanche County, Kansas \", \"Cowley County, Kansas \", \"Crawford County, Kansas \", \"Decatur County, Kansas \", \"Dickinson County, Kansas \", \"Doniphan County, Kansas \", \"Douglas County, Kansas \", \"Edwards County, Kansas \", \"Elk County, Kansas \", \"Ellis County, Kansas \", \"Ellsworth County, Kansas \", \"Finney County, Kansas \", \"Ford County, Kansas \", \"Franklin County, Kansas \", \"Geary County, Kansas \", \"Gove County, Kansas \", \"Graham County, Kansas \", \"Grant County, Kansas \", \"Gray County, Kansas \", \"Greeley County, Kansas \", \"Greenwood County, Kansas \", \"Hamilton County, Kansas \", \"Harper County, Kansas \", \"Harvey County, Kansas \", \"Haskell County, Kansas \", \"Hodgeman County, Kansas \", \"Jackson County, Kansas \", \"Jefferson County, Kansas \", \"Jewell County, Kansas \", \"Johnson County, Kansas \", \"Kearny County, Kansas \", \"Kingman County, Kansas \", \"Kiowa County, Kansas \", \"Labette County, Kansas \", \"Lane County, Kansas \", \"Leavenworth County, Kansas \", \"Lincoln County, Kansas \", \"Linn County, Kansas \", \"Logan County, Kansas \", \"Lyon County, Kansas \", \"McPherson County, Kansas \", \"Marion County, Kansas \", \"Marshall County, Kansas \", \"Meade County, Kansas \", \"Miami County, Kansas \", \"Mitchell County, Kansas \", \"Montgomery County, Kansas \", \"Morris County, Kansas \", \"Morton County, Kansas \", \"Nemaha County, Kansas \", \"Neosho County, Kansas \", \"Ness County, Kansas \", \"Norton County, Kansas \", \"Osage County, Kansas \", \"Osborne County, Kansas \", \"Ottawa County, Kansas \", \"Pawnee County, Kansas \", \"Phillips County, Kansas \", \"Pottawatomie County, Kansas \", \"Pratt County, Kansas \", \"Rawlins County, Kansas \", \"Reno County, Kansas \", \"Republic County, Kansas \", \"Rice County, Kansas \", \"Riley County, Kansas \", \"Rooks County, Kansas \", \"Rush County, Kansas \", \"Russell County, Kansas \", \"Saline County, Kansas \", \"Scott County, Kansas \", \"Sedgwick County, Kansas \", \"Seward County, Kansas \", \"Shawnee County, Kansas \", \"Sheridan County, Kansas \", \"Sherman County, Kansas \", \"Smith County, Kansas \", \"Stafford County, Kansas \", \"Stanton County, Kansas \", \"Stevens County, Kansas \", \"Sumner County, Kansas \", \"Thomas County, Kansas \", \"Trego County, Kansas \", \"Wabaunsee County, Kansas \", \"Wallace County, Kansas \", \"Washington County, Kansas \", \"Wichita County, Kansas \", \"Wilson County, Kansas \", \"Woodson County, Kansas \", \"Wyandotte County, Kansas \", \"Adair County, Kentucky \", \"Allen County, Kentucky \", \"Anderson County, Kentucky \", \"Ballard County, Kentucky \", \"Barren County, Kentucky \", \"Bath County, Kentucky \", \"Bell County, Kentucky \", \"Boone County, Kentucky \", \"Bourbon County, Kentucky \", \"Boyd County, Kentucky \", \"Boyle County, Kentucky \", \"Bracken County, Kentucky \", \"Breathitt County, Kentucky \", \"Breckinridge County, Kentucky \", \"Bullitt County, Kentucky \", \"Butler County, Kentucky \", \"Caldwell County, Kentucky \", \"Calloway County, Kentucky \", \"Campbell County, Kentucky \", \"Carlisle County, Kentucky \", \"Carroll County, Kentucky \", \"Carter County, Kentucky \", \"Casey County, Kentucky \", \"Christian County, Kentucky \", \"Clark County, Kentucky \", \"Clay County, Kentucky \", \"Clinton County, Kentucky \", \"Crittenden County, Kentucky \", \"Cumberland County, Kentucky \", \"Daviess County, Kentucky \", \"Edmonson County, Kentucky \", \"Elliott County, Kentucky \", \"Estill County, Kentucky \", \"Fayette County, Kentucky \", \"Fleming County, Kentucky \", \"Floyd County, Kentucky \", \"Franklin County, Kentucky \", \"Fulton County, Kentucky \", \"Gallatin County, Kentucky \", \"Garrard County, Kentucky \", \"Grant County, Kentucky \", \"Graves County, Kentucky \", \"Grayson County, Kentucky \", \"Green County, Kentucky \", \"Greenup County, Kentucky \", \"Hancock County, Kentucky \", \"Hardin County, Kentucky \", \"Harlan County, Kentucky \", \"Harrison County, Kentucky \", \"Hart County, Kentucky \", \"Henderson County, Kentucky \", \"Henry County, Kentucky \", \"Hickman County, Kentucky \", \"Hopkins County, Kentucky \", \"Jackson County, Kentucky \", \"Jefferson County, Kentucky \", \"Jessamine County, Kentucky \", \"Johnson County, Kentucky \", \"Kenton County, Kentucky \", \"Knott County, Kentucky \", \"Knox County, Kentucky \", \"Larue County, Kentucky \", \"Laurel County, Kentucky \", \"Lawrence County, Kentucky \", \"Lee County, Kentucky \", \"Leslie County, Kentucky \", \"Letcher County, Kentucky \", \"Lewis County, Kentucky \", \"Lincoln County, Kentucky \", \"Livingston County, Kentucky \", \"Logan County, Kentucky \", \"Lyon County, Kentucky \", \"McCracken County, Kentucky \", \"McCreary County, Kentucky \", \"McLean County, Kentucky \", \"Madison County, Kentucky \", \"Magoffin County, Kentucky \", \"Marion County, Kentucky \", \"Marshall County, Kentucky \", \"Martin County, Kentucky \", \"Mason County, Kentucky \", \"Meade County, Kentucky \", \"Menifee County, Kentucky \", \"Mercer County, Kentucky \", \"Metcalfe County, Kentucky \", \"Monroe County, Kentucky \", \"Montgomery County, Kentucky \", \"Morgan County, Kentucky \", \"Muhlenberg County, Kentucky \", \"Nelson County, Kentucky \", \"Nicholas County, Kentucky \", \"Ohio County, Kentucky \", \"Oldham County, Kentucky \", \"Owen County, Kentucky \", \"Owsley County, Kentucky \", \"Pendleton County, Kentucky \", \"Perry County, Kentucky \", \"Pike County, Kentucky \", \"Powell County, Kentucky \", \"Pulaski County, Kentucky \", \"Robertson County, Kentucky \", \"Rockcastle County, Kentucky \", \"Rowan County, Kentucky \", \"Russell County, Kentucky \", \"Scott County, Kentucky \", \"Shelby County, Kentucky \", \"Simpson County, Kentucky \", \"Spencer County, Kentucky \", \"Taylor County, Kentucky \", \"Todd County, Kentucky \", \"Trigg County, Kentucky \", \"Trimble County, Kentucky \", \"Union County, Kentucky \", \"Warren County, Kentucky \", \"Washington County, Kentucky \", \"Wayne County, Kentucky \", \"Webster County, Kentucky \", \"Whitley County, Kentucky \", \"Wolfe County, Kentucky \", \"Woodford County, Kentucky \", \"Acadia Parish, Louisiana \", \"Allen Parish, Louisiana \", \"Ascension Parish, Louisiana \", \"Assumption Parish, Louisiana \", \"Avoyelles Parish, Louisiana \", \"Beauregard Parish, Louisiana \", \"Bienville Parish, Louisiana \", \"Bossier Parish, Louisiana \", \"Caddo Parish, Louisiana \", \"Calcasieu Parish, Louisiana \", \"Caldwell Parish, Louisiana \", \"Cameron Parish, Louisiana \", \"Catahoula Parish, Louisiana \", \"Claiborne Parish, Louisiana \", \"Concordia Parish, Louisiana \", \"De Soto Parish, Louisiana \", \"East Baton Rouge Parish, Louisiana \", \"East Carroll Parish, Louisiana \", \"East Feliciana Parish, Louisiana \", \"Evangeline Parish, Louisiana \", \"Franklin Parish, Louisiana \", \"Grant Parish, Louisiana \", \"Iberia Parish, Louisiana \", \"Iberville Parish, Louisiana \", \"Jackson Parish, Louisiana \", \"Jefferson Parish, Louisiana \", \"Jefferson Davis Parish, Louisiana \", \"Lafayette Parish, Louisiana \", \"Lafourche Parish, Louisiana \", \"LaSalle Parish, Louisiana \", \"Lincoln Parish, Louisiana \", \"Livingston Parish, Louisiana \", \"Madison Parish, Louisiana \", \"Morehouse Parish, Louisiana \", \"Natchitoches Parish, Louisiana \", \"Orleans Parish, Louisiana \", \"Ouachita Parish, Louisiana \", \"Plaquemines Parish, Louisiana \", \"Pointe Coupee Parish, Louisiana \", \"Rapides Parish, Louisiana \", \"Red River Parish, Louisiana \", \"Richland Parish, Louisiana \", \"Sabine Parish, Louisiana \", \"St. Bernard Parish, Louisiana \", \"St. Charles Parish, Louisiana \", \"St. Helena Parish, Louisiana \", \"St. James Parish, Louisiana \", \"St. John the Baptist Parish, Louisiana \", \"St. Landry Parish, Louisiana \", \"St. Martin Parish, Louisiana \", \"St. Mary Parish, Louisiana \", \"St. Tammany Parish, Louisiana \", \"Tangipahoa Parish, Louisiana \", \"Tensas Parish, Louisiana \", \"Terrebonne Parish, Louisiana \", \"Union Parish, Louisiana \", \"Vermilion Parish, Louisiana \", \"Vernon Parish, Louisiana \", \"Washington Parish, Louisiana \", \"Webster Parish, Louisiana \", \"West Baton Rouge Parish, Louisiana \", \"West Carroll Parish, Louisiana \", \"West Feliciana Parish, Louisiana \", \"Winn Parish, Louisiana \", \"Androscoggin County, Maine \", \"Aroostook County, Maine \", \"Cumberland County, Maine \", \"Franklin County, Maine \", \"Hancock County, Maine \", \"Kennebec County, Maine \", \"Knox County, Maine \", \"Lincoln County, Maine \", \"Oxford County, Maine \", \"Penobscot County, Maine \", \"Piscataquis County, Maine \", \"Sagadahoc County, Maine \", \"Somerset County, Maine \", \"Waldo County, Maine \", \"Washington County, Maine \", \"York County, Maine \", \"Allegany County, Maryland \", \"Anne Arundel County, Maryland \", \"Baltimore County, Maryland \", \"Calvert County, Maryland \", \"Caroline County, Maryland \", \"Carroll County, Maryland \", \"Cecil County, Maryland \", \"Charles County, Maryland \", \"Dorchester County, Maryland \", \"Frederick County, Maryland \", \"Garrett County, Maryland \", \"Harford County, Maryland \", \"Howard County, Maryland \", \"Kent County, Maryland \", \"Montgomery County, Maryland \", \"Prince George's County, Maryland \", \"Queen Anne's County, Maryland \", \"St. Mary's County, Maryland \", \"Somerset County, Maryland \", \"Talbot County, Maryland \", \"Washington County, Maryland \", \"Wicomico County, Maryland \", \"Worcester County, Maryland \", \"Baltimore, City of, Maryland \", \"Barnstable County, Massachusetts \", \"Berkshire County, Massachusetts \", \"Bristol County, Massachusetts \", \"Dukes County, Massachusetts \", \"Essex County, Massachusetts \", \"Franklin County, Massachusetts \", \"Hampden County, Massachusetts \", \"Hampshire County, Massachusetts \", \"Middlesex County, Massachusetts \", \"Nantucket, Town and County of, Massachusetts \", \"Norfolk County, Massachusetts \", \"Plymouth County, Massachusetts \", \"Suffolk County, Massachusetts \", \"Worcester County, Massachusetts \", \"Alcona County, Michigan \", \"Alger County, Michigan \", \"Allegan County, Michigan \", \"Alpena County, Michigan \", \"Antrim County, Michigan \", \"Arenac County, Michigan \", \"Baraga County, Michigan \", \"Barry County, Michigan \", \"Bay County, Michigan \", \"Benzie County, Michigan \", \"Berrien County, Michigan \", \"Branch County, Michigan \", \"Calhoun County, Michigan \", \"Cass County, Michigan \", \"Charlevoix County, Michigan \", \"Cheboygan County, Michigan \", \"Chippewa County, Michigan \", \"Clare County, Michigan \", \"Clinton County, Michigan \", \"Crawford County, Michigan \", \"Delta County, Michigan \", \"Dickinson County, Michigan \", \"Eaton County, Michigan \", \"Emmet County, Michigan \", \"Genesee County, Michigan \", \"Gladwin County, Michigan \", \"Gogebic County, Michigan \", \"Grand Traverse County, Michigan \", \"Gratiot County, Michigan \", \"Hillsdale County, Michigan \", \"Houghton County, Michigan \", \"Huron County, Michigan \", \"Ingham County, Michigan \", \"Ionia County, Michigan \", \"Iosco County, Michigan \", \"Iron County, Michigan \", \"Isabella County, Michigan \", \"Jackson County, Michigan \", \"Kalamazoo County, Michigan \", \"Kalkaska County, Michigan \", \"Kent County, Michigan \", \"Keweenaw County, Michigan \", \"Lake County, Michigan \", \"Lapeer County, Michigan \", \"Leelanau County, Michigan \", \"Lenawee County, Michigan \", \"Livingston County, Michigan \", \"Luce County, Michigan \", \"Mackinac County, Michigan \", \"Macomb County, Michigan \", \"Manistee County, Michigan \", \"Marquette County, Michigan \", \"Mason County, Michigan \", \"Mecosta County, Michigan \", \"Menominee County, Michigan \", \"Midland County, Michigan \", \"Missaukee County, Michigan \", \"Monroe County, Michigan \", \"Montcalm County, Michigan \", \"Montmorency County, Michigan \", \"Muskegon County, Michigan \", \"Newaygo County, Michigan \", \"Oakland County, Michigan \", \"Oceana County, Michigan \", \"Ogemaw County, Michigan \", \"Ontonagon County, Michigan \", \"Osceola County, Michigan \", \"Oscoda County, Michigan \", \"Otsego County, Michigan \", \"Ottawa County, Michigan \", \"Presque Isle County, Michigan \", \"Roscommon County, Michigan \", \"Saginaw County, Michigan \", \"St. Clair County, Michigan \", \"St. Joseph County, Michigan \", \"Sanilac County, Michigan \", \"Schoolcraft County, Michigan \", \"Shiawassee County, Michigan \", \"Tuscola County, Michigan \", \"Van Buren County, Michigan \", \"Washtenaw County, Michigan \", \"Wayne County, Michigan \", \"Wexford County, Michigan \", \"Aitkin County, Minnesota \", \"Anoka County, Minnesota \", \"Becker County, Minnesota \", \"Beltrami County, Minnesota \", \"Benton County, Minnesota \", \"Big Stone County, Minnesota \", \"Blue Earth County, Minnesota \", \"Brown County, Minnesota \", \"Carlton County, Minnesota \", \"Carver County, Minnesota \", \"Cass County, Minnesota \", \"Chippewa County, Minnesota \", \"Chisago County, Minnesota \", \"Clay County, Minnesota \", \"Clearwater County, Minnesota \", \"Cook County, Minnesota \", \"Cottonwood County, Minnesota \", \"Crow Wing County, Minnesota \", \"Dakota County, Minnesota \", \"Dodge County, Minnesota \", \"Douglas County, Minnesota \", \"Faribault County, Minnesota \", \"Fillmore County, Minnesota \", \"Freeborn County, Minnesota \", \"Goodhue County, Minnesota \", \"Grant County, Minnesota \", \"Hennepin County, Minnesota \", \"Houston County, Minnesota \", \"Hubbard County, Minnesota \", \"Isanti County, Minnesota \", \"Itasca County, Minnesota \", \"Jackson County, Minnesota \", \"Kanabec County, Minnesota \", \"Kandiyohi County, Minnesota \", \"Kittson County, Minnesota \", \"Koochiching County, Minnesota \", \"Lac qui Parle County, Minnesota \", \"Lake County, Minnesota \", \"Lake of the Woods County, Minnesota \", \"Le Sueur County, Minnesota \", \"Lincoln County, Minnesota \", \"Lyon County, Minnesota \", \"McLeod County, Minnesota \", \"Mahnomen County, Minnesota \", \"Marshall County, Minnesota \", \"Martin County, Minnesota \", \"Meeker County, Minnesota \", \"Mille Lacs County, Minnesota \", \"Morrison County, Minnesota \", \"Mower County, Minnesota \", \"Murray County, Minnesota \", \"Nicollet County, Minnesota \", \"Nobles County, Minnesota \", \"Norman County, Minnesota \", \"Olmsted County, Minnesota \", \"Otter Tail County, Minnesota \", \"Pennington County, Minnesota \", \"Pine County, Minnesota \", \"Pipestone County, Minnesota \", \"Polk County, Minnesota \", \"Pope County, Minnesota \", \"Ramsey County, Minnesota \", \"Red Lake County, Minnesota \", \"Redwood County, Minnesota \", \"Renville County, Minnesota \", \"Rice County, Minnesota \", \"Rock County, Minnesota \", \"Roseau County, Minnesota \", \"St. Louis County, Minnesota \", \"Scott County, Minnesota \", \"Sherburne County, Minnesota \", \"Sibley County, Minnesota \", \"Stearns County, Minnesota \", \"Steele County, Minnesota \", \"Stevens County, Minnesota \", \"Swift County, Minnesota \", \"Todd County, Minnesota \", \"Traverse County, Minnesota \", \"Wabasha County, Minnesota \", \"Wadena County, Minnesota \", \"Waseca County, Minnesota \", \"Washington County, Minnesota \", \"Watonwan County, Minnesota \", \"Wilkin County, Minnesota \", \"Winona County, Minnesota \", \"Wright County, Minnesota \", \"Yellow Medicine County, Minnesota \", \"Adams County, Mississippi \", \"Alcorn County, Mississippi \", \"Amite County, Mississippi \", \"Attala County, Mississippi \", \"Benton County, Mississippi \", \"Bolivar County, Mississippi \", \"Calhoun County, Mississippi \", \"Carroll County, Mississippi \", \"Chickasaw County, Mississippi \", \"Choctaw County, Mississippi \", \"Claiborne County, Mississippi \", \"Clarke County, Mississippi \", \"Clay County, Mississippi \", \"Coahoma County, Mississippi \", \"Copiah County, Mississippi \", \"Covington County, Mississippi \", \"DeSoto County, Mississippi \", \"Forrest County, Mississippi \", \"Franklin County, Mississippi \", \"George County, Mississippi \", \"Greene County, Mississippi \", \"Grenada County, Mississippi \", \"Hancock County, Mississippi \", \"Harrison County, Mississippi \", \"Hinds County, Mississippi \", \"Holmes County, Mississippi \", \"Humphreys County, Mississippi \", \"Issaquena County, Mississippi \", \"Itawamba County, Mississippi \", \"Jackson County, Mississippi \", \"Jasper County, Mississippi \", \"Jefferson County, Mississippi \", \"Jefferson Davis County, Mississippi \", \"Jones County, Mississippi \", \"Kemper County, Mississippi \", \"Lafayette County, Mississippi \", \"Lamar County, Mississippi \", \"Lauderdale County, Mississippi \", \"Lawrence County, Mississippi \", \"Leake County, Mississippi \", \"Lee County, Mississippi \", \"Leflore County, Mississippi \", \"Lincoln County, Mississippi \", \"Lowndes County, Mississippi \", \"Madison County, Mississippi \", \"Marion County, Mississippi \", \"Marshall County, Mississippi \", \"Monroe County, Mississippi \", \"Montgomery County, Mississippi \", \"Neshoba County, Mississippi \", \"Newton County, Mississippi \", \"Noxubee County, Mississippi \", \"Oktibbeha County, Mississippi \", \"Panola County, Mississippi \", \"Pearl River County, Mississippi \", \"Perry County, Mississippi \", \"Pike County, Mississippi \", \"Pontotoc County, Mississippi \", \"Prentiss County, Mississippi \", \"Quitman County, Mississippi \", \"Rankin County, Mississippi \", \"Scott County, Mississippi \", \"Sharkey County, Mississippi \", \"Simpson County, Mississippi \", \"Smith County, Mississippi \", \"Stone County, Mississippi \", \"Sunflower County, Mississippi \", \"Tallahatchie County, Mississippi \", \"Tate County, Mississippi \", \"Tippah County, Mississippi \", \"Tishomingo County, Mississippi \", \"Tunica County, Mississippi \", \"Union County, Mississippi \", \"Walthall County, Mississippi \", \"Warren County, Mississippi \", \"Washington County, Mississippi \", \"Wayne County, Mississippi \", \"Webster County, Mississippi \", \"Wilkinson County, Mississippi \", \"Winston County, Mississippi \", \"Yalobusha County, Mississippi \", \"Yazoo County, Mississippi \", \"Adair County, Missouri \", \"Andrew County, Missouri \", \"Atchison County, Missouri \", \"Audrain County, Missouri \", \"Barry County, Missouri \", \"Barton County, Missouri \", \"Bates County, Missouri \", \"Benton County, Missouri \", \"Bollinger County, Missouri \", \"Boone County, Missouri \", \"Buchanan County, Missouri \", \"Butler County, Missouri \", \"Caldwell County, Missouri \", \"Callaway County, Missouri \", \"Camden County, Missouri \", \"Cape Girardeau County, Missouri \", \"Carroll County, Missouri \", \"Carter County, Missouri \", \"Cass County, Missouri \", \"Cedar County, Missouri \", \"Chariton County, Missouri \", \"Christian County, Missouri \", \"Clark County, Missouri \", \"Clay County, Missouri \", \"Clinton County, Missouri \", \"Cole County, Missouri \", \"Cooper County, Missouri \", \"Crawford County, Missouri \", \"Dade County, Missouri \", \"Dallas County, Missouri \", \"Daviess County, Missouri \", \"DeKalb County, Missouri \", \"Dent County, Missouri \", \"Douglas County, Missouri \", \"Dunklin County, Missouri \", \"Franklin County, Missouri \", \"Gasconade County, Missouri \", \"Gentry County, Missouri \", \"Greene County, Missouri \", \"Grundy County, Missouri \", \"Harrison County, Missouri \", \"Henry County, Missouri \", \"Hickory County, Missouri \", \"Holt County, Missouri \", \"Howard County, Missouri \", \"Howell County, Missouri \", \"Iron County, Missouri \", \"Jackson County, Missouri \", \"Jasper County, Missouri \", \"Jefferson County, Missouri \", \"Johnson County, Missouri \", \"Knox County, Missouri \", \"Laclede County, Missouri \", \"Lafayette County, Missouri \", \"Lawrence County, Missouri \", \"Lewis County, Missouri \", \"Lincoln County, Missouri \", \"Linn County, Missouri \", \"Livingston County, Missouri \", \"McDonald County, Missouri \", \"Macon County, Missouri \", \"Madison County, Missouri \", \"Maries County, Missouri \", \"Marion County, Missouri \", \"Mercer County, Missouri \", \"Miller County, Missouri \", \"Mississippi County, Missouri \", \"Moniteau County, Missouri \", \"Monroe County, Missouri \", \"Montgomery County, Missouri \", \"Morgan County, Missouri \", \"New Madrid County, Missouri \", \"Newton County, Missouri \", \"Nodaway County, Missouri \", \"Oregon County, Missouri \", \"Osage County, Missouri \", \"Ozark County, Missouri \", \"Pemiscot County, Missouri \", \"Perry County, Missouri \", \"Pettis County, Missouri \", \"Phelps County, Missouri \", \"Pike County, Missouri \", \"Platte County, Missouri \", \"Polk County, Missouri \", \"Pulaski County, Missouri \", \"Putnam County, Missouri \", \"Ralls County, Missouri \", \"Randolph County, Missouri \", \"Ray County, Missouri \", \"Reynolds County, Missouri \", \"Ripley County, Missouri \", \"St. Charles County, Missouri \", \"St. Clair County, Missouri \", \"Ste. Genevieve County, Missouri \", \"St. Francois County, Missouri \", \"St. Louis County, Missouri \", \"Saline County, Missouri \", \"Schuyler County, Missouri \", \"Scotland County, Missouri \", \"Scott County, Missouri \", \"Shannon County, Missouri \", \"Shelby County, Missouri \", \"Stoddard County, Missouri \", \"Stone County, Missouri \", \"Sullivan County, Missouri \", \"Taney County, Missouri \", \"Texas County, Missouri \", \"Vernon County, Missouri \", \"Warren County, Missouri \", \"Washington County, Missouri \", \"Wayne County, Missouri \", \"Webster County, Missouri \", \"Worth County, Missouri \", \"Wright County, Missouri \", \"St. Louis, City of, Missouri \", \"Beaverhead County, Montana \", \"Big Horn County, Montana \", \"Blaine County, Montana \", \"Broadwater County, Montana \", \"Carbon County, Montana \", \"Carter County, Montana \", \"Cascade County, Montana \", \"Chouteau County, Montana \", \"Custer County, Montana \", \"Daniels County, Montana \", \"Dawson County, Montana \", \"Deer Lodge County, Montana \", \"Fallon County, Montana \", \"Fergus County, Montana \", \"Flathead County, Montana \", \"Gallatin County, Montana \", \"Garfield County, Montana \", \"Glacier County, Montana \", \"Golden Valley County, Montana \", \"Granite County, Montana \", \"Hill County, Montana \", \"Jefferson County, Montana \", \"Judith Basin County, Montana \", \"Lake County, Montana \", \"Lewis and Clark County, Montana \", \"Liberty County, Montana \", \"Lincoln County, Montana \", \"McCone County, Montana \", \"Madison County, Montana \", \"Meagher County, Montana \", \"Mineral County, Montana \", \"Missoula County, Montana \", \"Musselshell County, Montana \", \"Park County, Montana \", \"Petroleum County, Montana \", \"Phillips County, Montana \", \"Pondera County, Montana \", \"Powder River County, Montana \", \"Powell County, Montana \", \"Prairie County, Montana \", \"Ravalli County, Montana \", \"Richland County, Montana \", \"Roosevelt County, Montana \", \"Rosebud County, Montana \", \"Sanders County, Montana \", \"Sheridan County, Montana \", \"Silver Bow County, Montana \", \"Stillwater County, Montana \", \"Sweet Grass County, Montana \", \"Teton County, Montana \", \"Toole County, Montana \", \"Treasure County, Montana \", \"Valley County, Montana \", \"Wheatland County, Montana \", \"Wibaux County, Montana \", \"Yellowstone County, Montana \", \"Adams County, Nebraska \", \"Antelope County, Nebraska \", \"Arthur County, Nebraska \", \"Banner County, Nebraska \", \"Blaine County, Nebraska \", \"Boone County, Nebraska \", \"Box Butte County, Nebraska \", \"Boyd County, Nebraska \", \"Brown County, Nebraska \", \"Buffalo County, Nebraska \", \"Burt County, Nebraska \", \"Butler County, Nebraska \", \"Cass County, Nebraska \", \"Cedar County, Nebraska \", \"Chase County, Nebraska \", \"Cherry County, Nebraska \", \"Cheyenne County, Nebraska \", \"Clay County, Nebraska \", \"Colfax County, Nebraska \", \"Cuming County, Nebraska \", \"Custer County, Nebraska \", \"Dakota County, Nebraska \", \"Dawes County, Nebraska \", \"Dawson County, Nebraska \", \"Deuel County, Nebraska \", \"Dixon County, Nebraska \", \"Dodge County, Nebraska \", \"Douglas County, Nebraska \", \"Dundy County, Nebraska \", \"Fillmore County, Nebraska \", \"Franklin County, Nebraska \", \"Frontier County, Nebraska \", \"Furnas County, Nebraska \", \"Gage County, Nebraska \", \"Garden County, Nebraska \", \"Garfield County, Nebraska \", \"Gosper County, Nebraska \", \"Grant County, Nebraska \", \"Greeley County, Nebraska \", \"Hall County, Nebraska \", \"Hamilton County, Nebraska \", \"Harlan County, Nebraska \", \"Hayes County, Nebraska \", \"Hitchcock County, Nebraska \", \"Holt County, Nebraska \", \"Hooker County, Nebraska \", \"Howard County, Nebraska \", \"Jefferson County, Nebraska \", \"Johnson County, Nebraska \", \"Kearney County, Nebraska \", \"Keith County, Nebraska \", \"Keya Paha County, Nebraska \", \"Kimball County, Nebraska \", \"Knox County, Nebraska \", \"Lancaster County, Nebraska \", \"Lincoln County, Nebraska \", \"Logan County, Nebraska \", \"Loup County, Nebraska \", \"McPherson County, Nebraska \", \"Madison County, Nebraska \", \"Merrick County, Nebraska \", \"Morrill County, Nebraska \", \"Nance County, Nebraska \", \"Nemaha County, Nebraska \", \"Nuckolls County, Nebraska \", \"Otoe County, Nebraska \", \"Pawnee County, Nebraska \", \"Perkins County, Nebraska \", \"Phelps County, Nebraska \", \"Pierce County, Nebraska \", \"Platte County, Nebraska \", \"Polk County, Nebraska \", \"Red Willow County, Nebraska \", \"Richardson County, Nebraska \", \"Rock County, Nebraska \", \"Saline County, Nebraska \", \"Sarpy County, Nebraska \", \"Saunders County, Nebraska \", \"Scotts Bluff County, Nebraska \", \"Seward County, Nebraska \", \"Sheridan County, Nebraska \", \"Sherman County, Nebraska \", \"Sioux County, Nebraska \", \"Stanton County, Nebraska \", \"Thayer County, Nebraska \", \"Thomas County, Nebraska \", \"Thurston County, Nebraska \", \"Valley County, Nebraska \", \"Washington County, Nebraska \", \"Wayne County, Nebraska \", \"Webster County, Nebraska \", \"Wheeler County, Nebraska \", \"York County, Nebraska \", \"Churchill County, Nevada \", \"Clark County, Nevada \", \"Douglas County, Nevada \", \"Elko County, Nevada \", \"Esmeralda County, Nevada \", \"Eureka County, Nevada \", \"Humboldt County, Nevada \", \"Lander County, Nevada \", \"Lincoln County, Nevada \", \"Lyon County, Nevada \", \"Mineral County, Nevada \", \"Nye County, Nevada \", \"Pershing County, Nevada \", \"Storey County, Nevada \", \"Washoe County, Nevada \", \"White Pine County, Nevada \", \"Carson City, Consolidated Municipality of, Nevada \", \"Belknap County, New Hampshire \", \"Carroll County, New Hampshire \", \"Cheshire County, New Hampshire \", \"Coos County, New Hampshire \", \"Grafton County, New Hampshire \", \"Hillsborough County, New Hampshire \", \"Merrimack County, New Hampshire \", \"Rockingham County, New Hampshire \", \"Strafford County, New Hampshire \", \"Sullivan County, New Hampshire \", \"Atlantic County, New Jersey \", \"Bergen County, New Jersey \", \"Burlington County, New Jersey \", \"Camden County, New Jersey \", \"Cape May County, New Jersey \", \"Cumberland County, New Jersey \", \"Essex County, New Jersey \", \"Gloucester County, New Jersey \", \"Hudson County, New Jersey \", \"Hunterdon County, New Jersey \", \"Mercer County, New Jersey \", \"Middlesex County, New Jersey \", \"Monmouth County, New Jersey \", \"Morris County, New Jersey \", \"Ocean County, New Jersey \", \"Passaic County, New Jersey \", \"Salem County, New Jersey \", \"Somerset County, New Jersey \", \"Sussex County, New Jersey \", \"Union County, New Jersey \", \"Warren County, New Jersey \", \"Bernalillo County, New Mexico \", \"Catron County, New Mexico \", \"Chaves County, New Mexico \", \"Cibola County, New Mexico \", \"Colfax County, New Mexico \", \"Curry County, New Mexico \", \"De Baca County, New Mexico \", \"Doña Ana County, New Mexico \", \"Eddy County, New Mexico \", \"Grant County, New Mexico \", \"Guadalupe County, New Mexico \", \"Harding County, New Mexico \", \"Hidalgo County, New Mexico \", \"Lea County, New Mexico \", \"Lincoln County, New Mexico \", \"Los Alamos County, New Mexico \", \"Luna County, New Mexico \", \"McKinley County, New Mexico \", \"Mora County, New Mexico \", \"Otero County, New Mexico \", \"Quay County, New Mexico \", \"Rio Arriba County, New Mexico \", \"Roosevelt County, New Mexico \", \"Sandoval County, New Mexico \", \"San Juan County, New Mexico \", \"San Miguel County, New Mexico \", \"Santa Fe County, New Mexico \", \"Sierra County, New Mexico \", \"Socorro County, New Mexico \", \"Taos County, New Mexico \", \"Torrance County, New Mexico \", \"Union County, New Mexico \", \"Valencia County, New Mexico \", \"Albany County, New York \", \"Allegany County, New York \", \"Bronx County, New York \", \"Broome County, New York \", \"Cattaraugus County, New York \", \"Cayuga County, New York \", \"Chautauqua County, New York \", \"Chemung County, New York \", \"Chenango County, New York \", \"Clinton County, New York \", \"Columbia County, New York \", \"Cortland County, New York \", \"Delaware County, New York \", \"Dutchess County, New York \", \"Erie County, New York \", \"Essex County, New York \", \"Franklin County, New York \", \"Fulton County, New York \", \"Genesee County, New York \", \"Greene County, New York \", \"Hamilton County, New York \", \"Herkimer County, New York \", \"Jefferson County, New York \", \"Kings County, New York \", \"Lewis County, New York \", \"Livingston County, New York \", \"Madison County, New York \", \"Monroe County, New York \", \"Montgomery County, New York \", \"Nassau County, New York \", \"New York County, New York \", \"Niagara County, New York \", \"Oneida County, New York \", \"Onondaga County, New York \", \"Ontario County, New York \", \"Orange County, New York \", \"Orleans County, New York \", \"Oswego County, New York \", \"Otsego County, New York \", \"Putnam County, New York \", \"Queens County, New York \", \"Rensselaer County, New York \", \"Richmond County, New York \", \"Rockland County, New York \", \"St. Lawrence County, New York \", \"Saratoga County, New York \", \"Schenectady County, New York \", \"Schoharie County, New York \", \"Schuyler County, New York \", \"Seneca County, New York \", \"Steuben County, New York \", \"Suffolk County, New York \", \"Sullivan County, New York \", \"Tioga County, New York \", \"Tompkins County, New York \", \"Ulster County, New York \", \"Warren County, New York \", \"Washington County, New York \", \"Wayne County, New York \", \"Westchester County, New York \", \"Wyoming County, New York \", \"Yates County, New York \", \"Alamance County, North Carolina \", \"Alexander County, North Carolina \", \"Alleghany County, North Carolina \", \"Anson County, North Carolina \", \"Ashe County, North Carolina \", \"Avery County, North Carolina \", \"Beaufort County, North Carolina \", \"Bertie County, North Carolina \", \"Bladen County, North Carolina \", \"Brunswick County, North Carolina \", \"Buncombe County, North Carolina \", \"Burke County, North Carolina \", \"Cabarrus County, North Carolina \", \"Caldwell County, North Carolina \", \"Camden County, North Carolina \", \"Carteret County, North Carolina \", \"Caswell County, North Carolina \", \"Catawba County, North Carolina \", \"Chatham County, North Carolina \", \"Cherokee County, North Carolina \", \"Chowan County, North Carolina \", \"Clay County, North Carolina \", \"Cleveland County, North Carolina \", \"Columbus County, North Carolina \", \"Craven County, North Carolina \", \"Cumberland County, North Carolina \", \"Currituck County, North Carolina \", \"Dare County, North Carolina \", \"Davidson County, North Carolina \", \"Davie County, North Carolina \", \"Duplin County, North Carolina \", \"Durham County, North Carolina \", \"Edgecombe County, North Carolina \", \"Forsyth County, North Carolina \", \"Franklin County, North Carolina \", \"Gaston County, North Carolina \", \"Gates County, North Carolina \", \"Graham County, North Carolina \", \"Granville County, North Carolina \", \"Greene County, North Carolina \", \"Guilford County, North Carolina \", \"Halifax County, North Carolina \", \"Harnett County, North Carolina \", \"Haywood County, North Carolina \", \"Henderson County, North Carolina \", \"Hertford County, North Carolina \", \"Hoke County, North Carolina \", \"Hyde County, North Carolina \", \"Iredell County, North Carolina \", \"Jackson County, North Carolina \", \"Johnston County, North Carolina \", \"Jones County, North Carolina \", \"Lee County, North Carolina \", \"Lenoir County, North Carolina \", \"Lincoln County, North Carolina \", \"McDowell County, North Carolina \", \"Macon County, North Carolina \", \"Madison County, North Carolina \", \"Martin County, North Carolina \", \"Mecklenburg County, North Carolina \", \"Mitchell County, North Carolina \", \"Montgomery County, North Carolina \", \"Moore County, North Carolina \", \"Nash County, North Carolina \", \"New Hanover County, North Carolina \", \"Northampton County, North Carolina \", \"Onslow County, North Carolina \", \"Orange County, North Carolina \", \"Pamlico County, North Carolina \", \"Pasquotank County, North Carolina \", \"Pender County, North Carolina \", \"Perquimans County, North Carolina \", \"Person County, North Carolina \", \"Pitt County, North Carolina \", \"Polk County, North Carolina \", \"Randolph County, North Carolina \", \"Richmond County, North Carolina \", \"Robeson County, North Carolina \", \"Rockingham County, North Carolina \", \"Rowan County, North Carolina \", \"Rutherford County, North Carolina \", \"Sampson County, North Carolina \", \"Scotland County, North Carolina \", \"Stanly County, North Carolina \", \"Stokes County, North Carolina \", \"Surry County, North Carolina \", \"Swain County, North Carolina \", \"Transylvania County, North Carolina \", \"Tyrrell County, North Carolina \", \"Union County, North Carolina \", \"Vance County, North Carolina \", \"Wake County, North Carolina \", \"Warren County, North Carolina \", \"Washington County, North Carolina \", \"Watauga County, North Carolina \", \"Wayne County, North Carolina \", \"Wilkes County, North Carolina \", \"Wilson County, North Carolina \", \"Yadkin County, North Carolina \", \"Yancey County, North Carolina \", \"Adams County, North Dakota \", \"Barnes County, North Dakota \", \"Benson County, North Dakota \", \"Billings County, North Dakota \", \"Bottineau County, North Dakota \", \"Bowman County, North Dakota \", \"Burke County, North Dakota \", \"Burleigh County, North Dakota \", \"Cass County, North Dakota \", \"Cavalier County, North Dakota \", \"Dickey County, North Dakota \", \"Divide County, North Dakota \", \"Dunn County, North Dakota \", \"Eddy County, North Dakota \", \"Emmons County, North Dakota \", \"Foster County, North Dakota \", \"Golden Valley County, North Dakota \", \"Grand Forks County, North Dakota \", \"Grant County, North Dakota \", \"Griggs County, North Dakota \", \"Hettinger County, North Dakota \", \"Kidder County, North Dakota \", \"LaMoure County, North Dakota \", \"Logan County, North Dakota \", \"McHenry County, North Dakota \", \"McIntosh County, North Dakota \", \"McKenzie County, North Dakota \", \"McLean County, North Dakota \", \"Mercer County, North Dakota \", \"Morton County, North Dakota \", \"Mountrail County, North Dakota \", \"Nelson County, North Dakota \", \"Oliver County, North Dakota \", \"Pembina County, North Dakota \", \"Pierce County, North Dakota \", \"Ramsey County, North Dakota \", \"Ransom County, North Dakota \", \"Renville County, North Dakota \", \"Richland County, North Dakota \", \"Rolette County, North Dakota \", \"Sargent County, North Dakota \", \"Sheridan County, North Dakota \", \"Sioux County, North Dakota \", \"Slope County, North Dakota \", \"Stark County, North Dakota \", \"Steele County, North Dakota \", \"Stutsman County, North Dakota \", \"Towner County, North Dakota \", \"Traill County, North Dakota \", \"Walsh County, North Dakota \", \"Ward County, North Dakota \", \"Wells County, North Dakota \", \"Williams County, North Dakota \", \"Adams County, Ohio \", \"Allen County, Ohio \", \"Ashland County, Ohio \", \"Ashtabula County, Ohio \", \"Athens County, Ohio \", \"Auglaize County, Ohio \", \"Belmont County, Ohio \", \"Brown County, Ohio \", \"Butler County, Ohio \", \"Carroll County, Ohio \", \"Champaign County, Ohio \", \"Clark County, Ohio \", \"Clermont County, Ohio \", \"Clinton County, Ohio \", \"Columbiana County, Ohio \", \"Coshocton County, Ohio \", \"Crawford County, Ohio \", \"Cuyahoga County, Ohio \", \"Darke County, Ohio \", \"Defiance County, Ohio \", \"Delaware County, Ohio \", \"Erie County, Ohio \", \"Fairfield County, Ohio \", \"Fayette County, Ohio \", \"Franklin County, Ohio \", \"Fulton County, Ohio \", \"Gallia County, Ohio \", \"Geauga County, Ohio \", \"Greene County, Ohio \", \"Guernsey County, Ohio \", \"Hamilton County, Ohio \", \"Hancock County, Ohio \", \"Hardin County, Ohio \", \"Harrison County, Ohio \", \"Henry County, Ohio \", \"Highland County, Ohio \", \"Hocking County, Ohio \", \"Holmes County, Ohio \", \"Huron County, Ohio \", \"Jackson County, Ohio \", \"Jefferson County, Ohio \", \"Knox County, Ohio \", \"Lake County, Ohio \", \"Lawrence County, Ohio \", \"Licking County, Ohio \", \"Logan County, Ohio \", \"Lorain County, Ohio \", \"Lucas County, Ohio \", \"Madison County, Ohio \", \"Mahoning County, Ohio \", \"Marion County, Ohio \", \"Medina County, Ohio \", \"Meigs County, Ohio \", \"Mercer County, Ohio \", \"Miami County, Ohio \", \"Monroe County, Ohio \", \"Montgomery County, Ohio \", \"Morgan County, Ohio \", \"Morrow County, Ohio \", \"Muskingum County, Ohio \", \"Noble County, Ohio \", \"Ottawa County, Ohio \", \"Paulding County, Ohio \", \"Perry County, Ohio \", \"Pickaway County, Ohio \", \"Pike County, Ohio \", \"Portage County, Ohio \", \"Preble County, Ohio \", \"Putnam County, Ohio \", \"Richland County, Ohio \", \"Ross County, Ohio \", \"Sandusky County, Ohio \", \"Scioto County, Ohio \", \"Seneca County, Ohio \", \"Shelby County, Ohio \", \"Stark County, Ohio \", \"Summit County, Ohio \", \"Trumbull County, Ohio \", \"Tuscarawas County, Ohio \", \"Union County, Ohio \", \"Van Wert County, Ohio \", \"Vinton County, Ohio \", \"Warren County, Ohio \", \"Washington County, Ohio \", \"Wayne County, Ohio \", \"Williams County, Ohio \", \"Wood County, Ohio \", \"Wyandot County, Ohio \", \"Adair County, Oklahoma \", \"Alfalfa County, Oklahoma \", \"Atoka County, Oklahoma \", \"Beaver County, Oklahoma \", \"Beckham County, Oklahoma \", \"Blaine County, Oklahoma \", \"Bryan County, Oklahoma \", \"Caddo County, Oklahoma \", \"Canadian County, Oklahoma \", \"Carter County, Oklahoma \", \"Cherokee County, Oklahoma \", \"Choctaw County, Oklahoma \", \"Cimarron County, Oklahoma \", \"Cleveland County, Oklahoma \", \"Coal County, Oklahoma \", \"Comanche County, Oklahoma \", \"Cotton County, Oklahoma \", \"Craig County, Oklahoma \", \"Creek County, Oklahoma \", \"Custer County, Oklahoma \", \"Delaware County, Oklahoma \", \"Dewey County, Oklahoma \", \"Ellis County, Oklahoma \", \"Garfield County, Oklahoma \", \"Garvin County, Oklahoma \", \"Grady County, Oklahoma \", \"Grant County, Oklahoma \", \"Greer County, Oklahoma \", \"Harmon County, Oklahoma \", \"Harper County, Oklahoma \", \"Haskell County, Oklahoma \", \"Hughes County, Oklahoma \", \"Jackson County, Oklahoma \", \"Jefferson County, Oklahoma \", \"Johnston County, Oklahoma \", \"Kay County, Oklahoma \", \"Kingfisher County, Oklahoma \", \"Kiowa County, Oklahoma \", \"Latimer County, Oklahoma \", \"Le Flore County, Oklahoma \", \"Lincoln County, Oklahoma \", \"Logan County, Oklahoma \", \"Love County, Oklahoma \", \"McClain County, Oklahoma \", \"McCurtain County, Oklahoma \", \"McIntosh County, Oklahoma \", \"Major County, Oklahoma \", \"Marshall County, Oklahoma \", \"Mayes County, Oklahoma \", \"Murray County, Oklahoma \", \"Muskogee County, Oklahoma \", \"Noble County, Oklahoma \", \"Nowata County, Oklahoma \", \"Okfuskee County, Oklahoma \", \"Oklahoma County, Oklahoma \", \"Okmulgee County, Oklahoma \", \"Osage County, Oklahoma \", \"Ottawa County, Oklahoma \", \"Pawnee County, Oklahoma \", \"Payne County, Oklahoma \", \"Pittsburg County, Oklahoma \", \"Pontotoc County, Oklahoma \", \"Pottawatomie County, Oklahoma \", \"Pushmataha County, Oklahoma \", \"Roger Mills County, Oklahoma \", \"Rogers County, Oklahoma \", \"Seminole County, Oklahoma \", \"Sequoyah County, Oklahoma \", \"Stephens County, Oklahoma \", \"Texas County, Oklahoma \", \"Tillman County, Oklahoma \", \"Tulsa County, Oklahoma \", \"Wagoner County, Oklahoma \", \"Washington County, Oklahoma \", \"Washita County, Oklahoma \", \"Woods County, Oklahoma \", \"Woodward County, Oklahoma \", \"Baker County, Oregon \", \"Benton County, Oregon \", \"Clackamas County, Oregon \", \"Clatsop County, Oregon \", \"Columbia County, Oregon \", \"Coos County, Oregon \", \"Crook County, Oregon \", \"Curry County, Oregon \", \"Deschutes County, Oregon \", \"Douglas County, Oregon \", \"Gilliam County, Oregon \", \"Grant County, Oregon \", \"Harney County, Oregon \", \"Hood River County, Oregon \", \"Jackson County, Oregon \", \"Jefferson County, Oregon \", \"Josephine County, Oregon \", \"Klamath County, Oregon \", \"Lake County, Oregon \", \"Lane County, Oregon \", \"Lincoln County, Oregon \", \"Linn County, Oregon \", \"Malheur County, Oregon \", \"Marion County, Oregon \", \"Morrow County, Oregon \", \"Multnomah County, Oregon \", \"Polk County, Oregon \", \"Sherman County, Oregon \", \"Tillamook County, Oregon \", \"Umatilla County, Oregon \", \"Union County, Oregon \", \"Wallowa County, Oregon \", \"Wasco County, Oregon \", \"Washington County, Oregon \", \"Wheeler County, Oregon \", \"Yamhill County, Oregon \", \"Adams County, Pennsylvania \", \"Allegheny County, Pennsylvania \", \"Armstrong County, Pennsylvania \", \"Beaver County, Pennsylvania \", \"Bedford County, Pennsylvania \", \"Berks County, Pennsylvania \", \"Blair County, Pennsylvania \", \"Bradford County, Pennsylvania \", \"Bucks County, Pennsylvania \", \"Butler County, Pennsylvania \", \"Cambria County, Pennsylvania \", \"Cameron County, Pennsylvania \", \"Carbon County, Pennsylvania \", \"Centre County, Pennsylvania \", \"Chester County, Pennsylvania \", \"Clarion County, Pennsylvania \", \"Clearfield County, Pennsylvania \", \"Clinton County, Pennsylvania \", \"Columbia County, Pennsylvania \", \"Crawford County, Pennsylvania \", \"Cumberland County, Pennsylvania \", \"Dauphin County, Pennsylvania \", \"Delaware County, Pennsylvania \", \"Elk County, Pennsylvania \", \"Erie County, Pennsylvania \", \"Fayette County, Pennsylvania \", \"Forest County, Pennsylvania \", \"Franklin County, Pennsylvania \", \"Fulton County, Pennsylvania \", \"Greene County, Pennsylvania \", \"Huntingdon County, Pennsylvania \", \"Indiana County, Pennsylvania \", \"Jefferson County, Pennsylvania \", \"Juniata County, Pennsylvania \", \"Lackawanna County, Pennsylvania \", \"Lancaster County, Pennsylvania \", \"Lawrence County, Pennsylvania \", \"Lebanon County, Pennsylvania \", \"Lehigh County, Pennsylvania \", \"Luzerne County, Pennsylvania \", \"Lycoming County, Pennsylvania \", \"McKean County, Pennsylvania \", \"Mercer County, Pennsylvania \", \"Mifflin County, Pennsylvania \", \"Monroe County, Pennsylvania \", \"Montgomery County, Pennsylvania \", \"Montour County, Pennsylvania \", \"Northampton County, Pennsylvania \", \"Northumberland County, Pennsylvania \", \"Perry County, Pennsylvania \", \"Philadelphia County, Pennsylvania \", \"Pike County, Pennsylvania \", \"Potter County, Pennsylvania \", \"Schuylkill County, Pennsylvania \", \"Snyder County, Pennsylvania \", \"Somerset County, Pennsylvania \", \"Sullivan County, Pennsylvania \", \"Susquehanna County, Pennsylvania \", \"Tioga County, Pennsylvania \", \"Union County, Pennsylvania \", \"Venango County, Pennsylvania \", \"Warren County, Pennsylvania \", \"Washington County, Pennsylvania \", \"Wayne County, Pennsylvania \", \"Westmoreland County, Pennsylvania \", \"Wyoming County, Pennsylvania \", \"York County, Pennsylvania \", \"Bristol County, Rhode Island \", \"Kent County, Rhode Island \", \"Newport County, Rhode Island \", \"Providence County, Rhode Island \", \"Washington County, Rhode Island \", \"Abbeville County, South Carolina \", \"Aiken County, South Carolina \", \"Allendale County, South Carolina \", \"Anderson County, South Carolina \", \"Bamberg County, South Carolina \", \"Barnwell County, South Carolina \", \"Beaufort County, South Carolina \", \"Berkeley County, South Carolina \", \"Calhoun County, South Carolina \", \"Charleston County, South Carolina \", \"Cherokee County, South Carolina \", \"Chester County, South Carolina \", \"Chesterfield County, South Carolina \", \"Clarendon County, South Carolina \", \"Colleton County, South Carolina \", \"Darlington County, South Carolina \", \"Dillon County, South Carolina \", \"Dorchester County, South Carolina \", \"Edgefield County, South Carolina \", \"Fairfield County, South Carolina \", \"Florence County, South Carolina \", \"Georgetown County, South Carolina \", \"Greenville County, South Carolina \", \"Greenwood County, South Carolina \", \"Hampton County, South Carolina \", \"Horry County, South Carolina \", \"Jasper County, South Carolina \", \"Kershaw County, South Carolina \", \"Lancaster County, South Carolina \", \"Laurens County, South Carolina \", \"Lee County, South Carolina \", \"Lexington County, South Carolina \", \"McCormick County, South Carolina \", \"Marion County, South Carolina \", \"Marlboro County, South Carolina \", \"Newberry County, South Carolina \", \"Oconee County, South Carolina \", \"Orangeburg County, South Carolina \", \"Pickens County, South Carolina \", \"Richland County, South Carolina \", \"Saluda County, South Carolina \", \"Spartanburg County, South Carolina \", \"Sumter County, South Carolina \", \"Union County, South Carolina \", \"Williamsburg County, South Carolina \", \"York County, South Carolina \", \"Aurora County, South Dakota \", \"Beadle County, South Dakota \", \"Bennett County, South Dakota \", \"Bon Homme County, South Dakota \", \"Brookings County, South Dakota \", \"Brown County, South Dakota \", \"Brule County, South Dakota \", \"Buffalo County, South Dakota \", \"Butte County, South Dakota \", \"Campbell County, South Dakota \", \"Charles Mix County, South Dakota \", \"Clark County, South Dakota \", \"Clay County, South Dakota \", \"Codington County, South Dakota \", \"Corson County, South Dakota \", \"Custer County, South Dakota \", \"Davison County, South Dakota \", \"Day County, South Dakota \", \"Deuel County, South Dakota \", \"Dewey County, South Dakota \", \"Douglas County, South Dakota \", \"Edmunds County, South Dakota \", \"Fall River County, South Dakota \", \"Faulk County, South Dakota \", \"Grant County, South Dakota \", \"Gregory County, South Dakota \", \"Haakon County, South Dakota \", \"Hamlin County, South Dakota \", \"Hand County, South Dakota \", \"Hanson County, South Dakota \", \"Harding County, South Dakota \", \"Hughes County, South Dakota \", \"Hutchinson County, South Dakota \", \"Hyde County, South Dakota \", \"Jackson County, South Dakota \", \"Jerauld County, South Dakota \", \"Jones County, South Dakota \", \"Kingsbury County, South Dakota \", \"Lake County, South Dakota \", \"Lawrence County, South Dakota \", \"Lincoln County, South Dakota \", \"Lyman County, South Dakota \", \"McCook County, South Dakota \", \"McPherson County, South Dakota \", \"Marshall County, South Dakota \", \"Meade County, South Dakota \", \"Mellette County, South Dakota \", \"Miner County, South Dakota \", \"Minnehaha County, South Dakota \", \"Moody County, South Dakota \", \"Pennington County, South Dakota \", \"Perkins County, South Dakota \", \"Potter County, South Dakota \", \"Roberts County, South Dakota \", \"Sanborn County, South Dakota \", \"Shannon County, South Dakota \", \"Spink County, South Dakota \", \"Stanley County, South Dakota \", \"Sully County, South Dakota \", \"Todd County, South Dakota \", \"Tripp County, South Dakota \", \"Turner County, South Dakota \", \"Union County, South Dakota \", \"Walworth County, South Dakota \", \"Yankton County, South Dakota \", \"Ziebach County, South Dakota \", \"Anderson County, Tennessee \", \"Bedford County, Tennessee \", \"Benton County, Tennessee \", \"Bledsoe County, Tennessee \", \"Blount County, Tennessee \", \"Bradley County, Tennessee \", \"Campbell County, Tennessee \", \"Cannon County, Tennessee \", \"Carroll County, Tennessee \", \"Carter County, Tennessee \", \"Cheatham County, Tennessee \", \"Chester County, Tennessee \", \"Claiborne County, Tennessee \", \"Clay County, Tennessee \", \"Cocke County, Tennessee \", \"Coffee County, Tennessee \", \"Crockett County, Tennessee \", \"Cumberland County, Tennessee \", \"Davidson County, Tennessee \", \"Decatur County, Tennessee \", \"DeKalb County, Tennessee \", \"Dickson County, Tennessee \", \"Dyer County, Tennessee \", \"Fayette County, Tennessee \", \"Fentress County, Tennessee \", \"Franklin County, Tennessee \", \"Gibson County, Tennessee \", \"Giles County, Tennessee \", \"Grainger County, Tennessee \", \"Greene County, Tennessee \", \"Grundy County, Tennessee \", \"Hamblen County, Tennessee \", \"Hamilton County, Tennessee \", \"Hancock County, Tennessee \", \"Hardeman County, Tennessee \", \"Hardin County, Tennessee \", \"Hawkins County, Tennessee \", \"Haywood County, Tennessee \", \"Henderson County, Tennessee \", \"Henry County, Tennessee \", \"Hickman County, Tennessee \", \"Houston County, Tennessee \", \"Humphreys County, Tennessee \", \"Jackson County, Tennessee \", \"Jefferson County, Tennessee \", \"Johnson County, Tennessee \", \"Knox County, Tennessee \", \"Lake County, Tennessee \", \"Lauderdale County, Tennessee \", \"Lawrence County, Tennessee \", \"Lewis County, Tennessee \", \"Lincoln County, Tennessee \", \"Loudon County, Tennessee \", \"McMinn County, Tennessee \", \"McNairy County, Tennessee \", \"Macon County, Tennessee \", \"Madison County, Tennessee \", \"Marion County, Tennessee \", \"Marshall County, Tennessee \", \"Maury County, Tennessee \", \"Meigs County, Tennessee \", \"Monroe County, Tennessee \", \"Montgomery County, Tennessee \", \"Moore County, Tennessee \", \"Morgan County, Tennessee \", \"Obion County, Tennessee \", \"Overton County, Tennessee \", \"Perry County, Tennessee \", \"Pickett County, Tennessee \", \"Polk County, Tennessee \", \"Putnam County, Tennessee \", \"Rhea County, Tennessee \", \"Roane County, Tennessee \", \"Robertson County, Tennessee \", \"Rutherford County, Tennessee \", \"Scott County, Tennessee \", \"Sequatchie County, Tennessee \", \"Sevier County, Tennessee \", \"Shelby County, Tennessee \", \"Smith County, Tennessee \", \"Stewart County, Tennessee \", \"Sullivan County, Tennessee \", \"Sumner County, Tennessee \", \"Tipton County, Tennessee \", \"Trousdale County, Tennessee \", \"Unicoi County, Tennessee \", \"Union County, Tennessee \", \"Van Buren County, Tennessee \", \"Warren County, Tennessee \", \"Washington County, Tennessee \", \"Wayne County, Tennessee \", \"Weakley County, Tennessee \", \"White County, Tennessee \", \"Williamson County, Tennessee \", \"Wilson County, Tennessee \", \"Anderson County, Texas \", \"Andrews County, Texas \", \"Angelina County, Texas \", \"Aransas County, Texas \", \"Archer County, Texas \", \"Armstrong County, Texas \", \"Atascosa County, Texas \", \"Austin County, Texas \", \"Bailey County, Texas \", \"Bandera County, Texas \", \"Bastrop County, Texas \", \"Baylor County, Texas \", \"Bee County, Texas \", \"Bell County, Texas \", \"Bexar County, Texas \", \"Blanco County, Texas \", \"Borden County, Texas \", \"Bosque County, Texas \", \"Bowie County, Texas \", \"Brazoria County, Texas \", \"Brazos County, Texas \", \"Brewster County, Texas \", \"Briscoe County, Texas \", \"Brooks County, Texas \", \"Brown County, Texas \", \"Burleson County, Texas \", \"Burnet County, Texas \", \"Caldwell County, Texas \", \"Calhoun County, Texas \", \"Callahan County, Texas \", \"Cameron County, Texas \", \"Camp County, Texas \", \"Carson County, Texas \", \"Cass County, Texas \", \"Castro County, Texas \", \"Chambers County, Texas \", \"Cherokee County, Texas \", \"Childress County, Texas \", \"Clay County, Texas \", \"Cochran County, Texas \", \"Coke County, Texas \", \"Coleman County, Texas \", \"Collin County, Texas \", \"Collingsworth County, Texas \", \"Colorado County, Texas \", \"Comal County, Texas \", \"Comanche County, Texas \", \"Concho County, Texas \", \"Cooke County, Texas \", \"Coryell County, Texas \", \"Cottle County, Texas \", \"Crane County, Texas \", \"Crockett County, Texas \", \"Crosby County, Texas \", \"Culberson County, Texas \", \"Dallam County, Texas \", \"Dallas County, Texas \", \"Dawson County, Texas \", \"Deaf Smith County, Texas \", \"Delta County, Texas \", \"Denton County, Texas \", \"DeWitt County, Texas \", \"Dickens County, Texas \", \"Dimmit County, Texas \", \"Donley County, Texas \", \"Duval County, Texas \", \"Eastland County, Texas \", \"Ector County, Texas \", \"Edwards County, Texas \", \"Ellis County, Texas \", \"El Paso County, Texas \", \"Erath County, Texas \", \"Falls County, Texas \", \"Fannin County, Texas \", \"Fayette County, Texas \", \"Fisher County, Texas \", \"Floyd County, Texas \", \"Foard County, Texas \", \"Fort Bend County, Texas \", \"Franklin County, Texas \", \"Freestone County, Texas \", \"Frio County, Texas \", \"Gaines County, Texas \", \"Galveston County, Texas \", \"Garza County, Texas \", \"Gillespie County, Texas \", \"Glasscock County, Texas \", \"Goliad County, Texas \", \"Gonzales County, Texas \", \"Gray County, Texas \", \"Grayson County, Texas \", \"Gregg County, Texas \", \"Grimes County, Texas \", \"Guadalupe County, Texas \", \"Hale County, Texas \", \"Hall County, Texas \", \"Hamilton County, Texas \", \"Hansford County, Texas \", \"Hardeman County, Texas \", \"Hardin County, Texas \", \"Harris County, Texas \", \"Harrison County, Texas \", \"Hartley County, Texas \", \"Haskell County, Texas \", \"Hays County, Texas \", \"Hemphill County, Texas \", \"Henderson County, Texas \", \"Hidalgo County, Texas \", \"Hill County, Texas \", \"Hockley County, Texas \", \"Hood County, Texas \", \"Hopkins County, Texas \", \"Houston County, Texas \", \"Howard County, Texas \", \"Hudspeth County, Texas \", \"Hunt County, Texas \", \"Hutchinson County, Texas \", \"Irion County, Texas \", \"Jack County, Texas \", \"Jackson County, Texas \", \"Jasper County, Texas \", \"Jeff Davis County, Texas \", \"Jefferson County, Texas \", \"Jim Hogg County, Texas \", \"Jim Wells County, Texas \", \"Johnson County, Texas \", \"Jones County, Texas \", \"Karnes County, Texas \", \"Kaufman County, Texas \", \"Kendall County, Texas \", \"Kenedy County, Texas \", \"Kent County, Texas \", \"Kerr County, Texas \", \"Kimble County, Texas \", \"King County, Texas \", \"Kinney County, Texas \", \"Kleberg County, Texas \", \"Knox County, Texas \", \"Lamar County, Texas \", \"Lamb County, Texas \", \"Lampasas County, Texas \", \"La Salle County, Texas \", \"Lavaca County, Texas \", \"Lee County, Texas \", \"Leon County, Texas \", \"Liberty County, Texas \", \"Limestone County, Texas \", \"Lipscomb County, Texas \", \"Live Oak County, Texas \", \"Llano County, Texas \", \"Loving County, Texas \", \"Lubbock County, Texas \", \"Lynn County, Texas \", \"McCulloch County, Texas \", \"McLennan County, Texas \", \"McMullen County, Texas \", \"Madison County, Texas \", \"Marion County, Texas \", \"Martin County, Texas \", \"Mason County, Texas \", \"Matagorda County, Texas \", \"Maverick County, Texas \", \"Medina County, Texas \", \"Menard County, Texas \", \"Midland County, Texas \", \"Milam County, Texas \", \"Mills County, Texas \", \"Mitchell County, Texas \", \"Montague County, Texas \", \"Montgomery County, Texas \", \"Moore County, Texas \", \"Morris County, Texas \", \"Motley County, Texas \", \"Nacogdoches County, Texas \", \"Navarro County, Texas \", \"Newton County, Texas \", \"Nolan County, Texas \", \"Nueces County, Texas \", \"Ochiltree County, Texas \", \"Oldham County, Texas \", \"Orange County, Texas \", \"Palo Pinto County, Texas \", \"Panola County, Texas \", \"Parker County, Texas \", \"Parmer County, Texas \", \"Pecos County, Texas \", \"Polk County, Texas \", \"Potter County, Texas \", \"Presidio County, Texas \", \"Rains County, Texas \", \"Randall County, Texas \", \"Reagan County, Texas \", \"Real County, Texas \", \"Red River County, Texas \", \"Reeves County, Texas \", \"Refugio County, Texas \", \"Roberts County, Texas \", \"Robertson County, Texas \", \"Rockwall County, Texas \", \"Runnels County, Texas \", \"Rusk County, Texas \", \"Sabine County, Texas \", \"San Augustine County, Texas \", \"San Jacinto County, Texas \", \"San Patricio County, Texas \", \"San Saba County, Texas \", \"Schleicher County, Texas \", \"Scurry County, Texas \", \"Shackelford County, Texas \", \"Shelby County, Texas \", \"Sherman County, Texas \", \"Smith County, Texas \", \"Somervell County, Texas \", \"Starr County, Texas \", \"Stephens County, Texas \", \"Sterling County, Texas \", \"Stonewall County, Texas \", \"Sutton County, Texas \", \"Swisher County, Texas \", \"Tarrant County, Texas \", \"Taylor County, Texas \", \"Terrell County, Texas \", \"Terry County, Texas \", \"Throckmorton County, Texas \", \"Titus County, Texas \", \"Tom Green County, Texas \", \"Travis County, Texas \", \"Trinity County, Texas \", \"Tyler County, Texas \", \"Upshur County, Texas \", \"Upton County, Texas \", \"Uvalde County, Texas \", \"Val Verde County, Texas \", \"Van Zandt County, Texas \", \"Victoria County, Texas \", \"Walker County, Texas \", \"Waller County, Texas \", \"Ward County, Texas \", \"Washington County, Texas \", \"Webb County, Texas \", \"Wharton County, Texas \", \"Wheeler County, Texas \", \"Wichita County, Texas \", \"Wilbarger County, Texas \", \"Willacy County, Texas \", \"Williamson County, Texas \", \"Wilson County, Texas \", \"Winkler County, Texas \", \"Wise County, Texas \", \"Wood County, Texas \", \"Yoakum County, Texas \", \"Young County, Texas \", \"Zapata County, Texas \", \"Zavala County, Texas \", \"Beaver County, Utah \", \"Box Elder County, Utah \", \"Cache County, Utah \", \"Carbon County, Utah \", \"Daggett County, Utah \", \"Davis County, Utah \", \"Duchesne County, Utah \", \"Emery County, Utah \", \"Garfield County, Utah \", \"Grand County, Utah \", \"Iron County, Utah \", \"Juab County, Utah \", \"Kane County, Utah \", \"Millard County, Utah \", \"Morgan County, Utah \", \"Piute County, Utah \", \"Rich County, Utah \", \"Salt Lake County, Utah \", \"San Juan County, Utah \", \"Sanpete County, Utah \", \"Sevier County, Utah \", \"Summit County, Utah \", \"Tooele County, Utah \", \"Uintah County, Utah \", \"Utah County, Utah \", \"Wasatch County, Utah \", \"Washington County, Utah \", \"Wayne County, Utah \", \"Weber County, Utah \", \"Addison County, Vermont \", \"Bennington County, Vermont \", \"Caledonia County, Vermont \", \"Chittenden County, Vermont \", \"Essex County, Vermont \", \"Franklin County, Vermont \", \"Grand Isle County, Vermont \", \"Lamoille County, Vermont \", \"Orange County, Vermont \", \"Orleans County, Vermont \", \"Rutland County, Vermont \", \"Washington County, Vermont \", \"Windham County, Vermont \", \"Windsor County, Vermont \", \"Accomack County, Virginia \", \"Albemarle County, Virginia \", \"Alleghany County, Virginia \", \"Amelia County, Virginia \", \"Amherst County, Virginia \", \"Appomattox County, Virginia \", \"Arlington County, Virginia \", \"Augusta County, Virginia \", \"Bath County, Virginia \", \"Bedford County, Virginia \", \"Bland County, Virginia \", \"Botetourt County, Virginia \", \"Brunswick County, Virginia \", \"Buchanan County, Virginia \", \"Buckingham County, Virginia \", \"Campbell County, Virginia \", \"Caroline County, Virginia \", \"Carroll County, Virginia \", \"Charles City County, Virginia \", \"Charlotte County, Virginia \", \"Chesterfield County, Virginia \", \"Clarke County, Virginia \", \"Craig County, Virginia \", \"Culpeper County, Virginia \", \"Cumberland County, Virginia \", \"Dickenson County, Virginia \", \"Dinwiddie County, Virginia \", \"Essex County, Virginia \", \"Fairfax County, Virginia \", \"Fauquier County, Virginia \", \"Floyd County, Virginia \", \"Fluvanna County, Virginia \", \"Franklin County, Virginia \", \"Frederick County, Virginia \", \"Giles County, Virginia \", \"Gloucester County, Virginia \", \"Goochland County, Virginia \", \"Grayson County, Virginia \", \"Greene County, Virginia \", \"Greensville County, Virginia \", \"Halifax County, Virginia \", \"Hanover County, Virginia \", \"Henrico County, Virginia \", \"Henry County, Virginia \", \"Highland County, Virginia \", \"Isle of Wight County, Virginia \", \"James City County, Virginia \", \"King and Queen County, Virginia \", \"King George County, Virginia \", \"King William County, Virginia \", \"Lancaster County, Virginia \", \"Lee County, Virginia \", \"Loudoun County, Virginia \", \"Louisa County, Virginia \", \"Lunenburg County, Virginia \", \"Madison County, Virginia \", \"Mathews County, Virginia \", \"Mecklenburg County, Virginia \", \"Middlesex County, Virginia \", \"Montgomery County, Virginia \", \"Nelson County, Virginia \", \"New Kent County, Virginia \", \"Northampton County, Virginia \", \"Northumberland County, Virginia \", \"Nottoway County, Virginia \", \"Orange County, Virginia \", \"Page County, Virginia \", \"Patrick County, Virginia \", \"Pittsylvania County, Virginia \", \"Powhatan County, Virginia \", \"Prince Edward County, Virginia \", \"Prince George County, Virginia \", \"Prince William County, Virginia \", \"Pulaski County, Virginia \", \"Rappahannock County, Virginia \", \"Richmond County, Virginia \", \"Roanoke County, Virginia \", \"Rockbridge County, Virginia \", \"Rockingham County, Virginia \", \"Russell County, Virginia \", \"Scott County, Virginia \", \"Shenandoah County, Virginia \", \"Smyth County, Virginia \", \"Southampton County, Virginia \", \"Spotsylvania County, Virginia \", \"Stafford County, Virginia \", \"Surry County, Virginia \", \"Sussex County, Virginia \", \"Tazewell County, Virginia \", \"Warren County, Virginia \", \"Washington County, Virginia \", \"Westmoreland County, Virginia \", \"Wise County, Virginia \", \"Wythe County, Virginia \", \"York County, Virginia \", \"Alexandria, City of, Virginia \", \"Bedford, City of, Virginia \", \"Bristol, City of, Virginia \", \"Buena Vista, City of, Virginia \", \"Charlottesville, City of, Virginia \", \"Chesapeake, City of, Virginia \", \"Colonial Heights, City of, Virginia \", \"Covington, City of, Virginia \", \"Danville, City of, Virginia \", \"Emporia, City of, Virginia \", \"Fairfax, City of, Virginia \", \"Falls Church, City of, Virginia \", \"Franklin, City of, Virginia \", \"Fredericksburg, City of, Virginia \", \"Galax, City of, Virginia \", \"Hampton, City of, Virginia \", \"Harrisonburg, City of, Virginia \", \"Hopewell, City of, Virginia \", \"Lexington, City of, Virginia \", \"Lynchburg, City of, Virginia \", \"Manassas, City of, Virginia \", \"Manassas Park, City of, Virginia \", \"Martinsville, City of, Virginia \", \"Newport News, City of, Virginia \", \"Norfolk, City of, Virginia \", \"Norton, City of, Virginia \", \"Petersburg, City of, Virginia \", \"Poquoson, City of, Virginia \", \"Portsmouth, City of, Virginia \", \"Radford, City of, Virginia \", \"Richmond, City of, Virginia \", \"Roanoke, City of, Virginia \", \"Salem, City of, Virginia \", \"Staunton, City of, Virginia \", \"Suffolk, City of, Virginia \", \"Virginia Beach, City of, Virginia \", \"Waynesboro, City of, Virginia \", \"Williamsburg, City of, Virginia \", \"Winchester, City of, Virginia \", \"Adams County, Washington \", \"Asotin County, Washington \", \"Benton County, Washington \", \"Chelan County, Washington \", \"Clallam County, Washington \", \"Clark County, Washington \", \"Columbia County, Washington \", \"Cowlitz County, Washington \", \"Douglas County, Washington \", \"Ferry County, Washington \", \"Franklin County, Washington \", \"Garfield County, Washington \", \"Grant County, Washington \", \"Grays Harbor County, Washington \", \"Island County, Washington \", \"Jefferson County, Washington \", \"King County, Washington \", \"Kitsap County, Washington \", \"Kittitas County, Washington \", \"Klickitat County, Washington \", \"Lewis County, Washington \", \"Lincoln County, Washington \", \"Mason County, Washington \", \"Okanogan County, Washington \", \"Pacific County, Washington \", \"Pend Oreille County, Washington \", \"Pierce County, Washington \", \"San Juan County, Washington \", \"Skagit County, Washington \", \"Skamania County, Washington \", \"Snohomish County, Washington \", \"Spokane County, Washington \", \"Stevens County, Washington \", \"Thurston County, Washington \", \"Wahkiakum County, Washington \", \"Walla Walla County, Washington \", \"Whatcom County, Washington \", \"Whitman County, Washington \", \"Yakima County, Washington \", \"Barbour County, West Virginia \", \"Berkeley County, West Virginia \", \"Boone County, West Virginia \", \"Braxton County, West Virginia \", \"Brooke County, West Virginia \", \"Cabell County, West Virginia \", \"Calhoun County, West Virginia \", \"Clay County, West Virginia \", \"Doddridge County, West Virginia \", \"Fayette County, West Virginia \", \"Gilmer County, West Virginia \", \"Grant County, West Virginia \", \"Greenbrier County, West Virginia \", \"Hampshire County, West Virginia \", \"Hancock County, West Virginia \", \"Hardy County, West Virginia \", \"Harrison County, West Virginia \", \"Jackson County, West Virginia \", \"Jefferson County, West Virginia \", \"Kanawha County, West Virginia \", \"Lewis County, West Virginia \", \"Lincoln County, West Virginia \", \"Logan County, West Virginia \", \"McDowell County, West Virginia \", \"Marion County, West Virginia \", \"Marshall County, West Virginia \", \"Mason County, West Virginia \", \"Mercer County, West Virginia \", \"Mineral County, West Virginia \", \"Mingo County, West Virginia \", \"Monongalia County, West Virginia \", \"Monroe County, West Virginia \", \"Morgan County, West Virginia \", \"Nicholas County, West Virginia \", \"Ohio County, West Virginia \", \"Pendleton County, West Virginia \", \"Pleasants County, West Virginia \", \"Pocahontas County, West Virginia \", \"Preston County, West Virginia \", \"Putnam County, West Virginia \", \"Raleigh County, West Virginia \", \"Randolph County, West Virginia \", \"Ritchie County, West Virginia \", \"Roane County, West Virginia \", \"Summers County, West Virginia \", \"Taylor County, West Virginia \", \"Tucker County, West Virginia \", \"Tyler County, West Virginia \", \"Upshur County, West Virginia \", \"Wayne County, West Virginia \", \"Webster County, West Virginia \", \"Wetzel County, West Virginia \", \"Wirt County, West Virginia \", \"Wood County, West Virginia \", \"Wyoming County, West Virginia \", \"Adams County, Wisconsin \", \"Ashland County, Wisconsin \", \"Barron County, Wisconsin \", \"Bayfield County, Wisconsin \", \"Brown County, Wisconsin \", \"Buffalo County, Wisconsin \", \"Burnett County, Wisconsin \", \"Calumet County, Wisconsin \", \"Chippewa County, Wisconsin \", \"Clark County, Wisconsin \", \"Columbia County, Wisconsin \", \"Crawford County, Wisconsin \", \"Dane County, Wisconsin \", \"Dodge County, Wisconsin \", \"Door County, Wisconsin \", \"Douglas County, Wisconsin \", \"Dunn County, Wisconsin \", \"Eau Claire County, Wisconsin \", \"Florence County, Wisconsin \", \"Fond du Lac County, Wisconsin \", \"Forest County, Wisconsin \", \"Grant County, Wisconsin \", \"Green County, Wisconsin \", \"Green Lake County, Wisconsin \", \"Iowa County, Wisconsin \", \"Iron County, Wisconsin \", \"Jackson County, Wisconsin \", \"Jefferson County, Wisconsin \", \"Juneau County, Wisconsin \", \"Kenosha County, Wisconsin \", \"Kewaunee County, Wisconsin \", \"La Crosse County, Wisconsin \", \"Lafayette County, Wisconsin \", \"Langlade County, Wisconsin \", \"Lincoln County, Wisconsin \", \"Manitowoc County, Wisconsin \", \"Marathon County, Wisconsin \", \"Marinette County, Wisconsin \", \"Marquette County, Wisconsin \", \"Menominee County, Wisconsin \", \"Milwaukee County, Wisconsin \", \"Monroe County, Wisconsin \", \"Oconto County, Wisconsin \", \"Oneida County, Wisconsin \", \"Outagamie County, Wisconsin \", \"Ozaukee County, Wisconsin \", \"Pepin County, Wisconsin \", \"Pierce County, Wisconsin \", \"Polk County, Wisconsin \", \"Portage County, Wisconsin \", \"Price County, Wisconsin \", \"Racine County, Wisconsin \", \"Richland County, Wisconsin \", \"Rock County, Wisconsin \", \"Rusk County, Wisconsin \", \"St. Croix County, Wisconsin \", \"Sauk County, Wisconsin \", \"Sawyer County, Wisconsin \", \"Shawano County, Wisconsin \", \"Sheboygan County, Wisconsin \", \"Taylor County, Wisconsin \", \"Trempealeau County, Wisconsin \", \"Vernon County, Wisconsin \", \"Vilas County, Wisconsin \", \"Walworth County, Wisconsin \", \"Washburn County, Wisconsin \", \"Washington County, Wisconsin \", \"Waukesha County, Wisconsin \", \"Waupaca County, Wisconsin \", \"Waushara County, Wisconsin \", \"Winnebago County, Wisconsin \", \"Wood County, Wisconsin \", \"Albany County, Wyoming \", \"Big Horn County, Wyoming \", \"Campbell County, Wyoming \", \"Carbon County, Wyoming \", \"Converse County, Wyoming \", \"Crook County, Wyoming \", \"Fremont County, Wyoming \", \"Goshen County, Wyoming \", \"Hot Springs County, Wyoming \", \"Johnson County, Wyoming \", \"Laramie County, Wyoming \", \"Lincoln County, Wyoming \", \"Natrona County, Wyoming \", \"Niobrara County, Wyoming \", \"Park County, Wyoming \", \"Platte County, Wyoming \", \"Sheridan County, Wyoming \", \"Sublette County, Wyoming \", \"Sweetwater County, Wyoming \", \"Teton County, Wyoming \", \"Uinta County, Wyoming \", \"Washakie County, Wyoming \", \"Weston County, Wyoming \"\n ];\n\n if (typeof $.prototype.autocomplete == 'function') {\n $('#county').autocomplete({\n source: availableTags,\n multiselect: true\n });\n $('#locationofInterest').autocomplete({\n source: availableTags,\n multiselect: true\n });\n }\n });\n\n //Preference Center Form JS //\n $('#Preference-F .mktoForm>.mktoFormRow:nth-of-type(1) .mktoFormRow, #Progressive-F .mktoForm>.mktoFormRow:nth-of-type(1) .mktoFormRow').addClass(function(i) {\n return 'row' + (i + 1);\n });\n $('#Preference-F .mktoForm>.mktoFormRow:nth-of-type(2) .mktoFormRow, #Progressive-F .mktoForm>.mktoFormRow:nth-of-type(2) .mktoFormRow').addClass(function(i) {\n return 'row' + (i + 1);\n });\n\n $(\"#N-Preference-Center fieldset\").addClass(function(i) {\n return 'Form_Fieldset_' + (i + 1);\n });\n $(\".Form_Fieldset_1 , .Form_Fieldset_2\").wrapAll('<div class=\"wrapper-for\">');\n //On Focus for input//\n $('input').each(function() {\n $(this).prev().prev('.mktoLabel').addClass('fl-enabled');\n });\n\n $('#Lblcounty').each(function() {\n $(this).addClass('fl-enabled');\n });\n $('#LbllocationofInterest').each(function() {\n $(this).addClass('fl-enabled');\n });\n\n $('input').each(function() {\n\n $(this).focus(function() {\n $(this).prev().prev('.mktoLabel').addClass('fl-active');\n\n });\n\n $(this).blur(function() {\n if (!$(this).val()) {\n $(this).prev().prev().removeClass('fl-active');\n }\n\n });\n\n });\n\n // Pre filled value script\n $('input').each(function() {\n\n if ($(this).val()) {\n $(this).prev().prev('.mktoLabel').addClass('fl-active');\n\n }\n\n });\n $('textarea').each(function() {\n\n if ($(this).val()) {\n $(this).prev().prev('.mktoLabel').addClass('fl-active');\n\n }\n });\n\n\n $('select').each(function() {\n if ($(this).val()) {\n $(this).prev().prev('.mktoLabel').addClass('fl-active1');\n\n }\n });\n\n $('input#county').each(function() {\n if ($(this).val()) {\n $(this).parent().prev().prev().prev('.mktoLabel').addClass('fl-active');\n\n }\n });\n $('input#locationofInterest').each(function() {\n if ($(this).val()) {\n $(this).parent().prev().prev().prev('.mktoLabel').addClass('fl-active');\n\n }\n });\n\n // Pre filled value script End\n\n $('input#county').focus(function() {\n $('#Lblcounty').addClass('fl-active');\n\n });\n $('input#locationofInterest').focus(function() {\n $('#LbllocationofInterest').addClass('fl-active');\n\n });\n\n $('input#county').blur(function() {\n if ($('.ui-autocomplete-multiselect-item').length > 0) {\n $('#Lblcounty').addClass('fl-active');\n } else if ($('#county').val().length > 0) {\n $('#Lblcounty').addClass('fl-active');\n } else {\n $('#Lblcounty').removeClass('fl-active');\n }\n });\n\n $('input#locationofInterest').blur(function() {\n if ($('.ui-autocomplete-multiselect-item').length > 0) {\n $('#LbllocationofInterest').addClass('fl-active');\n } else if ($('#locationofInterest').val().length > 0) {\n $('#LbllocationofInterest').addClass('fl-active');\n } else {\n $('#LbllocationofInterest').removeClass('fl-active');\n }\n });\n\n $('textarea').each(function() {\n $(this).prev().prev('.mktoLabel').addClass('fl-enabled');\n });\n $('textarea').each(function() {\n\n $(this).focus(function() {\n $(this).prev().prev('.mktoLabel').addClass('fl-active');\n\n\n });\n $(this).blur(function() {\n if (!$(this).val()) {\n $(this).prev().prev().removeClass('fl-active');\n }\n\n });\n\n });\n //On Focus for select//\n $('select').each(function() {\n $(this).prev().prev('.mktoLabel').addClass('fl-enabled');\n });\n\n $('select').each(function() {\n\n $(this).focus(function() {\n $(this).prev().prev('.mktoLabel').addClass('fl-active1');\n\n });\n $(this).blur(function() {\n if (!$(this).val()) {\n $(this).prev().prev().removeClass('fl-active1');\n }\n\n });\n\n });\n\n if ($(window).width() <= 991) {\n $(\".row14\").insertBefore(\".mktoButtonRow\");\n }\n\n $(window).resize(function() {\n var $theWindowSize = $(this).width();\n if ($theWindowSize <= 991) {\n $(\".row14\").insertBefore(\".mktoButtonRow\");\n }\n });\n\n var email = $('#Email').val() || \"\";\n var FirstName = $('#FirstName').val() || \"\";\n var LastName = $('#LastName').val() || \"\";\n var US_WB_county = $('#US_WB_county').val() || \"\";\n var State = $('#State').val() || \"\";\n var PostalCode = $('#PostalCode').val() || \"\";\n\n if ($('#locationofInterest').length && $('#locationofInterest').val().length > 1) {\n $('#LbllocationofInterest').click();\n $('#LbllocationofInterest').focus();\n $(\"#locationofInterest\").focus();\n }\n\n if ($('#county').length && $('#county').val().length > 1) {\n $('#Lblcounty').click();\n $('#Lblcounty').focus();\n $(\"#county\").focus();\n }\n if (email.length > 1) {\n $('#LblEmail').click();\n $('#LblEmail').focus();\n $(\"#Email\").focus();\n }\n\n if (FirstName.length > 1) {\n $('#LblFirstName').click();\n $('#LblFirstName').focus();\n $(\"#FirstName\").focus();\n }\n if (LastName.length > 1) {\n $('#LblLastName').click();\n $('#LblLastName').focus();\n $(\"#LastName\").focus();\n }\n\n if (US_WB_county.length > 1) {\n $('#LblUS_WB_county').click();\n $('#LblUS_WB_county').focus();\n $(\"#US_WB_county\").focus();\n }\n\n if (US_WB_county.length > 1) {\n $('#LblState').click();\n $('#LblState').focus();\n $(\"#State\").focus();\n }\n if (US_WB_county.length > 1) {\n $('#LblPostalCode').click();\n $('#LblPostalCode').focus();\n $(\"#PostalCode\").focus();\n }\n //#endregion Form UI setup\n\n if(typeof readyCallback === \"function\") readyCallback();\n });\n //#endregion Marketo form ready code \n};\n\nfor (var i = 0, l = docsToCheck.length; i<l; i++ ){\n if ( location.href.match(docsToCheck[i].pageRegex) ){\n /* Add CSS to prevent flicker */\n var style = document.createElement('style');\n style.type = \"text/css\";\n style.id = \"_marketo_form_hider\"\n style.innerText = docsToCheck[i].cssSelector + \"{display:none}\";\n document.head.appendChild(style);\n\n /* Store i index */\n var _index = i;\n \n jQuery(document).ready(function(){\n //remove form and add Marketo placeholder\n jQuery(docsToCheck[i].cssSelector).html('<form id=\"mktoForm_' + docsToCheck[i].formNumber + '\"></form>');\n \n function getScriptWithLoadHandler(src, callback) {\n var head = document.getElementsByTagName('head')[0];\n var scripts = document.getElementsByTagName(\"script\"), i, s = scripts[0];\n var newScript = document.createElement(\"script\");\n newScript.type = \"text/javascript\";\n newScript.async = true;\n newScript.src = src;\n newScript.onerror = function() {\n if (this.addEventListener)\n this.readyState = \"loaded\"\n };\n newScript.onload = newScript.onreadystatechange = function() {\n if (!this.readyState || this.readyState === \"complete\" || this.readyState === \"loaded\") {\n this.onload = this.onreadystatechange = null;\n if (this.addEventListener)\n this.readyState = \"loaded\";\n try {\n callback.call(this)\n } catch (e) {}\n }\n };\n head.appendChild(newScript);\n };\n getScriptWithLoadHandler(\"//pages.mko.cropscience.bayer.com/js/forms2/js/forms2.min.js\", function(){\n if ( typeof window.MktoForms2 === \"object\" ){\n MktoForms2.loadForm(\"//pages.mko.cropscience.bayer.com\", docsToCheck[i].marketoScriptId || \"076-ZYW-786\", docsToCheck[i].formNumber);\n applyMarketoStyling(function() {\n /* When form ready, remove hiding CSS */\n jQuery(\"#_marketo_form_hider\").remove();\n\n /* Check if we need to pull the email from the page */\n if (docsToCheck[_index].pullEmail) {\n var email = jQuery('a[href^=\"mailto:\"]').attr(\"href\");\n email = email ? email.replace(\"mailto:\", \"\") : email;\n if (email) {\n /* Update hidden field with email address */\n jQuery(\"input[value='Contact Seedsman']\").val(email);\n }\n\n /* Check if we need to update a link address */\n if (docsToCheck[_index].hrefToUpdate) {\n jQuery(docsToCheck[_index].hrefToUpdate).attr(\"href\", \"#mktoForm_\" + docsToCheck[_index].formNumber);\n }\n }\n });\n }\n });\n });\n break;\n }\n}\n\nvar pagesToOverrideFuncs = [\n /\\.channel\\.com\\/en-us\\/products\\/harvest-results\\/plot-details\\.html\\/soybeans\\/2020\\/1imofnergk45iakhwonwqcpewh2\\.html/i,\n /\\.channel\\.com\\/en-us\\/tools\\/population-optimizer\\.html/i,\n /\\.dekalbasgrowdeltapine\\.com\\/en-us\\/local-yield-results\\/plot-details.html\\/soybeans\\/2019\\/1ucxokvkmwtm2fanfhhr2twrgeq\\.html/i,\n /\\.dekalbasgrowdeltapine\\.com\\/en-us\\/dekalb\\/tools\\/optimize-my-seed\\.html/i\n];\n\nfor ( var k = 0, l = pagesToOverrideFuncs.length; k < l; k++ ){\n if ( location.href.match(pagesToOverrideFuncs[k]) ){\n /* Editing Mailto Links */\n jQuery(document).ready(function(){\n /* Override function called by existing onclick */\n Bayer.Web.FormActions.postDetailEmail = function(url, brand, email, eventType, pdfLink, emailSubject, ctxElementName){\n var body = encodeURIComponent(window.location.href);\n window.location = 'mailto:' + email + (emailSubject ? '?subject=' + encodeURI(emailSubject) + '&body=' + encodeURI(pdfLink) : '?body=' + encodeURI(pdfLink));\n };\n \n Bayer.Web.FormActions.postOptimizerEmail = function (url, brand, email, eventType, data) {\n var emailSubject = \"You have been sent planting population recommendations from \" + (~location.hostname.toLowerCase().indexOf(\".channel.com\") ? \"Channel®\" : \"DEKALB®, Asgrow® and Deltapine®\");\n \n /* Make sure we pull the right email */\n email = jQuery(\"#popOpTheirEmail\").val() || email;\n\n /* Check if email should have CC */\n var cc = \"\";\n if ( jQuery('#popOpSendSelf:checkbox:checked').length > 0 && jQuery(\"#popOpYourEmail\").val() ) {\n cc = jQuery(\"#popOpYourEmail\").val();\n }\n \n if (typeof data === \"object\" && data && data.message && data.pdfLink){\n var mailLink = 'mailto:' + email + '?subject=' + encodeURI(emailSubject) + ( cc ? \"&cc=\" + cc : \"\" ) + '&body=' + encodeURI(data.message) + \"%0A%0A\" + encodeURI(data.pdfLink);;\n \n window.location = mailLink;\n }\n };\n });\n break;\n }\n}", "language": "javascript" } } ] }, { "id": "RLd82363a1eb9846a0a49ac3db3ffe63f2", "name": "Pixel-DAD:Section:Agronomy:VideoStart:DCM - DEKALB", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "DAD:Section:Agronomy:VideoStart:DCM-DEKALB" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionAgronomy%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC4e3f9139df7c44268398efa10e0f1e35-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL997ea11101584940a7b77682ef777a3d", "name": "CropProtectionProdFinder - Profile/Label | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "cropprotectionprodfinder" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.linkTrackVars = s.apl(s.linkTrackVars, "events"); switch(event.detail.userAction){ case "View Profile": s.events = s.apl(s.events,"event151"); s.linkTrackEvents = s.apl(s.linkTrackEvents, "event151"); break; case "View Label": s.events = s.apl(s.events,"event152"); s.linkTrackEvents = s.apl(s.linkTrackEvents, "event152"); break; } } }, "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "%event.detail.userAction%", "linkType": "o" } } ] }, { "id": "RLc8017725182a424b8568ea8a08899228", "name": "content: download tracking", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "track download link" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC9902b24c40464713b7f98e96e5fba57b-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RLc93bbccde5da46d6ab09915bd165f9d6", "name": "Pixel-DAD:Section:Agronomy:HelpfulQuestion:Google Ads - Asgrow", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "Pixel-DAD:Section:Agronomy:HelpfulQuestion:GoogleAds-Asgrow" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSiteDADinProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionAgronomy%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCa25912b1dc1648ba8a1f95c93b70f636-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL959172ae27844e5b83916a5155571ccd", "name": "Click | Seed Finder | viewProfile | AA", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "anchorDelay": 300, "elementSelector": ".product-card__footer a, a.product-name-cells", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "contains", "caseInsensitive": true }, "leftOperand": "%content: toolName%", "rightOperand": "seed finder" } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { // everything set in the UI now, so no custom code required. s.linkTrackVars = s.apl(s.linkTrackVars,"events,prop21,eVar39"); s.linkTrackEvents = s.apl(s.linkTrackEvents,"event45"); s.events = s.apl(s.events,"event45"); s.prop21 = digitalData.page.pageInfo.toolLayout; s.eVar39 = digitalData.event[0].eventInfo.toolName; /* //hard-coding it as DL is unavailable if(s.server=="www.channel.com"){ s.eVar39="channel seed finder"; } else if(s.server=="www.dekalbasgrowdeltapine.com"){ s.eVar39="dekalbasgrowdeltapine seed finder"; } */ } }, "trackerProperties": { } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkType": "o" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RLe532ae9d3f8e4750b20bbabde5f14d09", "name": "zPixel - FacebookAds,GoogleAds | AllPages (dekalb) | DomReady", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "dekalb.com.mx" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC76fa295fd5994b478312013d367dfa25-source.js', "language": "javascript", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCe195e3607c224634804b6134528fb0c5-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL034fe44da6f74ba48ea62f5637e4e87a", "name": "QuestionWidget - ArticleClickThru | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "articleClickThru" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/maxFrequency.js", "settings": { "unit": "pageView", "count": 1 } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" }, { "name": "eVar54", "type": "value", "value": "%event.detail.articleTitle%" } ], "props": [ { "name": "prop14", "type": "value", "value": "%event.detail.articleTitle%" } ], "events": [ { "name": "event58" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Question Widget - Article Clickthru", "linkType": "o" } } ] }, { "id": "RL9c2b3e807236425187ee189c20fda26f", "name": "content: feedback tracking", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "track feedback" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC77af14a4d4c645d0aa97d03e13abe3bb-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL55aea1dbc9dc496c85fa00faf882fe6c", "name": "Pixel-DAD:HarvestViewPlot:GoogleAds", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isHarvestViewPlotPages%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC5787819b51444266b2b0ddb112050a67-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL111e76056c774b9cbe84b539387d9967", "name": "Profitability Calculator - WestBred - Pageload", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 48.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if (digitalData.page.attributes.toolName == "westbred profitability calculator") { _satellite.logger.log("condition met, toolname = westbred profitability calculator"); return true; } } } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "westbred profitability calculator" }, { "name": "eVar40", "type": "value", "value": "Step 1 - Choose a Crop" } ], "props": [ { "name": "prop34", "type": "value", "value": "wheat" } ], "events": [ { "name": "event140" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "WestBred Profitability Calculator - Step 1", "linkType": "o" } } ] }, { "id": "RL29e9bdfc281a48cb8afb08f8625a1606", "name": "Channel | Seedsman | FormSubmit | Pixel - gtag ", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "gtag-BecomeSeedsmanFormSubmission" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBecomeSeedsmanPage%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCad9d67e7025d4aebbed66f556c4ef0cd-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLbe1c14efcb6d484ea045ac0b777f7404", "name": "content: tel click tracking", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "a", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { return target && target.href && target.href.startsWith("tel:"); } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": false, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC4e5333d71c7647b193be8ef37e16c5d6-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL551469f1d6de4d468063c5a9e34224f0", "name": "Pixel-DAD:HarvestViewPlot:DCM ", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isHarvestViewPlotPages%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC7f6ceafc78c14b31aaa9746a0a71c4e1-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL8dab4e862d6e4b84903258ebf3e55f38", "name": "content: WasThisPageHelpful - feedback submitted", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": ".feedback-submit", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCe9b69712655a4c289d7385c7f1cffb18-source.js', "language": "javascript", "isExternal": true } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.prop18 = "yes"; if ($("#mdc-radio--no-helpful-page_feedback")[0].checked) s.prop18 = "no"; s.events = s.apl(s.events, 'event41', ',',0); s.linkTrackEvents = s.apl(s.linkTrackEvents, 'event41', ',',0); s.linkTrackVars = s.apl(s.linkTrackVars, 'prop14,prop18', ',',0); } }, "trackerProperties": { } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Page Feedback Received", "linkType": "o" } } ] }, { "id": "RL0873cc2fe79440e2b3abbc97c3f9e60a", "name": "FacetedBrowsing | DirectCall", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "facetedbrowse" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ], "props": [ { "name": "prop41", "type": "value", "value": "%event.detail.zipCodeStatus%" }, { "name": "prop42", "type": "value", "value": "%event.detail.radiusStatus%" }, { "name": "prop43", "type": "value", "value": "%event.detail.regionStatus%" }, { "name": "prop44", "type": "value", "value": "%event.detail.cropStatus%" }, { "name": "prop45", "type": "value", "value": "%event.detail.productStatus%" } ], "events": [ { "name": "event22" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "faceted browse tracking", "linkType": "o" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RL8b70d795f7154684a38cba086969958f", "name": "Click | Seed Finder | Interactions | AA", "events": [ { "modulePath": "core/src/lib/events/dataElementChange.js", "settings": { "name": "seedFinder: eventName" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if( digitalData && digitalData.event[0] && digitalData.event[0].eventInfo && digitalData.event[0].eventInfo.eventName && digitalData.event[0].eventInfo.eventName.length != 0 && digitalData.event[0].eventInfo.toolName.includes("seed finder")) { return true; } } } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { var eventName = _satellite.getVar("seedFinder: eventName"); var eventMap = { "seedAddMyListMenu":"event42", "seedAddMyListProduct":"event43", "seedGetPlantingRate":"event44", "seedViewProfile":"event45", "seedCompareSingle":"event46", "seedCompareAll":"event47" }; s.linkTrackVars = s.apl(s.linkTrackVars,"events,eVar29,prop21"); s.linkTrackEvents = s.apl(s.linkTrackEvents,eventMap[eventName]); s.events = eventMap[eventName]; s.eVar39 = digitalData.event[0].eventInfo.toolName; s.prop21 = digitalData.page.pageInfo.toolLayout; //Calling rule "DAD | SeedFinder | addProductToSeedList | Pixels - DCM, FB, GoogleAds" directly if(eventName=="seedAddMyListProduct"){ _satellite.logger.info("Inside IF condition seeAddMyListProduct") _satellite.track("dad:seedFinder:addProdToSeedList"); } } }, "trackerProperties": { } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkType": "o" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RL15ed5e8dc42f4ec6a56702d60c632842", "name": "Find Your Seedsman Get More Info Click", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "anchorDelay": 100, "elementSelector": ".result .product-card__actions a[data-tool-interation='find your seedsman card click']", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar38", "type": "value", "value": "%Partner Name | Data Attribute%" }, { "name": "eVar39", "type": "value", "value": "%Tool Name | Data Attribute%" } ], "events": [ { "name": "event131" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Find Your Seedman - Card/Map Pin click", "linkType": "o" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RLffbe2b67002b4859aa0f3e21324af789", "name": "Click | Feedback Modal | Open | AA", "events": [ { "modulePath": "core/src/lib/events/dataElementChange.js", "settings": { "name": "feedbackModalOpen | DL event" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "equals" }, "leftOperand": "%feedbackModalOpen | DL event%", "rightOperand": "aemPageFeedbackOpen" } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.linkTrackVars = s.apl(s.linkTrackVars,"events"); s.linkTrackEvents = s.apl(s.linkTrackEvents,"event12"); s.events = s.apl(s.events,"event12"); } }, "trackerProperties": { } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkType": "o" } } ] }, { "id": "RLca8f0686d56b46989072418bb237f583", "name": "content: form Load tracking", "events": [ { "modulePath": "core/src/lib/events/customEvent.js", "settings": { "type": "doneWithEventAdditions", "elementSelector": "body", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { /* try{ var track = false; for (i = 0; i < digitalData.event.length; i++) { if(hasValue(digitalData.event[i].eventInfo.eventName) && typeof digitalData.event[i].tracked == "undefined" && formEventArray.hasOwnProperty(digitalData.event[i].eventInfo.eventName)){ track = true; var tempEvent = formEventArray[digitalData.event[i].eventInfo.eventName]; s.events = s.apl(s.events, tempEvent); s.linkTrackEvents = s.apl(s.linkTrackEvents, tempEvent); digitalData.event[i].tracked = "y"; } } if (track){ s.eVar29 = _satellite.getVar('content: form name'); s.eVar33 = _satellite.getVar('content: form step'); s.linkTrackVars = s.apl(s.linkTrackVars, 'eVar29,eVar33'); s.tl(true,"o","Form Interaction"); } } catch(e){_satellite.logger.error(e);} */ } }, "trackerProperties": { } } } ] }, { "id": "RLf3cb854f10cf4432bceb8ff8975c7f89", "name": "Pixel-DAD:Harvest-contestThank-you:Facebook Ads", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageHarvest-contestThank-you%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC1d123e090b3f43e4b86039ee5380d4fb-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC63d84d5d5bf14482acbdbab73adc389a-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLfe9633cdbb4041e4a74369afa516db23", "name": "Video - Milestone | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "trackVideoMilestone" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { //s.events = s.apl(s.events,"event57="+event.detail.videoPlayTime) //s.linkTrackEvents = s.apl(s.linkTrackEvents,s.events) s.linkTrackVars = s.apl(s.linkTrackVars,"events"); switch(event.detail.mileStone){ case 10: s.events = s.apl(s.events,"event51"); s.linkTrackEvents = s.apl(s.linkTrackEvents,s.events); break; case 25: s.events = s.apl(s.events,"event52"); s.linkTrackEvents = s.apl(s.linkTrackEvents,s.events); break; case 50: s.events = s.apl(s.events,"event53"); s.linkTrackEvents = s.apl(s.linkTrackEvents,s.events); break; case 75: s.events = s.apl(s.events,"event54"); s.linkTrackEvents = s.apl(s.linkTrackEvents,s.events); break; case 99: s.events = s.apl(s.events,"event55"); s.linkTrackEvents = s.apl(s.linkTrackEvents,s.events); break; } } }, "trackerProperties": { "eVars": [ { "name": "eVar15", "type": "value", "value": "%event.detail.videoTitle%" } ], "events": [ { "name": "event57", "value": "%event.detail.videoPlayTime%" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Youtube Video Starts", "linkType": "o" } } ] }, { "id": "RLd4dd2c69ee7148d8bb741d062897ff04", "name": "ContactMe - ViewAllContacts | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "contactMeRepsClick" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { _satellite.setVar("ContactMe - ToolName | SetVar", event.detail.toolName); _satellite.setVar("ContactMe - PartnerName | SetVar", event.detail.partnerName); return true; } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "equals" }, "leftOperand": "%event.detail.toolInteraction%", "rightOperand": "contact me view all reps click" } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { _satellite.setVar("ContactMe - ToolInteraction | SetVar", event.detail.toolInteraction); _satellite.setVar("ContactMe - PartnerName | SetVar", event.detail.partnerName); } }, "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ], "events": [ { "name": "event146" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Contact Me Reps Click", "linkType": "o" } } ] }, { "id": "RL005bf71e3e944eee866a70ddd133cd67", "name": "Click | Harvest Results | viewPlotReport | AA", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "a.mdc-button.mdc-button__tertiary", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "harvest-results.html", "valueIsRegex": true }, { "value": "local-yield-results.html", "valueIsRegex": true }, { "value": "harvest-plots.html", "valueIsRegex": true } ] } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.linkTrackVars = s.apl(s.linkTrackVars,"events,eVar39,eVar41"); s.linkTrackEvents = s.apl(s.linkTrackEvents,"event127"); s.events = s.apl(s.events,"event127"); s.eVar39 = digitalData.event[0].eventInfo.toolName; s.eVar41 = digitalData.event[0].eventInfo.toolInteraction; } }, "trackerProperties": { } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkType": "o" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RLa28609b028ae4c47bdb49f11392911a0", "name": "content: Share Tracking", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "[data-link_location]", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { //New Share Bar Tracking events and eVars s.linkTrackVars+="events,eVar30,eVar39,eVar10,eVar12,eVar57"; s.linkTrackEvents+="event76,event77,event78,event79,event83,event84,event85,event86,event89"; //Appending Old Share tracking events and eVars to run both new and old in parallel //s.linkTrackVars+=",eVar37,eVar56"; //s.linkTrackEvents+=",event37,event70,event71,event72,event73,event74,event75"; s.eVar10 = document.location.host + document.location.pathname; s.eVar12 = (document.location.search=="")?document.location.hash:document.location.search; s.eVar57 = document.location.href; switch(_satellite.getVar("content : data-link_name",event)){ case "facebook": s.eVar30 = _satellite.getVar("content : data-link_location",event); s.events = "event76,event89"; break; case "twitter": s.eVar30 = _satellite.getVar("content : data-link_location",event); s.events = "event77,event89"; break; case "print": s.eVar30 = _satellite.getVar("content : data-link_location",event); s.events = "event86,event89"; break; case "download": s.eVar30 = _satellite.getVar("content : data-link_location",event); var i = digitalData.event.length; s.eVar39 = digitalData.event[i-1].eventInfo.toolName; s.events = "event85,event89"; break; case "Download": s.eVar30 = _satellite.getVar("content : data-link_location",event); var i = digitalData.event.length; s.eVar39 = digitalData.event[i-1].eventInfo.toolName; s.events = "event85,event89"; break; case "email-start": s.eVar30 = _satellite.getVar("content : data-link_location",event); var i = digitalData.event.length; s.eVar39 = digitalData.event[i-1].eventInfo.toolName; s.events = "event83"; break; case "email-submit": s.eVar30 = _satellite.getVar("content : data-link_location",event); s.events = "event84,event89"; break; case "linkedIn": s.eVar30 = _satellite.getVar("content : data-link_location",event); s.events = "event79,event89"; break; case "whatsApp": s.eVar30 = _satellite.getVar("content : data-link_location",event); s.events = "event78,event89"; break; } } }, "trackerProperties": { } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "%content : data-link_name%", "linkType": "o" } } ] }, { "id": "RLf56b0519d8884205a507e845e4503767", "name": "zPixel - GoogleAds | AllPages (dad) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "dekalbasgrowdeltapine.com" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<!-- Global site tag (gtag.js) - Google Ads: 957515768 -->\n<script async src=\"https://www.googletagmanager.com/gtag/js?id=AW-957515768\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'AW-957515768');\n</script>", "language": "html" } } ] }, { "id": "RL2243f5ab66ab40708a6684d2ab70e244", "name": "Optout Fallback Tracking - Hardcoded request | DOM Ready | Adobe Analytics ", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { // if (optin is enabled) AANNDD (AA pervious permissions == false OORR complianceType == GDPR) return true if( _satellite.getVar('Optin - isEnabled | CustomCode') && ( ( _satellite.getVar('Optin - PreviousPermission | CustomCode JSON') && _satellite.getVar('Optin - PreviousPermission | CustomCode JSON').aa == false ) || ( _satellite.getVar('Optin - PreviousPermission | CustomCode JSON') == undefined && _satellite.getVar('OptIn - ComplianceType | MappingTable') == "GDPR" ) ) ){ return true; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCe0220a8491f14663bdecfdef3cb076c1-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL5e2577b482a3467ab6e8e24bfb1d2d54", "name": "Channel | Finance | FormSubmit | Pixel - gtag ", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "gtag-CompleteFinancingFormSubmission" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isFinancingFormPage%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCe29255ee1135443c9475553e25214850-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL9b0f2134c7f14304b3055251723dc87a", "name": "Pixel-DAD:Section:Success-stories:VideoStart:Facebook Ads", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "DAD:Section:Success-stories:VideoStart:FacebookAds" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionSuccess-stories%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC5ed87c46a4e240c295ff7ed857f386d1-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLfdf7b2f7974546b3911a96daa8160c9c", "name": "zPixel - GoogleAds | AllPages (Reahybrids) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "rea-hybrids.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10279451\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10279451');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10279451/reala0/rea+standard'\n});", "language": "javascript" } } ] }, { "id": "RL2d6aee70207f432887558a8d13221f44", "name": "Find Your Seedsman Map Pin Click", "events": [ { "modulePath": "core/src/lib/events/dataElementChange.js", "settings": { "name": "Partner Name | Data Layer" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "equals", "caseInsensitive": true }, "leftOperand": "%Map Pin Click | Find Your Seedsman | Data Layer%", "rightOperand": "seedsmanPinClick" } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar38", "type": "value", "value": "%Partner Name | Data Layer%" }, { "name": "eVar39", "type": "value", "value": "%Tool Name | Data Layer%" }, { "name": "eVar41", "type": "value", "value": "find your seedsman map pin click" } ], "events": [ { "name": "event130" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Find Your Seedman - Card/Map Pin click", "linkType": "o" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RL3d613e3ab22a494caa71630f7a40e896", "name": "Find Your Seedsman Card Click", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "anchorDelay": 100, "elementSelector": "div[role='button'] div[data-tool-interation='find your seedsman card click']", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar38", "type": "value", "value": "%Partner Name | Data Attribute%" }, { "name": "eVar39", "type": "value", "value": "%Tool Name | Data Attribute%" }, { "name": "eVar41", "type": "value", "value": "%Tool Interaction | Data Attribute%" } ], "events": [ { "name": "event129" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Find Your Seedman - Card/Map Pin click", "linkType": "o" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RLe8ff4cff24e1431b93d475ea60fe9e35", "name": "zPixel - FacebookAds,GoogleAds | AllPages (asgrow) | DomReady", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "asgrow.com.mx" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC69578e201317498ebe0876dfd0cc5ad9-source.js', "language": "javascript", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCab653289a4a74830958090880b293ad5-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL314ae7bdfae74764b5cec758a2d45b6d", "name": "Pixel: Channel: Agronomy: Article Page", "events": [ { "modulePath": "core/src/lib/events/pageBottom.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isProduction%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isChannelSite%" } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isArticle%" } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isAgronomy%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<!--\nStart of Floodlight Tag: Please do not remove\nActivity name of this tag: 30SecondsOnAgronomyArticle_CHAN\nURL of the webpage where the tag is expected to be placed: http://www.channel.com/agronomics/Pages/default.aspx\nThis tag must be placed between the <body> and </body> tags, as close as possible to the opening tag.\nCreation Date: 05/06/2019\n-->\n<script type=\"text/javascript\">\nvar axel = Math.random() + \"\";\nvar a = axel * 10000000000000;\ndocument.write('<iframe src=\"https://3510991.fls.doubleclick.net/activityi;src=3510991;type=fy19cv;cat=30sec0;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua=;npa=;ord=1;num=' + a + '?\" width=\"1\" height=\"1\" frameborder=\"0\" style=\"display:none\"></iframe>');\n</script>\n<noscript>\n<iframe src=\"https://3510991.fls.doubleclick.net/activityi;src=3510991;type=fy19cv;cat=30sec0;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua=;npa=;ord=1;num=1?\" width=\"1\" height=\"1\" frameborder=\"0\" style=\"display:none\"></iframe>\n</noscript>\n<!-- End of Floodlight Tag: Please do not remove -->", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<!-- Event snippet for AEM - Visit Agronomy Article conversion page -->\n<script>\n gtag('event', 'conversion', {'send_to': 'AW-955985221/e1asCJePpZ0BEMXa7McD'});\n</script>\n", "language": "html" } } ] }, { "id": "RL7b8dd6dcf882433c9cf5f2d861a247d1", "name": "Pixel-DAD:Section:Agronomy:VideoStart:Google Ads - DEKALB", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "DAD:Section:Agronomy:VideoStart:GoogleAds-DEKALB" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionAgronomy%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC24afec88bbb64e75acd19963ce7c9715-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLf407230b2a1d430292bdafa46626aeca", "name": "Click | Agronomy Article | Read More | AA", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "anchorDelay": 100, "elementSelector": "[data-tool-layout='card'],[data-tool-layout='list']", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { /* s.linkTrackVars = s.apl(s.linkTrackVars,"events,eVar54,prop14,prop21"); s.linkTrackEvents = s.apl(s.linkTrackEvents,"event40"); s.events = s.apl(s.events,"event40"); s.eVar54 = digitalData.page.pageInfo.articleTitle; s.prop14 = s.eVar54; s.prop21 = digitalData.event[0].eventInfo.toolLayout; */ } }, "trackerProperties": { "eVars": [ { "name": "eVar54", "type": "alias", "value": "prop14" } ], "props": [ { "name": "prop14", "type": "value", "value": "%Article Title | Data Attribute%" }, { "name": "prop21", "type": "value", "value": "%Article Tool Layout | Data Attribute%" } ], "events": [ { "name": "event40" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Article | Read More ", "linkType": "o" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RL78c2c8db97d94ec29536510534150a98", "name": "Channel | SeedFinder | pageLoad | Pixel - gtag", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "channel.com/en-us/products/seed-finder/", "valueIsRegex": true } ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC2c11e336a00641759382ff6dffe5899b-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLf27d158a945f4620b077509451dd8089", "name": "content: link tracking", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "track content link" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCef0f4539968c4bb38e1a12bcfdd2d999-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RLc842061eefe248b5aaef4333ff16edbb", "name": "Pixel-DAD:Thank-you-subscribe:Google Ads - Asgrow", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageThank-you-subscribe%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCe221c8deae7d4264bb24d236d99047ac-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL6cb4dfe0ed9c48fa8533f6adf4b4d4bd", "name": " Pixel-DAD:CalculateCurves:Google Ads", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "dad-calculatecurve-googleads" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isToolOptimizeMySeed%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC26e8d5a9de8442b29f72ea11607374b9-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLf970cc82024b4539ad1316c5cc0e8a5a", "name": "Pixel-DAD:Section:Success-Stories:HelpfulQuestion:DCM - Deltapine/ Tribrand", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "Pixel-DAD:Section:Success-Stories:HelpfulQuestion:DCM-Deltapine/Tribrand" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionSuccess-stories%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCa939be90775f470e87acbcc0edc171aa-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL7c65a56aedbf4969965f3ac703f4bed4", "name": "Channel | All Pages | pageLoad | Pixels - GoogleAds, Twitter ", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "contains" }, "leftOperand": "%content: hostname%", "rightOperand": "channel" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC63748708461e47c3980a73afd5d65805-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC4e62fe3478c347d2b1a49a039a3ab64f-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC3d0ef3bb4a734581812e8f0a00a165b0-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCee8cefc49fe34729ad80c349cdcefe5b-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL34bf3657f9bf41118ef5275c6fad553a", "name": "Pixel-DAD:SummaryYieldPDFDownload:DCM - Deltapine", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "a", "elementProperties": [ { "name": "href", "value": ".pdf", "valueIsRegex": true } ], "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "/en-us/summary-yield-results.html", "valueIsRegex": true } ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC3a5aa891dce94906a2fd04885884f972-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL0337a47a3da04a4ca8225ca26d6df4ff", "name": "Profitability Calculator - WestBred Calc Click", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "[data-tool-name='westbred profitability calculator']", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.linkTrackVars = "events,eVar39,eVar40,prop34"; s.linkTrackEvents = "event140,event141,event142,event143"; s.eVar39 = event.element.getAttribute("data-tool-name"); // s.eVar39 = _satellite.getVar("Tool Name | Data Attribute"); s.eVar40 = event.element.getAttribute("data-tool-step"); // s.eVar40 = _satellite.getVar("Tool Step | Data Attribute"); s.prop34 = "wheat"; // s.prop34 = _satellite.getVar("Crop Name | Data Attribute"); var step = event.element.getAttribute("data-tool-step"); // var step = _satellite.getVar('Tool Step | Data Attribute'); var stepNum = step.match(/\d+/)[0] if (stepNum) { if(step.includes("1")) { _satellite.logger.log("event140 (step1)"); s.events = "event140"; } else if(step.includes("2")) { _satellite.logger.log("event141 (step2)"); s.events = "event141"; } else if(step.includes("3")) { _satellite.logger.log("event142 (step3)"); s.events = "event142"; } else if(step.includes("4")) { _satellite.logger.log("event143 (step4)"); s.events = "event143"; } } // setTimeout(function(){ s.tl(this,'o','Prof Calc Step') }, 300); } }, "trackerProperties": { } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkType": "o" } } ] }, { "id": "RL5130f1b96068435e94c2539a80a97dbd", "name": "Pixel-DAD:Harvest-contestThank-you:Google Ads - DEKALB", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageHarvest-contestThank-you%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCe35b08fd72104672b975b2a06a996107-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL98ae8a33db0843feb2ca1af8587c0e06", "name": "Pixel-DAD:Disease-shield:VideoStart:Google Ads - DEKALB", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "DAD:Disease-shield:VideoStart:GoogleAds-DEKALB" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDEKALBInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageDisease-shield%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCc657454cea174dd6ba1e22188cd1e408-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL2c315aa5e60342439a10c51c725b7ab6", "name": "QuestionWidget - ToolLoad | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "questionToolLoad" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ], "events": [ { "name": "event21" } ] } } } ] }, { "id": "RL59daec48f4444d2388050ef773cce4af", "name": "Pixel-DAD:Section:Success-Stories:HelpfulQuestion:Google Ads - Deltapine/ Tribrand", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "Pixel-DAD:Section:Success-Stories:HelpfulQuestion:GoogleAds-Deltapine/Tribrand" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionSuccess-stories%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC04d1ab08ab414995b80b552f32bc264f-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLc518ec6d723f48a5a33cdcc9741047d2", "name": "content: Form Successfully Submitted", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "FormSuccessfullySubmitted" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCb4dfbb8e3bbd40da8f667eef36e1ddf4-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RLb7e1776ecfd949809fb062a94abb5cf4", "name": "Pixel-DAD:SummaryYieldPDFDownload:GoogleAds - Deltapine", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "a", "elementProperties": [ { "name": "href", "value": ".pdf", "valueIsRegex": true } ], "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "/en-us/summary-yield-results.html", "valueIsRegex": true } ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC81ec1737327948389cb382b23d7c3c47-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL95a2e8a551c140d68b8b0f7028830e30", "name": "Munchkin EMEA", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "cropscience.bayer.africa", "cropscience.bayer.com.tr", "cropscience.bayer.cz", "cropscience.bayer.sk" ] } } ], "actions": [ { "modulePath": "marketo-munchkin/src/lib/actions/initialize.js", "settings": { "wsInfo": "j0hRctjOKwEM", "asyncOnly": true, "httpsOnly": true, "munchkinId": "076-ZYW-786", "anonymizeIP": true } } ] }, { "id": "RL9deb3d8f02fa43259ddbd84d98d3029a", "name": "zPixel - DatadogPOC | AllPages (channel) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "channel.com" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": false, "source": "if(_satellite.buildInfo.environment==\"staging\"){ // staging script\n (function(h,o,u,n,d) {\n h=h[d]=h[d]||{q:[],onReady:function(c){h.q.push(c)}}\n d=o.createElement(u);d.async=1;d.src=n\n n=o.getElementsByTagName(u)[0];n.parentNode.insertBefore(d,n)\n })(window,document,'script','https://www.datadoghq-browser-agent.com/datadog-rum.js','DD_RUM')\n DD_RUM.onReady(function() {\n DD_RUM.init({\n clientToken: 'pub66ae19ec9255837c38991f5208f797eb',\n applicationId: '852f08f9-079b-4eb4-8e63-2841da3aeba4',\n site: 'datadoghq.com',\n service: 'test.channel.com',\n env: 'stage',\n version: '1.0.0',\n sampleRate: 100,\n trackInteractions: true,\n })\n })\n}\n\nelse if(_satellite.buildInfo.environment==\"production\"){ // production script \n (function(h,o,u,n,d) {\n h=h[d]=h[d]||{q:[],onReady:function(c){h.q.push(c)}}\n d=o.createElement(u);d.async=1;d.src=n\n n=o.getElementsByTagName(u)[0];n.parentNode.insertBefore(d,n)\n })(window,document,'script','https://www.datadoghq-browser-agent.com/datadog-rum.js','DD_RUM')\n DD_RUM.onReady(function() {\n DD_RUM.init({\n clientToken: 'pubbb1eeb6b26bc4d64219703356f898528',\n applicationId: '16ce6309-8212-4004-8d27-c5fb9325fe3b',\n site: 'datadoghq.com',\n service: 'channel.com',\n env: 'production',\n version: '1.0.0',\n sampleRate: 100,\n trackInteractions: true,\n })\n })\n \n}", "language": "javascript" } } ] }, { "id": "RL9d992400e4de49fa9e4c89bcf667b010", "name": "ContactMe - PullOutDrawer | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "contactMeToolStart" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ], "events": [ { "name": "event21" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Contact Me - Pull Out Drawer", "linkType": "o" } } ] }, { "id": "RLf21a3e15c3a5445b987d1b8ca010ea8f", "name": "Pixel-DAD:AllProduct:Google Ads - Deltapine/ Tribrand", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageAllProduct%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC5ca73619a1ae411f8015d4e6561c76c7-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLf4718a5e859e4269bd651892428d5300", "name": "Pixel-DAD:CalculateCurves:Facebook Ads", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "dad-calculatecurve-fb" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isToolOptimizeMySeed%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC9d980504a1954999b7fcde423ad7a6d6-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLd4704f74259d42b5913a0418c420e489", "name": "Pixel-DAD:Section:Agronomy:VideoStart:Facebook Ads", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "DAD:Section:Agronomy:VideoStart:FacebookAds" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionAgronomy%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCa0ebe383e43144f99b0a0d5a21172802-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL7e9f2c57a45f4bf89e21551926f10ae8", "name": "Click | Harvest Results | resultsList | AA", "events": [ { "modulePath": "core/src/lib/events/historyChange.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "local-yield-results.html", "valueIsRegex": true }, { "value": "harvest-results.html", "valueIsRegex": true }, { "value": "harvest-plots.html", "valueIsRegex": true } ] } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.eVar39=digitalData.event[0].eventInfo.toolName; } }, "trackerProperties": { } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "page" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RL0eff37ad629d445fbf5316ece3a3edb4", "name": "Pixel-DAD:Section:Agronomy:HelpfulQuestion:Google Ads - DEKALB", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "Pixel-DAD:Section:Agronomy:HelpfulQuestion:GoogleAds-DEKALB" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionAgronomy%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC1a6bd750857d4127ba62316a20e019aa-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL83205eec6b13498ca7c15b5d7f1f707c", "name": "Global | All Pages | pageload (cropscience) | Pixels - Facebook", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "cropscience.bayer.com.tr" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCa1851a7bcf9947fe8f1f548780a07c91-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RLd799fd1b61464168bedede64112be08e", "name": "environment: Global functions & variables", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 40.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": "\n\nvar formSubmitEvent = \"event29\";\nvar formEventArray = {\n \"emailStart\":\"event101,event28\",\n \"emailSubmit\":\"event102\",\n \"emailComplete\":\"event13,event30\",\n \"newPrefsStart\":\"event103,event28\",\n \"newPrefsSubmit\":\"event104\",\n \"emailPrefsComplete\":\"event105,event30\",\n \"knownUser\":\"event106\",\n \"knownSubmit\":\"event107\",\n \"knownComplete\":\"event108,event30\",\n \"updatePrefsStart\":\"event109,event28\",\n \"updatePrefsSubmit\":\"event110\",\n \"updatePrefsComplete\":\"event111,event30\",\n \"updatePrefsUnsubscribe\":\"event112\",\n \"formStart\":\"event115,event28\",\n \"formSubmit\":\"event116,\" + formSubmitEvent,\n \"formComplete\":\"event117,event30\"\n\n};\n/*var rsLookup = {\n 'adobecqms.net':'monsglobaldev',\n\t'asgrow.com.mx':'monsasgrowsaprod,monsglobalsaprod',\n\t'dekalb.com.mx':'monsdekalbsaprod,monsglobalsaprod',\n\t'agro.services':'monsdadprod,monsglobalnaprod',\n\t'asgrow.com.ar':'monsasgrowsaprod,monsglobalsaprod',\n\t'channel.com':'monsmonschannelglobalreportprod,monsglobalnaprod',\n\t'dekalb.co.za':'monsdekalbaaprod,monsglobalaaprod',\n\t'dekalb.com.ar':'monsdekalbsaprod,monsglobalsaprod',\n\t'dekalb.com.br':'monsdekalbsaprod,monsglobalsaprod',\n\t'dekalb.com.co':'monsdekalbsaprod,monsglobalsaprod',\n\t'dekalb.co.uk':'monsdekalbemeprod,monsglobalemeprod',\n\t'dekalbasgrowdeltapine.com':'monsdadprod,monsglobalnaprod',\n\t'deltapine.com.br':'monsdeltapinesaprod,monsglobalsaprod',\n\t'deruiter.com':'monsderuiterseedsprod,monsglobalvegprod',\n\t'deruiterseeds.com':'monsderuiterseedsprod,monsglobalvegprod',\n\t'fontanelle.com':'monsfontanelleprod,monsglobalnaprod',\n\t'goldcountryseed.com':'monsgoldcountryseedprod,monsglobalnaprod',\n\t'hubnerseed.com':'monshubnerseedprod,monsglobalnaprod',\n\t'jungseedgenetics.com':'monsjungseedprod,monsglobalnaprod',\n\t'krugerseed.com':'monskrugerseedprod,monsglobalnaprod',\n\t'latijereta.com.ar':'monslatijeretaprod,monsglobalsaprod',\n\t'lewishybrids.com':'monslewishybridsprod,monsglobalnaprod',\n\t'rea-hybrids.com':'monsreahybridsprod,monsglobalnaprod',\n\t'seminis.at':'monsseminisprod,monsglobalvegprod',\n\t'seminis.co.il':'monsseminisprod,monsglobalvegprod',\n\t'seminis.co.uk':'monsseminisprod,monsglobalvegprod',\n\t'seminis.com.au':'monsseminisprod,monsglobalvegprod',\n\t'seminis.com.br':'monsseminisprod,monsglobalvegprod',\n\t'seminis.com':'monsseminisprod,monsglobalvegprod',\n\t'seminis.de':'monsseminisprod,monsglobalvegprod',\n\t'seminis.fr':'monsseminisprod,monsglobalvegprod',\n\t'seminis.hu':'monsseminisprod,monsglobalvegprod',\n\t'seminis.it':'monsseminisprod,monsglobalvegprod',\n\t'seminis.jo':'monsseminisprod,monsglobalvegprod',\n\t'seminis.jp':'monsseminisprod,monsglobalvegprod',\n\t'seminis.ru':'monsseminisprod,monsglobalvegprod',\n\t'seminis-andina.com':'monsseminisprod,monsglobalvegprod',\n\t'seminis-las.com':'monsseminisprod,monsglobalvegprod',\n\t'specialtyhybrids.com':'monsspecialtyhybridsprod,monsglobalnaprod',\n\t'stewartseeds.com':'monsstewartseedsprod,monsglobalnaprod',\n\t'stoneseed.com':'monsstoneseedprod,monsglobalnaprod',\n \t'myfarmmyrewards.com':'monsmyfarmmyrewardsprod,monsglobalnaprod',\n 'mycrop.bayer.com':'monsdadprod,monsglobalnaprod',\n 'seedsmansource.com':'monsmonschannelglobalreportprod,monsglobalnaprod',\n\t'monsoy.com.br':'monsmonsoy,monsglobalsaprod',\n 'westbred.com':'monswestbredprodcore3,monsglobalnaprod',\n 'cropscience.bayer':'monsbcsglobalprod'\n};\n\nvar host = document.location.host.split('.'), rs;\nvar domain = host[1] + '.' + host[2];\nif(host.length == 4){\n\tdomain += '.' + host[3];\t\n}\nelse if(host.length==2){\n domain = host[0] + '.' + host[1];\n}\n\nif(domain.includes(\"cropscience\")){\n domain = \"cropscience.bayer\";\n}\n\n_satellite.logger.info('Production RSID:'+rsLookup[domain]);\n\nrs = _satellite.buildInfo.environment!==\"production\"?'monsglobaldev':domain!==''?rsLookup[domain]:'norsid'; \n_satellite.setVar('rsid',rs);*/\n\n\nfunction doesObjectExist(anObject){\n return !(anObject === undefined || anObject === null);\n}\nfunction hasValue(anObject){\n return !(anObject === undefined || anObject === null || anObject == \"\");\n}\n\n\n", "language": "javascript" } } ] }, { "id": "RLde573069bd814f93a78b6cc9dcd0ce8b", "name": "Pixel-DAD:Universal:Google Ads - DEKALB", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSiteDADinProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC03bf79c28c0b47ddb8ae52b06733bb47-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC972a04c6e8144423ab14173790bdb246-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC9a5e4f86a28c47a6b2e95a887ad2ffda-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCdd3a0d091ad2467b9e80a827562a3e7b-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC8ac3454a51f3442e98259a3f8f356e24-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCf4fdc88cb2064c73882bc28929950870-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC6d79d2f1037945eea50128139b31f69f-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC5290dfe7d4de45d08d7c117176710d0b-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC9e0dda2dffda4a8cb6341222b8510143-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC01ce53f327a54bc4816c9dd45130950c-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCfc647e03ccd545b1b6e47b4623c786ed-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL9e07076b02ed4425987e843e05634c73", "name": "zPixel - GoogleAds | AllPages (Krugerseed) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "krugerseed.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10276730\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10276730');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10276730/kruge0/kruger+standard'\n});", "language": "javascript" } } ] }, { "id": "RL43cba411071942468597f409be2a6aa6", "name": "CommonAnalyticsPlugin - Initialize | PageTop | AA", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 100.0 } ], "conditions": [ ], "actions": [ { "modulePath": "common-analytics-plugins/src/lib/actions/initializeApl.js", "settings": { } }, { "modulePath": "common-analytics-plugins/src/lib/actions/initializeInList.js", "settings": { } }, { "modulePath": "common-analytics-plugins/src/lib/actions/initializeP_fo.js", "settings": { } }, { "modulePath": "common-analytics-plugins/src/lib/actions/initializeGetPreviousValue.js", "settings": { } }, { "modulePath": "common-analytics-plugins/src/lib/actions/initializeGetResponsiveLayout.js", "settings": { } }, { "modulePath": "common-analytics-plugins/src/lib/actions/initializeGetTimeParting.js", "settings": { } } ] }, { "id": "RL3c3753f42ecd42599e76dd95cf9a0f78", "name": "Pixel: Dekalb: South Africa: Third Party: Facebook", "events": [ { "modulePath": "core/src/lib/events/pageBottom.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "dekalb.co.za" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": "!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\nn.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\nn.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\nt.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\ndocument,'script','https://connect.facebook.net/en_US/fbevents.js');\nfbq('init', '2102309559848698'); // Insert your pixel ID here.\nfbq('track', 'PageView');\n_satellite.track('Third Party Tag: Facebook Pixel (All Pages) Fired',1);", "language": "javascript" } } ] }, { "id": "RL06a6bbc24c4848f385ee7d40fd0da9af", "name": "Video - Start | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "trackVideoStart" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar15", "type": "value", "value": "%event.detail.videoTitle%" } ], "events": [ { "name": "event50" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Youtube Video Starts", "linkType": "o" } } ] }, { "id": "RL17841de8def3459baea75154835ceae8", "name": "Pixel-DAD:SummaryYieldPDFDownload:FB", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "a", "elementProperties": [ { "name": "href", "value": ".pdf", "valueIsRegex": true } ], "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "/en-us/summary-yield-results.html", "valueIsRegex": true } ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCca2effcf68a74b07ac78521df28f6b45-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLa2c70396b652487d80b51479cb6e156a", "name": "Pixel-DAD:AllProduct:DCM - DEKALB", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageAllProduct%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCf0f5beaa5b9d4d77bb9d7a4ffc878af0-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLe68a0683bae24f2ba7211b5a53cfeabe", "name": "content: All - Page Feedback Received", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "PageFeedbackReceived" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCdb0580cedda24fe9894e27229dbd3562-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RLb698085f3f3947428d6d5af7bcc0f5e6", "name": "Channel | PopulationOptimizer | pageLoad | Pixel - gtag", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "channel.com/en-us/tools/population-optimizer", "valueIsRegex": true } ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCecaa1b70322a4702b880fb59bdcf31da-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLa401e70429814e1c93c14871d5fd9a35", "name": "ProductDetail - PageView | digitalData - \"digitalData.product[0].productInfo.productName\" | AA", "events": [ { "modulePath": "core/src/lib/events/pageBottom.js", "settings": { }, "ruleOrder": 40.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if ( digitalData && digitalData.product[0] && digitalData.product[0].productInfo && digitalData.product[0].productInfo.productName ) { if (digitalData.product[0].productInfo.productName.length > -1 ) return true; else return false; } } } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar14", "type": "value", "value": "%ProductDetail - \"digitalData.product[0].productInfo.productName\" | CustomCode%" } ], "events": [ { "name": "event11" } ] } } } ] }, { "id": "RLc5790aa37af04210af94052bf388c3ea", "name": "Pixel: Dekalb: Argentina : Third Party: Facebook", "events": [ { "modulePath": "core/src/lib/events/pageBottom.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "dekalb.com.ar" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": "!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\nn.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\nn.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\nt.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\ndocument,'script','https://connect.facebook.net/en_US/fbevents.js');\nfbq('init', '1882921945311602'); // Insert your pixel ID here.\nfbq('track', 'PageView');\n_satellite.track('Third Party Tag: Facebook Pixel (All Pages) Fired',1);", "language": "javascript" } } ] }, { "id": "RL9178bad16f874f48860510b6a21a473b", "name": "target: bvs: product data update", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(adobe.optIn.permissions.target) return true; } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "equals" }, "leftOperand": "%TargetPropertyTokens | MappingTable%", "rightOperand": "dbb0b706-b9e3-11bd-7f98-aa8946bc4522" } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "matchesRegex" }, "leftOperand": "%content: product id%", "rightOperand": "[\\s\\S]" } } ], "actions": [ { "modulePath": "adobe-target-v2/lib/addParams.js", "settings": { "params": { "entity.id": { "value": "%content: product id%", "checked": true }, "pageBrand": { "value": "%BrandName | digitalData.page.attributes.brand%", "checked": true }, "at_property": { "value": "%TargetPropertyTokens | MappingTable%", "checked": true }, "pageCountry": { "value": "%content: user country%", "checked": true }, "productCrop": { "value": "%content: product crop%", "checked": true }, "pageLanguage": { "value": "%content: user language%", "checked": true }, "productBrand": { "value": "%content: product brand%", "checked": true }, "productLocale": { "value": "%content: product locale%", "checked": true }, "user.categoryId": { "value": "%TargetCategoryAffinity: Product Growing Env | MappingTable%", "checked": true }, "pageSubCategory1": { "value": "%content: sub category 1%", "checked": true }, "pageSubCategory2": { "value": "%content: sub category 2%", "checked": true }, "entity.categoryId": { "value": "%content: product crop%", "checked": true }, "pagePrimaryCategory": { "value": "%content: primary category%", "checked": true }, "productGrowingEnvironment": { "value": "%TargetCategoryAffinity: Product Growing Env | MappingTable%", "checked": true } } } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC2324c53e2d0b4735944f698f7dd522c1-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL569b6715d1de4fe9ae54b869eb28e1f2", "name": "zPixel - GoogleAds | AllPages (westbred) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "westbred.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10123397\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10123397');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10123397/westbr/westbr+standard'\n});", "language": "javascript" } } ] }, { "id": "RLc8b1246110a942efb78fae00a9d91bec", "name": "Pixel: Regional Brands: Third Party Tags: Adwords: Conversion Tag: Contact Us Start", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "fontanelle.com", "goldcountryseed.com", "hubnerseed.com", "krugerseed.com", "lewishybrids.com", "jungseedgenetics.com", "rea-hybrids.com", "specialtyhybrids.com", "stewartseeds.com", "stoneseed.com" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "/contact-us.html", "valueIsRegex": true } ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCedaa1dfb5314432d8a0a9b7e9823a4c5-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RLea5e94e3178e41bfa9f49b8eb97b709d", "name": "Click | Harvest Results | Interactions | AA", "events": [ { "modulePath": "core/src/lib/events/dataElementChange.js", "settings": { "name": "harvestResults: eventName " }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/pathAndQuerystring.js", "settings": { "paths": [ { "value": "/harvest-results", "valueIsRegex": true }, { "value": "/local-yield-results", "valueIsRegex": true }, { "value": "/harvest-plots", "valueIsRegex": true } ] } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTruthy" }, "leftOperand": "%harvestResults: eventName %" } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { var eventName = digitalData.event[0].eventInfo.eventName; var eventMap = { "harvestCardClick":"event125", "harvestPinClick":"event126", "harvestCalculateClick":"event128" }; s.linkTrackVars = s.apl(s.linkTrackVars,"events,eVar39,eVar41"); s.linkTrackEvents = s.apl(s.linkTrackEvents,eventMap[eventName]); s.events = s.apl(s.events,eventMap[eventName]); s.eVar39 = digitalData.event[0].eventInfo.toolName; s.eVar41 = digitalData.event[0].eventInfo.toolInteraction; } }, "trackerProperties": { } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkType": "o" } } ] }, { "id": "RL43a48d7807c247178504e71a82ca919b", "name": "SeedFinder - Interaction | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "seedfindersearch" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { var eventName = _satellite.getVar("seedFinder: eventName"); var eventMap = { "seedAddMyListMenu":"event42", "seedAddMyListProduct":"event43", "seedGetPlantingRate":"event44", "seedViewProfile":"event45", "seedCompareSingle":"event46", "seedCompareAll":"event47" }; s.linkTrackVars = s.apl(s.linkTrackVars,"events,eVar29,prop21"); s.linkTrackEvents = s.apl(s.linkTrackEvents,eventMap[eventName]); s.events = eventMap[eventName]; s.eVar39 = digitalData.event[0].eventInfo.toolName; s.prop21 = digitalData.page.pageInfo.toolLayout; //Calling rule "DAD | SeedFinder | addProductToSeedList | Pixels - DCM, FB, GoogleAds" directly if(eventName=="seedAddMyListProduct"){ _satellite.logger.info("Inside IF condition seeAddMyListProduct") _satellite.track("dad:seedFinder:addProdToSeedList"); } } }, "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ], "props": [ { "name": "prop41", "type": "value", "value": "%event.detail.zipCodeStatus%" }, { "name": "prop42", "type": "value", "value": "%event.detail.radiusStatus%" } ], "events": [ { "name": "event22" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Seed Finder - User Interactions", "linkType": "o" } } ] }, { "id": "RL9ec163907d7c4fcba68880ee9fcfe138", "name": "Pixel: Regional Brands: Third Party Tags: Adwords: Conversion Tag: Contact Us Success", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "fontanelle.com", "goldcountryseed.com", "hubnerseed.com", "krugerseed.com", "lewishybrids.com", "jungseedgenetics.com", "rea-hybrids.com", "specialtyhybrids.com", "stewartseeds.com", "stoneseed.com" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "/contact-us/contact-us-thank-you.html", "valueIsRegex": true } ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCd7beea0348924727a26848a5cfac9fd0-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL622026d4a58948d88a1a8680bc0fc839", "name": "zPixel - GoogleAds | AllPages (jungseedgenetics) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "jungseedgenetics.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10237911\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10237911');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10237911/jungl0/jung+standard'\n});", "language": "javascript" } } ] }, { "id": "RL7326618cb8ae4bdabf41d67e12cfc13c", "name": "zPixel - GoogleAds | AllPages (Cropscience) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "cropscience.bayer.com.tr" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=AW-435418147\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'AW-435418147');\n</script>", "language": "html" } } ] }, { "id": "RLa6e0a37ebe6545978b6a50ed7e9401ee", "name": "All Pages -- Page Load Tracking | Window Load | AA", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 100.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { //Code for tracking Launch rules s.prop37=ruleCompleted.join("|").toString(); localStorage.removeItem("ruleCompleted"); ruleCompleted = []; // Previous Page Name s.eVar11 = s.getPreviousValue(s.pageName,'gpv_pN'); // responsive layout s.eVar17 = window.getResponsiveLayout(500, 700, 1000); // Component Names if (digitalData && digitalData.page && digitalData.page.pageInfo && digitalData.page.pageInfo.componentList) { s.prop40 = digitalData.page.pageInfo.componentList; } //Get Percent Page Viewed var ppv_c=s.getPercentPageViewed(s.pageName); if(ppv_c&&ppv_c.length>=4){ var ppv_pn=(ppv_c.length>0)?(ppv_c[0]):(''); var ppv_v=((ppv_c.length>0)?(ppv_c[2]):('')) +((ppv_c.length>2)?('% Initial | '+ppv_c[1] + '% Total'):('')); if(ppv_pn&&ppv_v){ s.prop10=ppv_v; s.events = s.apl(s.events,"event24=" + ppv_c[2]); s.events = s.apl(s.events,"event25=" + ppv_c[1]); } } //Time Parting Tracking (for Data Warehouse) s.prop11 = window.getTimeParting("America/Chicago"); //Set the server variable s.server = document.location.host.split('/').join(''); s.server = s.server.indexOf(':')>-1 ? s.server=s.server.match('(.*):')[1]: s.server; // Marketo params into eVar45 if (s.Util.getQueryParam('mktoprogramid') != "" && s.Util.getQueryParam('mktocampaignid')!= "") // s.eVar45 = s.Util.getQueryParam('mktoprogramid')+"_"+s.Util.getQueryParam('mktocampaignid')+"_"+s.server; s.eVar45 = s.Util.getQueryParam('mktoprogramid')+"_"+s.Util.getQueryParam('mktocampaignid'); // removing s.server per request in DMGA 774 //Site Subsections var da = document.location.pathname.substring(document.location.pathname.indexOf('/')+1, document.location.pathname.lastIndexOf('/')).split('/'); for(var d = 0;d<6 && d<da.length;d++){ var pn = "prop" + (24 + parseInt(d)); s[pn] = da[d]; } //Campaign Tracking and marketo param tracking if(s.Util.getQueryParam('utm_content')!="" || s.Util.getQueryParam('utm_medium')!="" || s.Util.getQueryParam('utm_source')!="" || s.Util.getQueryParam('utm_campaign')!=""){ s.campaign = s.Util.getQueryParam('utm_content') + "|" + s.Util.getQueryParam('utm_medium') + "|" + s.Util.getQueryParam('utm_source') + "|" + s.Util.getQueryParam('utm_campaign'); } //Marketo param into campaign var if UTM params aren't available else{ if (s.eVar45 != "" && s.campaign != "") s.campaign = s.eVar45; } // Marketo params into eVar42 if(s.Util.getQueryParam('mktoleadid')!='') s.eVar42 = s.Util.getQueryParam('mktoleadid'); //Internal Campaign if(s.Util.getQueryParam('icid')!=''){ s.eVar31 = s.Util.getQueryParam('icid'); } //updated 10-17-2019 var mcids = _satellite.getVisitorId(), cd; cd = { midLibVer: mcids.version, mid: mcids.getMarketingCloudVisitorID(), aid: mcids.getAnalyticsVisitorID(), } s.contextData = cd; // capture tool name | crop protection page if (digitalData.page.attributes.toolName) { s.eVar39 = digitalData.page.attributes.toolName; s.events = s.apl(s.events, "event21"); } // capture tool name, if available if (digitalData.page.pageInfo.toolName) { s.eVar39 = digitalData.page.pageInfo.toolName; } else if(digitalData.event[0] && digitalData.event[0].eventInfo && digitalData.event[0].eventInfo.toolName){ s.eVar39 = digitalData.event[0].eventInfo.toolName; } // Set form related variables s.eVar29 = digitalData.page.attributes.formName; if(digitalData.page.attributes.formName == "monChannelContact"){ s.eVar29 = "monChannelContact"; // overwriting v29 with correct value } if(digitalData.page.attributes.formStep == "thank-you") { s.events = s.apl(s.events, 'event32'); } if(s.eVar29 != ""){ s.eVar33 = _satellite.getVar('content: form step'); for (i = 0; i < digitalData.event.length; i++) if(hasValue(digitalData.event[i].eventInfo.eventName) && typeof digitalData.event[i].tracked == "undefined" && formEventArray.hasOwnProperty(digitalData.event[i].eventInfo.eventName)){ s.events = s.apl(s.events, formEventArray[digitalData.event[i].eventInfo.eventName]); digitalData.event[i].tracked=true; } } //Article tracking s.prop14 = _satellite.getVar('content: article title'); if(s.prop14 != ""){ s.events = s.apl(s.events, "event39"); s.eVar54 = s.prop14; } //Capture the number of Email and SMS Text subscriptions hash=#email=1&text=0 set event13 or 38 if (location.hash.includes("email") && (location.hash.includes("text") || location.hash.includes("sms"))){ if (location.hash.slice(7,8) == "1") s.events = s.apl(s.events,"event13"); if (location.hash.slice(14,15) == "1" || location.hash.slice(13,14) == "1") s.events = s.apl(s.events,"event38"); } //_satellite.track("EmailAndSMSTextSubscriptions"); //Capture the number of Email and SMS Text subscriptions hash=#email=1&text=0 set event13 or 38 //Product name if(_satellite.getVar("isPageAllProduct") || _satellite.getVar("content: product name")){ s.eVar14=_satellite.getVar("content: product name"); s.events=s.apl(s.events,'event11'); } } }, "trackerProperties": { "eVars": [ { "name": "eVar1", "type": "value", "value": "D=pageName" }, { "name": "eVar13", "type": "value", "value": "%content: fips%" }, { "name": "eVar16", "type": "value", "value": "D=prop8" }, { "name": "eVar17", "type": "value", "value": "%content: responsive UI version%" }, { "name": "eVar18", "type": "value", "value": "D=prop7" }, { "name": "eVar19", "type": "value", "value": "%content: MKID%" }, { "name": "eVar20", "type": "value", "value": "D=ch" }, { "name": "eVar46", "type": "value", "value": "%content:purl%" } ], "props": [ { "name": "prop7", "type": "value", "value": "%content: user country%" }, { "name": "prop8", "type": "value", "value": "%content: user language%" }, { "name": "prop15", "type": "value", "value": "%content: page last published%" }, { "name": "prop17", "type": "value", "value": "%content: product filters%" }, { "name": "prop19", "type": "value", "value": "%content: user agent%" } ], "events": [ { "name": "event1" } ], "server": "%content: product name%", "channel": "%content: primary category%", "pageName": "%content: page name%" } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "page" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RL50360e85ee1f44249b0db63b3b31d3b6", "name": "Pixel-DAD:Thank-you-subscribe:Facebook Ads", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageThank-you-subscribe%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCf9a179d623484c79b5db013b8f72720b-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL73630246016745aaad5e855963bfbd2d", "name": "zPixel - GoogleAds | AllPages (Hubnerseed) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "hubnerseed.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10277621\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10277621');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10277621/hubne0/hubnerlp+standard'\n});", "language": "javascript" } } ] }, { "id": "RL7997a567c3a94558ae7caa5c6621a433", "name": "zPixel - GoogleAds | Event (Cropscience) | Button Click", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": ".button-container a", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC23556b553e7547209d53913b0204d7de-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL1c4ea8d9fc444f508da2e5a541aa8e6c", "name": "Click | Seed Finder | backToProducts | AA", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "a.mdc-typography--body2.lmnt-theme-primary.back-to-products", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.eVar39=digitalData.event[0].eventInfo.toolName; s.prop21=digitalData.event[0].eventInfo.toolLayout; } }, "trackerProperties": { } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "page" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RL6629488616e5469b9eb4827a84c5e244", "name": "Munchkin NA", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "stoneseed.com", "stewartseeds.com", "specialtyhybrids.com", "rea-hybrids.com", "lewishybrids.com", "krugerseed.com", "jungseedgenetics.com", "hubnerseed.com", "goldcountryseed.com", "fontanelle.com", "channel.com", "dekalbasgrowdeltapine.com", "westbred.com" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(document.domain.includes("fontanelle")){ if(OnetrustActiveGroups.includes("C0002")){ return true; } else{ return false; } } else{ return true; } } } } ], "actions": [ { "modulePath": "marketo-munchkin/src/lib/actions/initialize.js", "settings": { "wsInfo": "j0hRddjOKwEN", "asyncOnly": true, "httpsOnly": true, "munchkinId": "076-ZYW-786", "anonymizeIP": true } } ] }, { "id": "RL6ed5013655b64c2bad47ff137fae9f5c", "name": "content: form Submit tracking", "events": [ { "modulePath": "core/src/lib/events/customEvent.js", "settings": { "type": "doneWithCustomFormSubmit", "elementSelector": "body", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { try{ var track = false; for (i = 0; i < digitalData.event.length; i++) { if(hasValue(digitalData.event[i].eventInfo.eventName) && typeof digitalData.event[i].tracked == "undefined" && formEventArray.hasOwnProperty(digitalData.event[i].eventInfo.eventName)){ track = true; var tempEvent = formEventArray[digitalData.event[i].eventInfo.eventName]; s.events = s.apl(s.events, tempEvent); s.linkTrackEvents = s.apl(s.linkTrackEvents, tempEvent); digitalData.event[i].tracked = true; s.eVar24 = digitalData.event[i].eventInfo.uuid; _satellite.logger.log("FOR LOOP digitalData.event[i].eventInfo.uuid: "+digitalData.event[i].eventInfo.uuid); } } if (track){ s.eVar29 = _satellite.getVar('content: form name'); s.eVar33 = _satellite.getVar('content: form step'); // s.eVar24 = digitalData.event[1].eventInfo.uuid; // _satellite.logger.log("INSIDE IF using index 1 -- digitalData.event[1].eventInfo.uuid "+digitalData.event[1].eventInfo.uuid); s.linkTrackVars = s.apl(s.linkTrackVars, 'eVar29,eVar33,eVar155,eVar24'); s.tl(true,"o","Form Interaction"); if (s.linkTrackEvents.includes(formSubmitEvent)) _satellite.track("FormSuccessfullySubmitted"); } } catch(e){_satellite.logger.error(e);} } }, "trackerProperties": { } } } ] }, { "id": "RL3a8f369cb101464d9c0af4173974b05d", "name": "ProductEntrySearch - DropdownClicks | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "productDropdownClick" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" } ], "events": [ { "name": "event21" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Product Dropdown", "linkType": "o" } } ] }, { "id": "RL064873ee7b43421ba99772a23f924706", "name": "Pixel: Channel: All Pages", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isProduction%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isChannelSite%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC6b2e5c658fc14a278587a0f4318ec8f2-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCe01f58a7c63a48cb921f8ccaa1658959-source.js', "language": "html", "isExternal": true } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCade139b13d2e4ebebf8726796649b94d-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL00862021304447d79570db1bd52198a2", "name": "content: form tracking", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "track form interaction" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": false, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCbf96b88d46214d729fa53a1fc32ac72a-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL4cf562ad708a480d9b579de19add0cf6", "name": "ProductEntrySearch - SearchClicks | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "productEntrySearch" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.linkTrackVars = s.apl(s.linkTrackVars, "events"); switch(event.detail.userAction){ case "View Profile": s.events = s.apl(s.events,"event151"); s.linkTrackEvents = s.apl(s.linkTrackEvents, "event151") break; case "View Label": s.events = s.apl(s.events,"event152"); s.linkTrackEvents = s.apl(s.linkTrackEvents, "event152") break; } } }, "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" }, { "name": "eVar41", "type": "value", "value": "%event.detail.toolInteraction%" }, { "name": "eVar61", "type": "value", "value": "%event.detail.toolInteractionValue%" } ], "events": [ { "name": "event155" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Contact Me - Pull Out Drawer", "linkType": "o" } } ] }, { "id": "RL0f8da3615b824b6a8e4d7e886cf293ed", "name": "Form Complete Thank You", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 40.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/variable.js", "settings": { "name": "digitalData.page.attributes.formStep", "value": "thank-you" } } ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar29", "type": "value", "value": "%content: form name%" } ], "events": [ { "name": "event30" }, { "name": "event32" } ] } } } ] }, { "id": "RLe6ca6cf438cb4eca9eb7abfe908bd967", "name": "Global | Population Optimizer | Single Multi", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "[data-form-action='calculate-curves']", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.linkTrackEvents = "event135,event136,event137"; s.linkTrackVars = "eVar39"; s.eVar39 = digitalData.event[0].eventInfo.toolName; // var singleOrMulti = digitalData.event[0].eventInfo.singleOrMulti; if( $(".product-row").length == 2) { s.events = "event135,event136"; } else if( $(".product-row").length > 2 ) { s.events = "event135,event137"; } } }, "trackerProperties": { "events": [ { "name": "event135" }, { "name": "event136" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "population optimizer | calculate click", "linkType": "o" } }, { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } } ] }, { "id": "RL4778599f3cde47ea9683cddc44917aae", "name": "Pixel-DAD:AllProduct:DCM - Asgrow", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageAllProduct%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC0ad590ec4ff548e79343eb11d69714a3-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL3a1171087b0c422595bc8a64b5af7e96", "name": "Pixel-DAD:FinancePDFDownload:GoogleAds - Dekalb/Asgrow", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "a", "elementProperties": [ { "name": "href", "value": ".pdf", "valueIsRegex": true } ], "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "performance-financing-by-john-deere-financial.html", "valueIsRegex": true } ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC34c7a1c0410644fc95e5e245fdaf28c1-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLaa0b7391254d45659321693678830828", "name": "Pixel: Dekalb: Brazil: Third Party: Facebook: All Pages", "events": [ { "modulePath": "core/src/lib/events/pageBottom.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "dekalb.com.br" ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": "//Last Updated 06-25-18\n!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\nn.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\nn.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\nt.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\ndocument,'script','https://connect.facebook.net/en_US/fbevents.js');\nfbq('init', '501742296616411'); // Insert your pixel ID here.\nfbq('track', 'PageView');\nfbq('trackCustom', 'PageView_Dekalb');\n_satellite.track('Third Party Tag: Facebook Pixel (All Pages) Fired',1);", "language": "javascript" } } ] }, { "id": "RLa6b2de06109a4ee4856dbe3bb01181f3", "name": "zPixel - GoogleAds | Event (Cropscience) | Form Submit", "events": [ { "modulePath": "core/src/lib/events/windowLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "/tr-by-bize-ulasin-tesekkurler" } ] } }, { "modulePath": "core/src/lib/conditions/maxFrequency.js", "settings": { "unit": "session", "count": 1 } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC36d9a43032f043849d9f0546dd28c376-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL246f78633e6f4418a3983636c8050d57", "name": "Pixel-DAD:Section:Success-stories:VideoStart:DCM - Deltapine/ Tribrand", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "DAD:Section:Success-stories:VideoStart:DCM-Deltapine/Tribrand" }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isSectionSuccess-stories%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC67f2ccd1bba444a484a3cb8c1962385b-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL625c38adf6f24524bd2ccd34a249f198", "name": "OneTrust - UserConsentChange | Adobe", "events": [ { "modulePath": "core/src/lib/events/dataElementChange.js", "settings": { "name": "Optin - \"OnetrustActiveGroups\" | JS Variable" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": false, "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC6fdbdaaf4ab6432c8d82b4047451f95e-source.js', "language": "javascript", "isExternal": true } } ] }, { "id": "RL568dad93a1fb432096c52daf3fbde6b2", "name": "Channel | Harvest Results | pageLoad | Pixel - gtag", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "channel.com/en-us/products/harvest-results.html", "valueIsRegex": true } ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCb4f3f45d16684328a8056398265bd9c3-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL0c4d7839fea24b6cb5a869a21a14fea1", "name": "Pixel-DAD:AllProduct:Facebook Ads", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageAllProduct%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC2029eafd8318439e938f5d521b51dc42-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL9cf0e0c538a2413aaf3894dfdbc675a0", "name": "Pixel: Channel: All Pages: Google Global Campaign Manager", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 1.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isProduction%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isChannelSite%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<!--Start of global snippet: Please do not remove\nPlace this snippet between the <head> and </head> tags on every page of your site.\n-->\n<!-- Global site tag (gtag.js) - Google Marketing Platform -->\n<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-3510991\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', 'DC-3510991');\n</script>\n<!-- End of global snippet: Please do not remove -->", "language": "html" } } ] }, { "id": "RL3c6fa3cb23824a2e98afda8f7c91d1a2", "name": "DecisionTree - QuestionLoad | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "decisionTreeResponse" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar39", "type": "value", "value": "%event.detail.toolName%" }, { "name": "eVar40", "type": "value", "value": "%event.detail.toolStep%" } ], "events": [ { "name": "event26" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "decision tree question load", "linkType": "o" } } ] }, { "id": "RL359e9b9dc8034e5d8f38dda1553de27f", "name": "zPixel - GoogleAds | AllPages (Specialtyhybrids ) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "specialtyhybrids.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10276781\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10276781');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10276781/speci0/specialt+standard'\n});", "language": "javascript" } } ] }, { "id": "RL46c17198b4184ae897ebfd9aeb552a7e", "name": "data attribute test", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "anchorDelay": 100, "elementSelector": "[data-category*='partner']", "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar38", "type": "value", "value": "%delete: partner name%" } ], "events": [ { "name": "event129" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkType": "o" } } ] }, { "id": "RL81f71d26d5ad44e99af794aebee247a1", "name": "content: all pages: top of page", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(adobe.optIn.permissions.target) return true; } } } ], "actions": [ { "modulePath": "adobe-target-v2/lib/loadTarget.js", "settings": { } }, { "modulePath": "adobe-target-v2/lib/addParams.js", "settings": { "params": { "at_property": { "value": "%TargetPropertyTokens | MappingTable%", "checked": true }, "countryGroup": { "value": "%TargetVegSeedsCountryGroups | MappingTable%", "checked": true }, "user.categoryId": { "value": "%TargetCategoryAffinity: Path | MappingTable%", "checked": true } } } }, { "modulePath": "adobe-target-v2/lib/firePageLoad.js", "settings": { "bodyHiddenStyle": "body {opacity: 0}", "bodyHidingEnabled": true } } ] }, { "id": "RLdaec140e53ca4b87bed74ae5ffd06daf", "name": "Pixel-DAD:AllProduct:Google Ads - DEKALB", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageAllProduct%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RCf977159977f04b009279bb5e0eb2cfca-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL5d7ee5524cbb4b0bbeda6d6e4fa6e721", "name": "Channel | Seedsman | pageLoad | Pixel - gtag", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "channel.com/en-us/find-your-seedsman", "valueIsRegex": true } ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC9e5e829c7c4b4840ada8166d7c9a764d-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL39e6604f98e64c9a84e2072d76fdb5bd", "name": "zPixel - GoogleAds | AllPages (Goldcountryseed) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "goldcountryseed.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10239051\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10239051');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10239051/goldc0/goldcoun+standard'\n});", "language": "javascript" } } ] }, { "id": "RL43cac757debe4886ab792fb522d5708d", "name": "zPixel - GoogleAds | AllPages (Stewartseeds) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "stewartseeds.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10290391\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10290391');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10290391/stewa0/stewart+standard'\n});", "language": "javascript" } } ] }, { "id": "RL26185c26b41248bfbee41fe6404cf474", "name": "AllPages - TrackingLaunchRules | PageTop ", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 0.001 } ], "conditions": [ ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": "var ruleLookUp = {\n 'Pixel: Regional Brands: Third Party Tags: Adwords: Global Tag':'R1',\n 'Pixel-DAD:Harvest-contestThank-you:DCM - Asgrow':'R2',\n 'Pixel: De Ruiter: Third Party: Pardot':'R3',\n 'Pixel-DAD:Harvest-contestThank-you:Google Ads - DEKALB':'R4',\n 'Pixel-DAD:Section:Success-Stories:HelpfulQuestion:Google Ads - Deltapine/ Tribrand':'R5',\n 'Pixel-DAD:Section:Success-stories:VideoStart:Google Ads - Deltapine/ Tribrand':'R6',\n 'Pixel-DAD:AllProduct:DCM - DEKALB':'R7',\n 'Pixel-DAD:AllProduct:Facebook Ads':'R8',\n 'Pixel: Regional Brands: Third Party Tags: Adwords: Conversion Tag: Contact Us Start':'R9',\n 'Click | Seed Finder | backToProducts | AA':'R10',\n 'Pixel-DAD:AllProduct:DCM - Asgrow':'R11',\n 'Click | Harvest Results | resultsList | AA':'R12',\n 'content: form Submit tracking':'R13',\n 'content: All - Page Feedback Received':'R14',\n 'Find Your Seedsman Card Click':'R15',\n 'Pixel-DAD:Thank-you-subscribe:DCM - Asgrow':'R16',\n 'Click | Harvest Results | Interactions | AA':'R17',\n 'Pixel-DAD:SummaryYieldPDFDownload:DCM - Deltapine':'R18',\n 'Pixel-DAD:HarvestViewPlot:GoogleAds':'R19',\n 'Global | Population Optimizer | Single Multi':'R20',\n 'content: tool tracking':'R21',\n 'content: feedback tracking':'R22',\n 'content: WasThisPageHelpful - feedback submitted':'R23',\n 'Pixel-DAD:Section:Agronomy:HelpfulQuestion:Facebook Ads':'R24',\n 'Pixel-DAD:Section:Success-Stories:HelpfulQuestion:Facebook Ads':'R25',\n 'Pixel: Regional Brands: Third Party Tags: Adwords: Conversion Tag: View Product Profile':'R26',\n 'Channel | Harvest Results | pageLoad | Pixel - gtag':'R27',\n 'Profitability Calculator - WestBred Calc Click':'R28',\n 'Profitability Calculator - WestBred - Pageload':'R29',\n 'Profitability Calculator':'R30',\n 'Channel | Seedsman | FormSubmit | Pixel - gtag ':'R31',\n 'Pixel: Dekalb: Brazil: Third Party: Facebook: Lead/Register Complete':'R32',\n 'content: Share Tracking':'R33',\n 'content: email click tracking':'R34',\n 'Pixel: Channel: FieldCheckUp Series Pages: Video Started':'R35',\n 'Channel | All Pages | pageLoad | Pixels - GoogleAds, Twitter ':'R36',\n 'Pixel-DAD:Section:Agronomy:HelpfulQuestion:DCM - DEKALB':'R37',\n 'content: all pages':'R38',\n 'Pixel: Regional Brands: Third Party Tags: Adwords: Conversion Tag: Contact Us Success':'R39',\n 'Click | Harvest Results | viewPlotReport | AA':'R40',\n 'Pixel-DAD:FinancePDFDownload:DCM - Dekalb/Asgrow':'R41',\n 'Pixel: Dekalb: Argentina : Third Party: Facebook':'R42',\n 'Pixel-DAD:FinancePDFDownload:FB':'R43',\n 'content: link tracking':'R44',\n 'Pixel-DAD:SummaryYieldPDFDownload:GoogleAds - Deltapine':'R45',\n 'content: All - Video Started Playing':'R46',\n 'Pixel-DAD:Harvest-contestThank-you:DCM - DEKALB':'R47',\n 'content: form Load tracking':'R48',\n 'Pixel-DAD:CalculateCurves:Facebook Ads':'R49',\n 'Pixel-DAD:Thank-you-subscribe:Google Ads - DEKALB':'R50',\n 'Pixel: De Ruiter: Third Party: OneTrust':'R51',\n 'DAD | All Pages | pageLoad | Pixels - GoogleAds, Twitter':'R52',\n 'Pixel-DAD:Harvest-contestThank-you:Facebook Ads':'R53',\n 'Pixel-DAD:Section:Agronomy:VideoStart:Facebook Ads':'R54',\n 'Pixel-DAD:Section:Agronomy:HelpfulQuestion:DCM - Asgrow':'R55',\n 'content: tel click tracking':'R56',\n 'Pixel-DAD:CalculateCurves:DCM - DEKALB':'R57',\n 'Pixel: Dekalb: Brazil: Third Party: Facebook: All Pages':'R58',\n 'Pixel: Channel: Agronomy: Article Page':'R59',\n 'Pixel-DAD:Harvest-contestThank-you:Google Ads - Asgrow':'R60',\n 'Pixel-DAD:AllProduct:Google Ads - DEKALB':'R61',\n 'Pixel-DAD:Universal:Google Ads - DEKALB':'R62',\n 'Pixel-DAD:Thank-you-subscribe:DCM - DEKALB':'R63',\n 'Pixel: Dekalb: South Africa: Third Party: Facebook':'R64',\n 'Pixel-DAD:Section:Agronomy:VideoStart:Google Ads - Asgrow':'R65',\n 'Pixel: Channel: All Pages':'R66',\n 'content: global event listener':'R67',\n 'Click | Agronomy Article | Read More | AA':'R68',\n 'Global | All Pages | pageload | Pixels - Facebook':'R69',\n 'Channel | Finance | FormSubmit | Pixel - gtag ':'R70',\n 'DAD | Team Locator | map/card-Click | Pixels - DCM, FB, GoogleAds':'R71',\n 'content: download tracking':'R72',\n 'Pixel-DAD:Thank-you-subscribe:Google Ads - Asgrow':'R73',\n 'Click | Seed Finder | mySeedList | AA':'R74',\n 'Click | Feedback Modal | Submit | AA ':'R75',\n 'content: form tracking':'R76',\n 'AllPages (westbred,dad,channel) | WindowLoaded | Pixel - Kortx':'R77',\n 'Click | Feedback Modal | Open | AA':'R78',\n ' Pixel-DAD:CalculateCurves:Google Ads':'R79',\n 'Pixel: Channel: All Pages: Google Global Campaign Manager':'R80',\n 'Channel | PopulationOptimizer | pageLoad | Pixel - gtag':'R81',\n 'Pixel-DAD:Disease-shield:VideoStart:Facebook Ads':'R82',\n 'Pixel-DAD:Disease-shield:VideoStart:Google Ads - DEKALB':'R83',\n 'Pixel-DAD:AllProduct:Google Ads - Asgrow':'R84',\n 'Pixel-DAD:Section:Agronomy:HelpfulQuestion:Google Ads - Asgrow':'R85',\n 'Click | Seed Finder | Interactions | AA':'R86',\n 'Pixel-DAD:Section:Agronomy:VideoStart:DCM - Asgrow':'R87',\n 'Pixel-DAD:Section:Agronomy:HelpfulQuestion:Google Ads - DEKALB':'R88',\n 'content: all pages: top of page':'R89',\n 'content: internal search':'R90',\n 'Pixel-DAD:Disease-shield:VideoStart:DCM - DEKALB':'R91',\n 'Pixel-Channel:Section:Agronomy:HelpfulQuestion:DCM':'R92',\n 'Pixel-DAD:HarvestViewPlot:DCM ':'R93',\n 'Pixel-DAD:SummaryYieldPDFDownload:FB':'R94',\n 'Channel | Seedsman | pageLoad | Pixel - gtag':'R95',\n 'Pixel-DAD:Section:Success-stories:VideoStart:Facebook Ads':'R96',\n 'Pixel-DAD:Section:Agronomy:VideoStart:DCM - DEKALB':'R97',\n 'Pixel-DAD:HarvestViewPlot:FacebookAds':'R98',\n 'Pixel: Regional Brands: Third Party Tags: Adwords: Conversion Tag: Dealer Locator Start':'R99',\n 'DAD | SeedFinder | addProductToSeedList | Pixels - DCM, FB, GoogleAds':'R100',\n 'Pixel-DAD:Section:Success-Stories:HelpfulQuestion:DCM - Deltapine/ Tribrand':'R101',\n 'Pixel-DAD:Section:Success-stories:VideoStart:DCM - Deltapine/ Tribrand':'R102',\n 'Channel | FieldCheckUp | FormSubmit | Pixel-gtag':'R103',\n 'content: Form Successfully Submitted':'R104',\n 'Pixel: Channel: On Email And Text Alerts Page':'R105',\n 'Pixel-DAD:VideoStart:JourneyFromNeedtoSeed:DCM/FB/GoogleAds-Deltapine/Triband':'R106',\n 'Pixel-DAD:Thank-you-subscribe:Facebook Ads':'R107',\n 'Channel | SeedFinder | pageLoad | Pixel - gtag':'R108',\n 'Pixel-DAD:AllProduct:Google Ads - Deltapine/ Tribrand':'R109',\n 'environment: Global functions & variables':'R110',\n 'Click | Seed Finder | viewProfile | AA':'R111',\n 'Pixel-DAD:Section:Agronomy:VideoStart:Google Ads - DEKALB':'R112',\n 'Pixel-DAD:AllProduct:DCM - Deltapine/ Tribrand':'R113',\n 'Pixel-DAD:FinancePDFDownload:GoogleAds - Dekalb/Asgrow':'R114',\n 'Find Your Seedsman Get More Info Click':'R115',\n 'Find Your Seedsman Map Pin Click':'R116',\n 'zPixel - FacebookAds,GoogleAds | AllPages (dekalb) | DomReady':'R117',\n 'zPixel - FacebookAds,GoogleAds | AllPages (asgrow) | DomReady':'R118',\n 'DecisionTree - ProductName | DirectCall | AA':'R119',\n 'QuestionWidget - Response | DirectCall | AA':'R120',\n 'ContactMe - ZipcodeSearch | DirectCall | AA':'R121',\n 'QuestionWidget - ToolLoad | DirectCall | AA':'R122',\n 'ContactMe - ViewAllContacts | DirectCall | AA':'R123',\n 'DecisionTree - ThankYouForAnswering | DirectCall | AA':'R124',\n 'DecisionTree - QuestionResponses | DirectCall | AA':'R125',\n 'ContactMe - PullOutDrawer | DirectCall | AA':'R126',\n 'QuestionWidget - ArticleClickThru | DirectCall | AA':'R127',\n 'DecisionTree - ToolStart | DirectCall | AA':'R128'\n}", "language": "javascript" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "global": true, "source": "var ruleCompleted = [];\n\nif(localStorage.getItem(\"ruleCompleted\") != 1){\n ruleCompleted.push(localStorage.getItem(\"ruleCompleted\"));\n}\n\nwindow._satellite = window._satellite || {};\nwindow._satellite._monitors = window._satellite._monitors || [];\nwindow._satellite._monitors.push({\n ruleCompleted: function (event) {\n if(ruleLookUp[event.rule.name] != -1){ // to avoid blank values\n ruleCompleted.push(ruleLookUp[event.rule.name]);\n }\n localStorage.setItem(\"ruleCompleted\", ruleCompleted.join(\"|\").toString());\n }\n});", "language": "javascript" } } ] }, { "id": "RL48fb22d016484695881112b25a492e91", "name": "zPixel - GoogleAds | AllPages (Fontanellebrand) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "fontanelle.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10238745\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10238745');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10238745/fonta0/fontanel+standard'\n});", "language": "javascript" } } ] }, { "id": "RL87101d77db994d15888d18b1eedd5d94", "name": " zPixel - GoogleAds | AllPages (Channel) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "channel.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10118663\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10118663');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10118663/chann0/channel+standard'\n});", "language": "javascript" } } ] }, { "id": "RL2833476722e346dfb063079ec0c3cc62", "name": "Pixel-DAD:HarvestViewPlot:FacebookAds", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isHarvestViewPlotPages%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC7c413cceadbc4e23aaad86edc1c1f546-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL4f67e25dbbd0472aa8e9732623469536", "name": "zPixel - GoogleAds | AllPages (Stoneseed) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "stoneseed.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10279454\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10279454');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10279454/stone0/stone+standard'\n});", "language": "javascript" } } ] }, { "id": "RL6206577e7af54a62bebc5a96020a9d3b", "name": "Pixel-DAD:Thank-you-subscribe:DCM - Asgrow", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isBrandDADInProd%" } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } }, { "modulePath": "core/src/lib/conditions/valueComparison.js", "settings": { "comparison": { "operator": "isTrue" }, "leftOperand": "%isPageThank-you-subscribe%" } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC18dc8be7a39b47ceafb62f261f1315e4-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLa15679e0eac14ba4a1c3141c010723de", "name": "Google Site Verification - Meta Tag | DOM Ready", "events": [ { "modulePath": "core/src/lib/events/domReady.js", "settings": { }, "ruleOrder": 100.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "dekalbasgrowdeltapine.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC2a55ebd5a5ca47799fd0e028755e5245-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RL6f06ca40f026477682585fd6661dd498", "name": "TR | Google Tag Manager", "events": [ { "modulePath": "core/src/lib/events/pageBottom.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { return location.href.match(/^https:\/\/(test|www)\.cropscience\.bayer\.com\.tr/) ? true : false; } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer', \"GTM-TK6PGVP\");", "language": "javascript" } } ] }, { "id": "RLce8dff92fac54196ad51e75e0e087531", "name": "Pixel-DAD:FinancePDFDownload:DCM - Dekalb/Asgrow", "events": [ { "modulePath": "core/src/lib/events/click.js", "settings": { "elementSelector": "a", "elementProperties": [ { "name": "href", "value": ".pdf", "valueIsRegex": true } ], "bubbleFireIfParent": true, "bubbleFireIfChildFired": true }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/path.js", "settings": { "paths": [ { "value": "performance-financing-by-john-deere-financial.html", "valueIsRegex": true } ] } }, { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { if(_satellite.getVar("Optin - isEnabled | CustomCode") && localStorage.getItem("ConsentChanged").includes("C0004")){ return true; } else{ return false; } } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": 'https://assets.adobedtm.com/1dd6f8588eb5/244bd146ff39/81eb0d992c7d/RC0d18799034454f74a77174d42fe5e85c-source.js', "language": "html", "isExternal": true } } ] }, { "id": "RLfdb338c671cf45cf8290faed91b3a79d", "name": "AllPages - Add Marketo Forms to SA Pages - PageTop", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/customCode.js", "settings": { "source": function(event, target) { return location.href.match(/\.cropscience\.bayer\.africa\/za\/en-za\/about-us\/get-in-contact\.html/i) || location.href.match(/\.cropscience\.bayer\.africa\/za\/af-za\/about-us\/get-in-contact\.html/i); } } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "var docsToCheck = [{\n \"pageRegex\": /\\.cropscience\\.bayer\\.africa\\/za\\/en-za\\/about-us\\/get-in-contact\\.html/i,\n \"marketoScriptId\": \"076-ZYW-786\",\n \"formNumber\": 2909,\n \"cssSelector\": 'div[class=\"button aem-GridColumn aem-GridColumn--default--12\"]'\n},{\n \"pageRegex\": /\\.cropscience\\.bayer\\.africa\\/za\\/af-za\\/about-us\\/get-in-contact\\.html/i,\n \"marketoScriptId\": \"076-ZYW-786\",\n \"formNumber\": 3194,\n \"cssSelector\": 'div[class=\"button aem-GridColumn aem-GridColumn--default--12\"]'\n}\n];\n\nvar applyMarketoStyling = function(readyCallback) {\n MktoForms2.whenReady(function(form) {\n\n //#region Append Styling\n\t\tvar css = \"@media (max-width: 767px) {.mktoform { max-width: 90%; }} .mktoForm { max-width: 650px; margin: 0px auto; padding-bottom:40px; } h4{font-size:20px;line-height:26px;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif!important;color:#000;font-weight:700;margin-bottom:10px} \";\n css += \".header>.utility-nav{height:auto;position:relative}.header #page-header .primary-grid{margin-top:10px}.header>.utility-nav .utility-wrapper{padding-right:0;max-width:1280px;margin:0 auto}a.button{display:block;border:none;text-transform:uppercase;color:#fff;font-weight:700;font-style:italic;background-color:#de0043;padding:.8rem 1.2rem;font-size:13px;line-height:13px;text-decoration:none;max-width:200px;margin:0 auto}.mktoEmailField,.mktoTelField,.mktoTextField,textarea{width:100%!important;padding:1rem!important;font-size:1rem!important;font-weight:700}.mktoForm{width:100%!important;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif!important}.mktoForm .mktoFormCol{float:none}.mktoForm .mktoFieldWrap{float:none}.mktoField{border:solid thin #ccc}.mktoField:focus-within{border:solid thin #de0043;outline:solid thin #de0043}input,select,textarea{color:rgba(16,56,79,.87)!important;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif!important}.mktoForm .mktoGutter{line-height:auto}.mktoHtmlText{margin-top:2rem!important;line-height:-5rem!important;font-size:1.3rem;font-weight:100}.mktoGutter,.mktoOffset{display:none}.mktoCheckboxList input,.mktoRadioList input{margin:.7rem 0!important;width:1rem;clear:both}.mktoCheckboxList label,.mktoRadioList label{margin:.5rem 0!important;float:left;width:calc(100% - 2rem);padding-left:0;font-size:16px!important;color:rgba(16,56,79,.6)!important}.mktoCheckboxList,.mktoRadioList{width:100%!important}.doc{font-weight:700;color:#de0043;text-decoration:underline}.mktoButtonWrap.mktoNative{display:block;margin:.5rem 0!important}.mktoButtonWrap.btn-disable.mktoNative button.mktoButton{border:none;text-transform:uppercase;color:rgba(16,56,79,.37);font-weight:700;font-style:italic;background-color:rgba(16,56,79,.12);padding:.8rem 1.2rem}.mktoButtonWrap.mktoNative button.mktoButton{border:none;text-transform:uppercase;color:#fff;font-weight:700;font-style:italic;background-color:#de0043;padding:.8rem 1.2rem}.mktoFieldWrap .mktoLabel{font-size:16px!important;line-height:16px!important;font-weight:400!important;width:auto!important;color:rgba(16,56,79,.6)!important;margin-bottom:-2.5rem;margin-left:.5rem;margin-top:2rem;z-index:1;background-color:#fff;padding:.2rem;position:relative;transition:margin-top,.3s;transition:margin-bottom,.3s}.mktoFieldWrap .mktoLabel.filled{margin-bottom:-.6rem;margin-top:.3rem;font-size:.8rem;transition:margin-top,.3s;transition:margin-bottom,.3s}.mktoFieldWrap .mktoLabel.filled.focused{color:#de0043!important}.mktoHtmlText.mktoHasWidth{width:100%!important;margin:0!important;padding:10px 0 0!important}.mktoHtmlText.mktoHasWidth p{font-size:16px!important;line-height:1.4!important;color:rgba(16,56,79,.6)!important}label#LblEmailInvalid,label#LblzABYBrandInterest{display:none!important;background-color:transparent!important}.mktoHtmlText.mktoHasWidth h4{padding:10px 0 0!important}.mktoForm select.mktoField{height:56px!important;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif!important;border:1px solid rgba(41,41,41,.2)!important;border-radius:3px!important;-webkit-appearance:none!important;outline:0!important;font-size:15px!important;color:#000!important;box-shadow:none!important;padding:10px 13px!important;background-color:#fff!important;width:100%!important}select{-moz-appearance:none;background-image:url(http://na-ab41.marketo.com/rs/076-ZYW-786/images/down-arrow.png);background-repeat:no-repeat;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;background-size:22px;background-position:right center}.mktoForm .mktoButtonWrap.mktoSimple .mktoButton{border:none!important;text-transform:uppercase!important;color:#fff!important;font-weight:700!important;font-style:italic!important;background-color:#de0043!important;background:#de0043!important;padding:.8rem 1.2rem!important}.mktoForm fieldset legend{display:none}span.mktoButtonWrap.mktoSimple{margin:0!important}.mktoFieldWrap .mktoLabel{z-index:0!important}.wrapper-for{display:flex}.mktoForm .mktoRequiredField .mktoAsterix{display:none!important}fieldset.mktoFormCol.Form_Fieldset_1{padding-right:30px!important;width:50%}fieldset.mktoFormCol.Form_Fieldset_2{padding-left:30px!important;padding-right:0!important;width:50%}.mktoForm input[type=text]#county,.mktoForm input[type=text]#locationofInterest{border:none!important;height:auto!important;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif!important;border:1px solid rgba(41,41,41,.2)!important;border-radius:3px!important;-webkit-appearance:none!important;outline:0!important;font-size:15px!important;color:#292929!important;box-shadow:none!important;padding:10px 13px!important;background-color:#fff!important;width:auto!important}.ui-autocomplete-multiselect input[type=text]#county,.ui-autocomplete-multiselect input[type=text]#locationofInterest{display:inline-block!important;border:none!important;outline:0!important;height:27px!important;padding:0!important;margin:2px!important;overflow:visible!important;margin-bottom:5px!important}.ui-autocomplete-multiselect.ui-state-default{border-radius:3px!important;-webkit-appearance:none!important;outline:0!important;display:block!important;padding:8px 13px!important;background-color:#fff!important;width:95%!important;overflow:hidden;outline:0!important;cursor:text;margin:0 auto;border:1px solid rgba(41,41,41,.2)!important;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif!important}.ui-autocomplete-multiselect.ui-state-active{border:none;-moz-box-shadow:none;-webkit-box-shadow:none;-khtml-box-shadow:none;box-shadow:none}.ui-autocomplete-multiselect .ui-autocomplete-multiselect-item{font-size:.9rem;line-height:.9rem;border:1px solid #f4f6f8;border-radius:3px;padding:5px 5px 0 10px;color:#292929!important;background-color:#f4f6f8;font-weight:400;font-family:inherit}span.ui-helper-hidden-accessible{display:none}.ui-icon-close{background-position:0 1px;background-size:14px;height:20px;width:20px;margin-left:5px!important}.ui-state-default .ui-icon{background-image:url(https://pages.mko.cropscience.bayer.com/rs/076-ZYW-786/images/arr-cross.png);background-repeat:no-repeat}.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{border:1px solid transparent;background:transparent url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;font-weight:400;color:#292929;cursor:pointer}.ui-autocomplete{max-height:300px!important;overflow-y:auto}@media (max-width:768px){.ui-autocomplete-multiselect.ui-state-default{width:100%!important}.wrapper-for{display:flex;flex-direction:column}fieldset.mktoFormCol.Form_Fieldset_1{padding-right:0!important;padding-left:0!important;width:100%!important;order:2;width:100%}fieldset.mktoFormCol.Form_Fieldset_2{padding-right:0!important;padding-left:0!important;width:100%!important;order:1;width:100%}}@media only screen and (max-width:480px){.mktoForm input[type=date],.mktoForm input[type=email],.mktoForm input[type=number],.mktoForm input[type=tel],.mktoForm input[type=text],.mktoForm input[type=url],.mktoForm select.mktoField,.mktoForm textarea.mktoField{width:100%!important;padding:.8rem!important;font-size:1rem!important;height:auto;font-weight:700}}a.btn-c{background-color:transparent;border:1px solid #fff;color:#fff;display:block;font-size:14px;line-height:1.14286;font-weight:700;text-decoration:none;font-style:italic;padding:14px 18px!important;text-align:center}.mktoCheckboxList input,.mktoCheckboxList label{display:inline-block;vertical-align:middle;margin:5px;cursor:pointer;line-height:20px!important}.mktoCheckboxList label{position:relative}.mktoCheckboxList p{padding-left:29px!important;margin-top:-20px!important;text-align:justify}.mktoCheckboxList input+label:before{content:'';background:#fff;border:2px solid rgba(16,56,79,.6);display:inline-block;vertical-align:middle;width:15px;height:15px;padding:0;margin-right:10px;text-align:center}.mktoCheckboxList input:checked+label:before{content:'\\\\f00c';font-family:FontAwesome;background:#de0043;color:#fff;border-color:#de0043;line-height:17px}body .mktoForm .mktoCheckboxList>label{margin-left:0}.mktoRadioList input{opacity:0;position:absolute}.mktoRadioList input,.mktoRadioList label{display:inline-block;vertical-align:middle;margin:5px;cursor:pointer}.mktoRadioList label{position:relative}.mktoRadioList input+label:before{content:'';background:#fff;border:2px solid rgba(16,56,79,.6);display:inline-block;vertical-align:middle;width:15px;height:15px;padding:0;line-height:15px;margin-right:10px;text-align:center}.mktoRadioList input+label:before{border-radius:50%}.mktoRadioList input:checked+label:before{content:'\\\\f111';font-family:FontAwesome;color:#de0043;border:2px solid #de0043;font-size:9px}.mktoRadioList input:focus+label{outline:1px solid #fff}body .mktoForm .mktoRadioList>label{margin-left:0}.mktoGen.mktoImg{display:inline-block;line-height:0}.mktoForm{width:100%!important;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif!important}.mktoFieldWrap .mktoLabel,body .mktoForm .mktoCheckboxList>label,label{font-family:Helvetica,Arial,sans-serif!important}.mktoHtmlText.mktoHasWidth h4,.mktoHtmlText.mktoHasWidth p{font-family:Helvetica,Arial,sans-serif!important}\";\n $('<style id=\"mkto-style\">%css%</style>'.replace('%css%', css)).appendTo('head');\n //#endregion\n\n $(\"#N-Preference-Center fieldset\").addClass(function(i) {\n return 'Form_Fieldset_' + (i + 1);\n });\n $(\".Form_Fieldset_1 , .Form_Fieldset_2\").wrapAll('<div class=\"wrapper-for\">');\n\n $(function() {\n\n $('select, textarea, .mktoTextField, .mktoEmailField, .mktoTelField').focus(function(e) {\n $label = $(this).parent().find('label');\n if ($label.hasClass('filled')) {\n $label.addClass('focused');\n } else {\n $label.addClass('filled focused');\n }\n });\n\n $('input#county').blur(function() {\n if ($('.ui-autocomplete-multiselect-item').length > 0) {\n $('#Lblcounty').addClass('filled');\n $('#Lblcounty').addClass('focused');\n } else {\n $('#Lblcounty').removeClass('filled');\n $('#Lblcounty').removeClass('focused');\n }\n });\n $('input#locationofInterest').blur(function() {\n if ($('.ui-autocomplete-multiselect-item').length > 0) {\n $('#LbllocationofInterest').addClass('filled');\n $('#LbllocationofInterest').addClass('focused');\n } else {\n $('#LbllocationofInterest').removeClass('filled');\n $('#LbllocationofInterest').removeClass('focused');\n }\n });\n\n\n $('input#county').focus(function() {\n if ($('.ui-autocomplete-multiselect-item').length > 0) {\n $('#Lblcounty').addClass('filled');\n $('#Lblcounty').addClass('focused');\n } else {\n $('#Lblcounty').removeClass('filled');\n $('#Lblcounty').removeClass('focused');\n }\n });\n $('input#locationofInterest').focus(function() {\n if ($('.ui-autocomplete-multiselect-item').length > 0) {\n $('#LbllocationofInterest').addClass('filled');\n $('#LbllocationofInterest').addClass('focused');\n } else {\n $('#LbllocationofInterest').removeClass('filled');\n $('#LbllocationofInterest').removeClass('focused');\n }\n });\n\n $('#county').focus(function() {\n $('#Lblcounty').addClass('filled');\n $('#Lblcounty').addClass('focused');\n });\n $('#county').blur(function() {\n $('#Lblcounty').addClass('filled');\n $('#Lblcounty').addClass('focused');\n });\n $('#locationofInterest').focus(function() {\n $('#LbllocationofInterest').addClass('filled');\n $('#LbllocationofInterest').addClass('focused');\n });\n $('#locationofInterest').blur(function() {\n $('#LbllocationofInterest').addClass('filled');\n $('#LbllocationofInterest').addClass('focused');\n });\n\n $('select,textarea, .mktoTextField, .mktoEmailField, .mktoTelField').blur(function(e) {\n $label = $(this).parent().find('label');\n if ($(this).val() === \"\") {\n $label.removeClass('filled focused');\n } else {\n $label.removeClass('focused');\n }\n });\n\n });\n\n $(\".mktoButtonWrap\").addClass(\"btn-disable\");\n var regExa = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/;\n\n $(\"input#FirstName, input#LastName,input#Email \").on(\"keyup\", function() {\n if ($(\"input#FirstName\").val() != \"\" && $(\"input#LastName\").val() != \"\" && regExa.test($(\"#Email\").val())) {\n $(\".mktoButtonWrap\").removeClass(\"btn-disable\");\n } else {\n $(\".mktoButtonWrap\").addClass(\"btn-disable\");\n }\n });\n\n form.onSubmit(function() {\n // Get the form field values\n $('.ui-autocomplete-multiselect-item').append(\"<span style='visibility:hidden;'>,</span>\");\n $('input#county').css(\"visibility\", \"hidden\");\n $('input#county').val($('.ui-autocomplete-multiselect-item').text());\n $('input#locationofInterest').css(\"visibility\", \"hidden\");\n $('input#locationofInterest').val($('.ui-autocomplete-multiselect-item').text());\n });\n\n $.prototype.autocomplete && $(function() {\n var availableTags = [\"Autauga County, Alabama \",\"Baldwin County, Alabama \",\"Barbour County, Alabama \",\"Bibb County, Alabama \",\"Blount County, Alabama \",\"Bullock County, Alabama \",\"Butler County, Alabama \",\"Calhoun County, Alabama \",\"Chambers County, Alabama \",\"Cherokee County, Alabama \",\"Chilton County, Alabama \",\"Choctaw County, Alabama \",\"Clarke County, Alabama \",\"Clay County, Alabama \",\"Cleburne County, Alabama \",\"Coffee County, Alabama \",\"Colbert County, Alabama \",\"Conecuh County, Alabama \",\"Coosa County, Alabama \",\"Covington County, Alabama \",\"Crenshaw County, Alabama \",\"Cullman County, Alabama \",\"Dale County, Alabama \",\"Dallas County, Alabama \",\"DeKalb County, Alabama \",\"Elmore County, Alabama \",\"Escambia County, Alabama \",\"Etowah County, Alabama \",\"Fayette County, Alabama \",\"Franklin County, Alabama \",\"Geneva County, Alabama \",\"Greene County, Alabama \",\"Hale County, Alabama \",\"Henry County, Alabama \",\"Houston County, Alabama \",\"Jackson County, Alabama \",\"Jefferson County, Alabama \",\"Lamar County, Alabama \",\"Lauderdale County, Alabama \",\"Lawrence County, Alabama \",\"Lee County, Alabama \",\"Limestone County, Alabama \",\"Lowndes County, Alabama \",\"Macon County, Alabama \",\"Madison County, Alabama \",\"Marengo County, Alabama \",\"Marion County, Alabama \",\"Marshall County, Alabama \",\"Mobile County, Alabama \",\"Monroe County, Alabama \",\"Montgomery County, Alabama \",\"Morgan County, Alabama \",\"Perry County, Alabama \",\"Pickens County, Alabama \",\"Pike County, Alabama \",\"Randolph County, Alabama \",\"Russell County, Alabama \",\"St. Clair County, Alabama \",\"Shelby County, Alabama \",\"Sumter County, Alabama \",\"Talladega County, Alabama \",\"Tallapoosa County, Alabama \",\"Tuscaloosa County, Alabama \",\"Walker County, Alabama \",\"Washington County, Alabama \",\"Wilcox County, Alabama \",\"Winston County, Alabama \",\"Aleutians East Borough, Alaska \",\"Aleutians West Census Area, Alaska \",\"Anchorage, Municipality of, Alaska \",\"Bethel Census Area, Alaska \",\"Bristol Bay Borough, Alaska \",\"Denali Borough, Alaska \",\"Dillingham Census Area, Alaska \",\"Fairbanks North Star Borough, Alaska \",\"Haines Borough, Alaska \",\"Hoonah-Angoon Census Area, Alaska \",\"Juneau, City and Borough, Alaska \",\"Kenai Peninsula Borough, Alaska \",\"Ketchikan Gateway Borough, Alaska \",\"Kodiak Island Borough, Alaska \",\"Lake and Peninsula Borough, Alaska \",\"Matanuska-Susitna Borough, Alaska \",\"Nome Census Area, Alaska \",\"North Slope Borough, Alaska \",\"Northwest Arctic Borough, Alaska \",\"Petersburg Census Area, Alaska \",\"Prince of Wales-Hyder Census Area, Alaska \",\"Sitka, City and Borough of, Alaska \",\"Skagway Borough, Municipality of, Alaska \",\"Southeast Fairbanks Census Area, Alaska \",\"Valdez-Cordova Census Area, Alaska \",\"Wade Hampton Census Area, Alaska \",\"Wrangell, City and Borough of, Alaska \",\"Yakutat, City and Borough of, Alaska \",\"Yukon-Koyukuk Census Area, Alaska \",\"Apache County, Arizona \",\"Cochise County, Arizona \",\"Coconino County, Arizona \",\"Gila County, Arizona \",\"Graham County, Arizona \",\"Greenlee County, Arizona \",\"La Paz County, Arizona \",\"Maricopa County, Arizona \",\"Mohave County, Arizona \",\"Navajo County, Arizona \",\"Pima County, Arizona \",\"Pinal County, Arizona \",\"Santa Cruz County, Arizona \",\"Yavapai County, Arizona \",\"Yuma County, Arizona \",\"Arkansas County, Arkansas \",\"Ashley County, Arkansas \",\"Baxter County, Arkansas \",\"Benton County, Arkansas \",\"Boone County, Arkansas \",\"Bradley County, Arkansas \",\"Calhoun County, Arkansas \",\"Carroll County, Arkansas \",\"Chicot County, Arkansas \",\"Clark County, Arkansas \",\"Clay County, Arkansas \",\"Cleburne County, Arkansas \",\"Cleveland County, Arkansas \",\"Columbia County, Arkansas \",\"Conway County, Arkansas \",\"Craighead County, Arkansas \",\"Crawford County, Arkansas \",\"Crittenden County, Arkansas \",\"Cross County, Arkansas \",\"Dallas County, Arkansas \",\"Desha County, Arkansas \",\"Drew County, Arkansas \",\"Faulkner County, Arkansas \",\"Franklin County, Arkansas \",\"Fulton County, Arkansas \",\"Garland County, Arkansas \",\"Grant County, Arkansas \",\"Greene County, Arkansas \",\"Hempstead County, Arkansas \",\"Hot Spring County, Arkansas \",\"Howard County, Arkansas \",\"Independence County, Arkansas \",\"Izard County, Arkansas \",\"Jackson County, Arkansas \",\"Jefferson County, Arkansas \",\"Johnson County, Arkansas \",\"Lafayette County, Arkansas \",\"Lawrence County, Arkansas \",\"Lee County, Arkansas \",\"Lincoln County, Arkansas \",\"Little River County, Arkansas \",\"Logan County, Arkansas \",\"Lonoke County, Arkansas \",\"Madison County, Arkansas \",\"Marion County, Arkansas \",\"Miller County, Arkansas \",\"Mississippi County, Arkansas \",\"Monroe County, Arkansas \",\"Montgomery County, Arkansas \",\"Nevada County, Arkansas \",\"Newton County, Arkansas \",\"Ouachita County, Arkansas \",\"Perry County, Arkansas \",\"Phillips County, Arkansas \",\"Pike County, Arkansas \",\"Poinsett County, Arkansas \",\"Polk County, Arkansas \",\"Pope County, Arkansas \",\"Prairie County, Arkansas \",\"Pulaski County, Arkansas \",\"Randolph County, Arkansas \",\"St. Francis County, Arkansas \",\"Saline County, Arkansas \",\"Scott County, Arkansas \",\"Searcy County, Arkansas \",\"Sebastian County, Arkansas \",\"Sevier County, Arkansas \",\"Sharp County, Arkansas \",\"Stone County, Arkansas \",\"Union County, Arkansas \",\"Van Buren County, Arkansas \",\"Washington County, Arkansas \",\"White County, Arkansas \",\"Woodruff County, Arkansas \",\"Yell County, Arkansas \",\"Alameda County, California \",\"Alpine County, California \",\"Amador County, California \",\"Butte County, California \",\"Calaveras County, California \",\"Colusa County, California \",\"Contra Costa County, California \",\"Del Norte County, California \",\"El Dorado County, California \",\"Fresno County, California \",\"Glenn County, California \",\"Humboldt County, California \",\"Imperial County, California \",\"Inyo County, California \",\"Kern County, California \",\"Kings County, California \",\"Lake County, California \",\"Lassen County, California \",\"Los Angeles County, California \",\"Madera County, California \",\"Marin County, California \",\"Mariposa County, California \",\"Mendocino County, California \",\"Merced County, California \",\"Modoc County, California \",\"Mono County, California \",\"Monterey County, California \",\"Napa County, California \",\"Nevada County, California \",\"Orange County, California \",\"Placer County, California \",\"Plumas County, California \",\"Riverside County, California \",\"Sacramento County, California \",\"San Benito County, California \",\"San Bernardino County, California \",\"San Diego County, California \",\"San Francisco, City and County of, California \",\"San Joaquin County, California \",\"San Luis Obispo County, California \",\"San Mateo County, California \",\"Santa Barbara County, California \",\"Santa Clara County, California \",\"Santa Cruz County, California \",\"Shasta County, California \",\"Sierra County, California \",\"Siskiyou County, California \",\"Solano County, California \",\"Sonoma County, California \",\"Stanislaus County, California \",\"Sutter County, California \",\"Tehama County, California \",\"Trinity County, California \",\"Tulare County, California \",\"Tuolumne County, California \",\"Ventura County, California \",\"Yolo County, California \",\"Yuba County, California \",\"Adams County, Colorado \",\"Alamosa County, Colorado \",\"Arapahoe County, Colorado \",\"Archuleta County, Colorado \",\"Baca County, Colorado \",\"Bent County, Colorado \",\"Boulder County, Colorado \",\"Broomfield, City and County of, Colorado \",\"Chaffee County, Colorado \",\"Cheyenne County, Colorado \",\"Clear Creek County, Colorado \",\"Conejos County, Colorado \",\"Costilla County, Colorado \",\"Crowley County, Colorado \",\"Custer County, Colorado \",\"Delta County, Colorado \",\"Denver, City and County of, Colorado \",\"Dolores County, Colorado \",\"Douglas County, Colorado \",\"Eagle County, Colorado \",\"Elbert County, Colorado \",\"El Paso County, Colorado \",\"Fremont County, Colorado \",\"Garfield County, Colorado \",\"Gilpin County, Colorado \",\"Grand County, Colorado \",\"Gunnison County, Colorado \",\"Hinsdale County, Colorado \",\"Huerfano County, Colorado \",\"Jackson County, Colorado \",\"Jefferson County, Colorado \",\"Kiowa County, Colorado \",\"Kit Carson County, Colorado \",\"Lake County, Colorado \",\"La Plata County, Colorado \",\"Larimer County, Colorado \",\"Las Animas County, Colorado \",\"Lincoln County, Colorado \",\"Logan County, Colorado \",\"Mesa County, Colorado \",\"Mineral County, Colorado \",\"Moffat County, Colorado \",\"Montezuma County, Colorado \",\"Montrose County, Colorado \",\"Morgan County, Colorado \",\"Otero County, Colorado \",\"Ouray County, Colorado \",\"Park County, Colorado \",\"Phillips County, Colorado \",\"Pitkin County, Colorado \",\"Prowers County, Colorado \",\"Pueblo County, Colorado \",\"Rio Blanco County, Colorado \",\"Rio Grande County, Colorado \",\"Routt County, Colorado \",\"Saguache County, Colorado \",\"San Juan County, Colorado \",\"San Miguel County, Colorado \",\"Sedgwick County, Colorado \",\"Summit County, Colorado \",\"Teller County, Colorado \",\"Washington County, Colorado \",\"Weld County, Colorado \",\"Yuma County, Colorado \",\"Fairfield County, Connecticut \",\"Hartford County, Connecticut \",\"Litchfield County, Connecticut \",\"Middlesex County, Connecticut \",\"New Haven County, Connecticut \",\"New London County, Connecticut \",\"Tolland County, Connecticut \",\"Windham County, Connecticut \",\"Kent County, Delaware \",\"New Castle County, Delaware \",\"Sussex County, Delaware \",\"District of Columbia, District of Columbia \",\"Alachua County, Florida \",\"Baker County, Florida \",\"Bay County, Florida \",\"Bradford County, Florida \",\"Brevard County, Florida \",\"Broward County, Florida \",\"Calhoun County, Florida \",\"Charlotte County, Florida \",\"Citrus County, Florida \",\"Clay County, Florida \",\"Collier County, Florida \",\"Columbia County, Florida \",\"DeSoto County, Florida \",\"Dixie County, Florida \",\"Duval County, Florida \",\"Escambia County, Florida \",\"Flagler County, Florida \",\"Franklin County, Florida \",\"Gadsden County, Florida \",\"Gilchrist County, Florida \",\"Glades County, Florida \",\"Gulf County, Florida \",\"Hamilton County, Florida \",\"Hardee County, Florida \",\"Hendry County, Florida \",\"Hernando County, Florida \",\"Highlands County, Florida \",\"Hillsborough County, Florida \",\"Holmes County, Florida \",\"Indian River County, Florida \",\"Jackson County, Florida \",\"Jefferson County, Florida \",\"Lafayette County, Florida \",\"Lake County, Florida \",\"Lee County, Florida \",\"Leon County, Florida \",\"Levy County, Florida \",\"Liberty County, Florida \",\"Madison County, Florida \",\"Manatee County, Florida \",\"Marion County, Florida \",\"Martin County, Florida \",\"Miami-Dade County, Florida \",\"Monroe County, Florida \",\"Nassau County, Florida \",\"Okaloosa County, Florida \",\"Okeechobee County, Florida \",\"Orange County, Florida \",\"Osceola County, Florida \",\"Palm Beach County, Florida \",\"Pasco County, Florida \",\"Pinellas County, Florida \",\"Polk County, Florida \",\"Putnam County, Florida \",\"St. Johns County, Florida \",\"St. Lucie County, Florida \",\"Santa Rosa County, Florida \",\"Sarasota County, Florida \",\"Seminole County, Florida \",\"Sumter County, Florida \",\"Suwannee County, Florida \",\"Taylor County, Florida \",\"Union County, Florida \",\"Volusia County, Florida \",\"Wakulla County, Florida \",\"Walton County, Florida \",\"Washington County, Florida \",\"Appling County, Georgia \",\"Atkinson County, Georgia \",\"Bacon County, Georgia \",\"Baker County, Georgia \",\"Baldwin County, Georgia \",\"Banks County, Georgia \",\"Barrow County, Georgia \",\"Bartow County, Georgia \",\"Ben Hill County, Georgia \",\"Berrien County, Georgia \",\"Bibb County, Georgia \",\"Bleckley County, Georgia \",\"Brantley County, Georgia \",\"Brooks County, Georgia \",\"Bryan County, Georgia \",\"Bulloch County, Georgia \",\"Burke County, Georgia \",\"Butts County, Georgia \",\"Calhoun County, Georgia \",\"Camden County, Georgia \",\"Candler County, Georgia \",\"Carroll County, Georgia \",\"Catoosa County, Georgia \",\"Charlton County, Georgia \",\"Chatham County, Georgia \",\"Chattahoochee County, Georgia \",\"Chattooga County, Georgia \",\"Cherokee County, Georgia \",\"Clarke County, Georgia \",\"Clay County, Georgia \",\"Clayton County, Georgia \",\"Clinch County, Georgia \",\"Cobb County, Georgia \",\"Coffee County, Georgia \",\"Colquitt County, Georgia \",\"Columbia County, Georgia \",\"Cook County, Georgia \",\"Coweta County, Georgia \",\"Crawford County, Georgia \",\"Crisp County, Georgia \",\"Dade County, Georgia \",\"Dawson County, Georgia \",\"Decatur County, Georgia \",\"DeKalb County, Georgia \",\"Dodge County, Georgia \",\"Dooly County, Georgia \",\"Dougherty County, Georgia \",\"Douglas County, Georgia \",\"Early County, Georgia \",\"Echols County, Georgia \",\"Effingham County, Georgia \",\"Elbert County, Georgia \",\"Emanuel County, Georgia \",\"Evans County, Georgia \",\"Fannin County, Georgia \",\"Fayette County, Georgia \",\"Floyd County, Georgia \",\"Forsyth County, Georgia \",\"Franklin County, Georgia \",\"Fulton County, Georgia \",\"Gilmer County, Georgia \",\"Glascock County, Georgia \",\"Glynn County, Georgia \",\"Gordon County, Georgia \",\"Grady County, Georgia \",\"Greene County, Georgia \",\"Gwinnett County, Georgia \",\"Habersham County, Georgia \",\"Hall County, Georgia \",\"Hancock County, Georgia \",\"Haralson County, Georgia \",\"Harris County, Georgia \",\"Hart County, Georgia \",\"Heard County, Georgia \",\"Henry County, Georgia \",\"Houston County, Georgia \",\"Irwin County, Georgia \",\"Jackson County, Georgia \",\"Jasper County, Georgia \",\"Jeff Davis County, Georgia \",\"Jefferson County, Georgia \",\"Jenkins County, Georgia \",\"Johnson County, Georgia \",\"Jones County, Georgia \",\"Lamar County, Georgia \",\"Lanier County, Georgia \",\"Laurens County, Georgia \",\"Lee County, Georgia \",\"Liberty County, Georgia \",\"Lincoln County, Georgia \",\"Long County, Georgia \",\"Lowndes County, Georgia \",\"Lumpkin County, Georgia \",\"McDuffie County, Georgia \",\"McIntosh County, Georgia \",\"Macon County, Georgia \",\"Madison County, Georgia \",\"Marion County, Georgia \",\"Meriwether County, Georgia \",\"Miller County, Georgia \",\"Mitchell County, Georgia \",\"Monroe County, Georgia \",\"Montgomery County, Georgia \",\"Morgan County, Georgia \",\"Murray County, Georgia \",\"Muscogee County, Georgia \",\"Newton County, Georgia \",\"Oconee County, Georgia \",\"Oglethorpe County, Georgia \",\"Paulding County, Georgia \",\"Peach County, Georgia \",\"Pickens County, Georgia \",\"Pierce County, Georgia \",\"Pike County, Georgia \",\"Polk County, Georgia \",\"Pulaski County, Georgia \",\"Putnam County, Georgia \",\"Quitman County, Georgia \",\"Rabun County, Georgia \",\"Randolph County, Georgia \",\"Richmond County, Georgia \",\"Rockdale County, Georgia \",\"Schley County, Georgia \",\"Screven County, Georgia \",\"Seminole County, Georgia \",\"Spalding County, Georgia \",\"Stephens County, Georgia \",\"Stewart County, Georgia \",\"Sumter County, Georgia \",\"Talbot County, Georgia \",\"Taliaferro County, Georgia \",\"Tattnall County, Georgia \",\"Taylor County, Georgia \",\"Telfair County, Georgia \",\"Terrell County, Georgia \",\"Thomas County, Georgia \",\"Tift County, Georgia \",\"Toombs County, Georgia \",\"Towns County, Georgia \",\"Treutlen County, Georgia \",\"Troup County, Georgia \",\"Turner County, Georgia \",\"Twiggs County, Georgia \",\"Union County, Georgia \",\"Upson County, Georgia \",\"Walker County, Georgia \",\"Walton County, Georgia \",\"Ware County, Georgia \",\"Warren County, Georgia \",\"Washington County, Georgia \",\"Wayne County, Georgia \",\"Webster County, Georgia \",\"Wheeler County, Georgia \",\"White County, Georgia \",\"Whitfield County, Georgia \",\"Wilcox County, Georgia \",\"Wilkes County, Georgia \",\"Wilkinson County, Georgia \",\"Worth County, Georgia \",\"Hawaii County, Hawai?i \",\"Honolulu, City and County of, Hawai?i \",\"Kalawao County, Hawai?i \",\"Kauai County, Hawai?i \",\"Maui County, Hawai?i \",\"Ada County, Idaho \",\"Adams County, Idaho \",\"Bannock County, Idaho \",\"Bear Lake County, Idaho \",\"Benewah County, Idaho \",\"Bingham County, Idaho \",\"Blaine County, Idaho \",\"Boise County, Idaho \",\"Bonner County, Idaho \",\"Bonneville County, Idaho \",\"Boundary County, Idaho \",\"Butte County, Idaho \",\"Camas County, Idaho \",\"Canyon County, Idaho \",\"Caribou County, Idaho \",\"Cassia County, Idaho \",\"Clark County, Idaho \",\"Clearwater County, Idaho \",\"Custer County, Idaho \",\"Elmore County, Idaho \",\"Franklin County, Idaho \",\"Fremont County, Idaho \",\"Gem County, Idaho \",\"Gooding County, Idaho \",\"Idaho County, Idaho \",\"Jefferson County, Idaho \",\"Jerome County, Idaho \",\"Kootenai County, Idaho \",\"Latah County, Idaho \",\"Lemhi County, Idaho \",\"Lewis County, Idaho \",\"Lincoln County, Idaho \",\"Madison County, Idaho \",\"Minidoka County, Idaho \",\"Nez Perce County, Idaho \",\"Oneida County, Idaho \",\"Owyhee County, Idaho \",\"Payette County, Idaho \",\"Power County, Idaho \",\"Shoshone County, Idaho \",\"Teton County, Idaho \",\"Twin Falls County, Idaho \",\"Valley County, Idaho \",\"Washington County, Idaho \",\"Adams County, Illinois \",\"Alexander County, Illinois \",\"Bond County, Illinois \",\"Boone County, Illinois \",\"Brown County, Illinois \",\"Bureau County, Illinois \",\"Calhoun County, Illinois \",\"Carroll County, Illinois \",\"Cass County, Illinois \",\"Champaign County, Illinois \",\"Christian County, Illinois \",\"Clark County, Illinois \",\"Clay County, Illinois \",\"Clinton County, Illinois \",\"Coles County, Illinois \",\"Cook County, Illinois \",\"Crawford County, Illinois \",\"Cumberland County, Illinois \",\"DeKalb County, Illinois \",\"De Witt County, Illinois \",\"Douglas County, Illinois \",\"DuPage County, Illinois \",\"Edgar County, Illinois \",\"Edwards County, Illinois \",\"Effingham County, Illinois \",\"Fayette County, Illinois \",\"Ford County, Illinois \",\"Franklin County, Illinois \",\"Fulton County, Illinois \",\"Gallatin County, Illinois \",\"Greene County, Illinois \",\"Grundy County, Illinois \",\"Hamilton County, Illinois \",\"Hancock County, Illinois \",\"Hardin County, Illinois \",\"Henderson County, Illinois \",\"Henry County, Illinois \",\"Iroquois County, Illinois \",\"Jackson County, Illinois \",\"Jasper County, Illinois \",\"Jefferson County, Illinois \",\"Jersey County, Illinois \",\"Jo Daviess County, Illinois \",\"Johnson County, Illinois \",\"Kane County, Illinois \",\"Kankakee County, Illinois \",\"Kendall County, Illinois \",\"Knox County, Illinois \",\"Lake County, Illinois \",\"LaSalle County, Illinois \",\"Lawrence County, Illinois \",\"Lee County, Illinois \",\"Livingston County, Illinois \",\"Logan County, Illinois \",\"McDonough County, Illinois \",\"McHenry County, Illinois \",\"McLean County, Illinois \",\"Macon County, Illinois \",\"Macoupin County, Illinois \",\"Madison County, Illinois \",\"Marion County, Illinois \",\"Marshall County, Illinois \",\"Mason County, Illinois \",\"Massac County, Illinois \",\"Menard County, Illinois \",\"Mercer County, Illinois \",\"Monroe County, Illinois \",\"Montgomery County, Illinois \",\"Morgan County, Illinois \",\"Moultrie County, Illinois \",\"Ogle County, Illinois \",\"Peoria County, Illinois \",\"Perry County, Illinois \",\"Piatt County, Illinois \",\"Pike County, Illinois \",\"Pope County, Illinois \",\"Pulaski County, Illinois \",\"Putnam County, Illinois \",\"Randolph County, Illinois \",\"Richland County, Illinois \",\"Rock Island County, Illinois \",\"St. Clair County, Illinois \",\"Saline County, Illinois \",\"Sangamon County, Illinois \",\"Schuyler County, Illinois \",\"Scott County, Illinois \",\"Shelby County, Illinois \",\"Stark County, Illinois \",\"Stephenson County, Illinois \",\"Tazewell County, Illinois \",\"Union County, Illinois \",\"Vermilion County, Illinois \",\"Wabash County, Illinois \",\"Warren County, Illinois \",\"Washington County, Illinois \",\"Wayne County, Illinois \",\"White County, Illinois \",\"Whiteside County, Illinois \",\"Will County, Illinois \",\"Williamson County, Illinois \",\"Winnebago County, Illinois \",\"Woodford County, Illinois \",\"Adams County, Indiana \",\"Allen County, Indiana \",\"Bartholomew County, Indiana \",\"Benton County, Indiana \",\"Blackford County, Indiana \",\"Boone County, Indiana \",\"Brown County, Indiana \",\"Carroll County, Indiana \",\"Cass County, Indiana \",\"Clark County, Indiana \",\"Clay County, Indiana \",\"Clinton County, Indiana \",\"Crawford County, Indiana \",\"Daviess County, Indiana \",\"Dearborn County, Indiana \",\"Decatur County, Indiana \",\"DeKalb County, Indiana \",\"Delaware County, Indiana \",\"Dubois County, Indiana \",\"Elkhart County, Indiana \",\"Fayette County, Indiana \",\"Floyd County, Indiana \",\"Fountain County, Indiana \",\"Franklin County, Indiana \",\"Fulton County, Indiana \",\"Gibson County, Indiana \",\"Grant County, Indiana \",\"Greene County, Indiana \",\"Hamilton County, Indiana \",\"Hancock County, Indiana \",\"Harrison County, Indiana \",\"Hendricks County, Indiana \",\"Henry County, Indiana \",\"Howard County, Indiana \",\"Huntington County, Indiana \",\"Jackson County, Indiana \",\"Jasper County, Indiana \",\"Jay County, Indiana \",\"Jefferson County, Indiana \",\"Jennings County, Indiana \",\"Johnson County, Indiana \",\"Knox County, Indiana \",\"Kosciusko County, Indiana \",\"LaGrange County, Indiana \",\"Lake County, Indiana \",\"LaPorte County, Indiana \",\"Lawrence County, Indiana \",\"Madison County, Indiana \",\"Marion County, Indiana \",\"Marshall County, Indiana \",\"Martin County, Indiana \",\"Miami County, Indiana \",\"Monroe County, Indiana \",\"Montgomery County, Indiana \",\"Morgan County, Indiana \",\"Newton County, Indiana \",\"Noble County, Indiana \",\"Ohio County, Indiana \",\"Orange County, Indiana \",\"Owen County, Indiana \",\"Parke County, Indiana \",\"Perry County, Indiana \",\"Pike County, Indiana \",\"Porter County, Indiana \",\"Posey County, Indiana \",\"Pulaski County, Indiana \",\"Putnam County, Indiana \",\"Randolph County, Indiana \",\"Ripley County, Indiana \",\"Rush County, Indiana \",\"St. Joseph County, Indiana \",\"Scott County, Indiana \",\"Shelby County, Indiana \",\"Spencer County, Indiana \",\"Starke County, Indiana \",\"Steuben County, Indiana \",\"Sullivan County, Indiana \",\"Switzerland County, Indiana \",\"Tippecanoe County, Indiana \",\"Tipton County, Indiana \",\"Union County, Indiana \",\"Vanderburgh County, Indiana \",\"Vermillion County, Indiana \",\"Vigo County, Indiana \",\"Wabash County, Indiana \",\"Warren County, Indiana \",\"Warrick County, Indiana \",\"Washington County, Indiana \",\"Wayne County, Indiana \",\"Wells County, Indiana \",\"White County, Indiana \",\"Whitley County, Indiana \",\"Adair County, Iowa \",\"Adams County, Iowa \",\"Allamakee County, Iowa \",\"Appanoose County, Iowa \",\"Audubon County, Iowa \",\"Benton County, Iowa \",\"Black Hawk County, Iowa \",\"Boone County, Iowa \",\"Bremer County, Iowa \",\"Buchanan County, Iowa \",\"Buena Vista County, Iowa \",\"Butler County, Iowa \",\"Calhoun County, Iowa \",\"Carroll County, Iowa \",\"Cass County, Iowa \",\"Cedar County, Iowa \",\"Cerro Gordo County, Iowa \",\"Cherokee County, Iowa \",\"Chickasaw County, Iowa \",\"Clarke County, Iowa \",\"Clay County, Iowa \",\"Clayton County, Iowa \",\"Clinton County, Iowa \",\"Crawford County, Iowa \",\"Dallas County, Iowa \",\"Davis County, Iowa \",\"Decatur County, Iowa \",\"Delaware County, Iowa \",\"Des Moines County, Iowa \",\"Dickinson County, Iowa \",\"Dubuque County, Iowa \",\"Emmet County, Iowa \",\"Fayette County, Iowa \",\"Floyd County, Iowa \",\"Franklin County, Iowa \",\"Fremont County, Iowa \",\"Greene County, Iowa \",\"Grundy County, Iowa \",\"Guthrie County, Iowa \",\"Hamilton County, Iowa \",\"Hancock County, Iowa \",\"Hardin County, Iowa \",\"Harrison County, Iowa \",\"Henry County, Iowa \",\"Howard County, Iowa \",\"Humboldt County, Iowa \",\"Ida County, Iowa \",\"Iowa County, Iowa \",\"Jackson County, Iowa \",\"Jasper County, Iowa \",\"Jefferson County, Iowa \",\"Johnson County, Iowa \",\"Jones County, Iowa \",\"Keokuk County, Iowa \",\"Kossuth County, Iowa \",\"Lee County, Iowa \",\"Linn County, Iowa \",\"Louisa County, Iowa \",\"Lucas County, Iowa \",\"Lyon County, Iowa \",\"Madison County, Iowa \",\"Mahaska County, Iowa \",\"Marion County, Iowa \",\"Marshall County, Iowa \",\"Mills County, Iowa \",\"Mitchell County, Iowa \",\"Monona County, Iowa \",\"Monroe County, Iowa \",\"Montgomery County, Iowa \",\"Muscatine County, Iowa \",\"O'Brien County, Iowa \",\"Osceola County, Iowa \",\"Page County, Iowa \",\"Palo Alto County, Iowa \",\"Plymouth County, Iowa \",\"Pocahontas County, Iowa \",\"Polk County, Iowa \",\"Pottawattamie County, Iowa \",\"Poweshiek County, Iowa \",\"Ringgold County, Iowa \",\"Sac County, Iowa \",\"Scott County, Iowa \",\"Shelby County, Iowa \",\"Sioux County, Iowa \",\"Story County, Iowa \",\"Tama County, Iowa \",\"Taylor County, Iowa \",\"Union County, Iowa \",\"Van Buren County, Iowa \",\"Wapello County, Iowa \",\"Warren County, Iowa \",\"Washington County, Iowa \",\"Wayne County, Iowa \",\"Webster County, Iowa \",\"Winnebago County, Iowa \",\"Winneshiek County, Iowa \",\"Woodbury County, Iowa \",\"Worth County, Iowa \",\"Wright County, Iowa \",\"Allen County, Kansas \",\"Anderson County, Kansas \",\"Atchison County, Kansas \",\"Barber County, Kansas \",\"Barton County, Kansas \",\"Bourbon County, Kansas \",\"Brown County, Kansas \",\"Butler County, Kansas \",\"Chase County, Kansas \",\"Chautauqua County, Kansas \",\"Cherokee County, Kansas \",\"Cheyenne County, Kansas \",\"Clark County, Kansas \",\"Clay County, Kansas \",\"Cloud County, Kansas \",\"Coffey County, Kansas \",\"Comanche County, Kansas \",\"Cowley County, Kansas \",\"Crawford County, Kansas \",\"Decatur County, Kansas \",\"Dickinson County, Kansas \",\"Doniphan County, Kansas \",\"Douglas County, Kansas \",\"Edwards County, Kansas \",\"Elk County, Kansas \",\"Ellis County, Kansas \",\"Ellsworth County, Kansas \",\"Finney County, Kansas \",\"Ford County, Kansas \",\"Franklin County, Kansas \",\"Geary County, Kansas \",\"Gove County, Kansas \",\"Graham County, Kansas \",\"Grant County, Kansas \",\"Gray County, Kansas \",\"Greeley County, Kansas \",\"Greenwood County, Kansas \",\"Hamilton County, Kansas \",\"Harper County, Kansas \",\"Harvey County, Kansas \",\"Haskell County, Kansas \",\"Hodgeman County, Kansas \",\"Jackson County, Kansas \",\"Jefferson County, Kansas \",\"Jewell County, Kansas \",\"Johnson County, Kansas \",\"Kearny County, Kansas \",\"Kingman County, Kansas \",\"Kiowa County, Kansas \",\"Labette County, Kansas \",\"Lane County, Kansas \",\"Leavenworth County, Kansas \",\"Lincoln County, Kansas \",\"Linn County, Kansas \",\"Logan County, Kansas \",\"Lyon County, Kansas \",\"McPherson County, Kansas \",\"Marion County, Kansas \",\"Marshall County, Kansas \",\"Meade County, Kansas \",\"Miami County, Kansas \",\"Mitchell County, Kansas \",\"Montgomery County, Kansas \",\"Morris County, Kansas \",\"Morton County, Kansas \",\"Nemaha County, Kansas \",\"Neosho County, Kansas \",\"Ness County, Kansas \",\"Norton County, Kansas \",\"Osage County, Kansas \",\"Osborne County, Kansas \",\"Ottawa County, Kansas \",\"Pawnee County, Kansas \",\"Phillips County, Kansas \",\"Pottawatomie County, Kansas \",\"Pratt County, Kansas \",\"Rawlins County, Kansas \",\"Reno County, Kansas \",\"Republic County, Kansas \",\"Rice County, Kansas \",\"Riley County, Kansas \",\"Rooks County, Kansas \",\"Rush County, Kansas \",\"Russell County, Kansas \",\"Saline County, Kansas \",\"Scott County, Kansas \",\"Sedgwick County, Kansas \",\"Seward County, Kansas \",\"Shawnee County, Kansas \",\"Sheridan County, Kansas \",\"Sherman County, Kansas \",\"Smith County, Kansas \",\"Stafford County, Kansas \",\"Stanton County, Kansas \",\"Stevens County, Kansas \",\"Sumner County, Kansas \",\"Thomas County, Kansas \",\"Trego County, Kansas \",\"Wabaunsee County, Kansas \",\"Wallace County, Kansas \",\"Washington County, Kansas \",\"Wichita County, Kansas \",\"Wilson County, Kansas \",\"Woodson County, Kansas \",\"Wyandotte County, Kansas \",\"Adair County, Kentucky \",\"Allen County, Kentucky \",\"Anderson County, Kentucky \",\"Ballard County, Kentucky \",\"Barren County, Kentucky \",\"Bath County, Kentucky \",\"Bell County, Kentucky \",\"Boone County, Kentucky \",\"Bourbon County, Kentucky \",\"Boyd County, Kentucky \",\"Boyle County, Kentucky \",\"Bracken County, Kentucky \",\"Breathitt County, Kentucky \",\"Breckinridge County, Kentucky \",\"Bullitt County, Kentucky \",\"Butler County, Kentucky \",\"Caldwell County, Kentucky \",\"Calloway County, Kentucky \",\"Campbell County, Kentucky \",\"Carlisle County, Kentucky \",\"Carroll County, Kentucky \",\"Carter County, Kentucky \",\"Casey County, Kentucky \",\"Christian County, Kentucky \",\"Clark County, Kentucky \",\"Clay County, Kentucky \",\"Clinton County, Kentucky \",\"Crittenden County, Kentucky \",\"Cumberland County, Kentucky \",\"Daviess County, Kentucky \",\"Edmonson County, Kentucky \",\"Elliott County, Kentucky \",\"Estill County, Kentucky \",\"Fayette County, Kentucky \",\"Fleming County, Kentucky \",\"Floyd County, Kentucky \",\"Franklin County, Kentucky \",\"Fulton County, Kentucky \",\"Gallatin County, Kentucky \",\"Garrard County, Kentucky \",\"Grant County, Kentucky \",\"Graves County, Kentucky \",\"Grayson County, Kentucky \",\"Green County, Kentucky \",\"Greenup County, Kentucky \",\"Hancock County, Kentucky \",\"Hardin County, Kentucky \",\"Harlan County, Kentucky \",\"Harrison County, Kentucky \",\"Hart County, Kentucky \",\"Henderson County, Kentucky \",\"Henry County, Kentucky \",\"Hickman County, Kentucky \",\"Hopkins County, Kentucky \",\"Jackson County, Kentucky \",\"Jefferson County, Kentucky \",\"Jessamine County, Kentucky \",\"Johnson County, Kentucky \",\"Kenton County, Kentucky \",\"Knott County, Kentucky \",\"Knox County, Kentucky \",\"Larue County, Kentucky \",\"Laurel County, Kentucky \",\"Lawrence County, Kentucky \",\"Lee County, Kentucky \",\"Leslie County, Kentucky \",\"Letcher County, Kentucky \",\"Lewis County, Kentucky \",\"Lincoln County, Kentucky \",\"Livingston County, Kentucky \",\"Logan County, Kentucky \",\"Lyon County, Kentucky \",\"McCracken County, Kentucky \",\"McCreary County, Kentucky \",\"McLean County, Kentucky \",\"Madison County, Kentucky \",\"Magoffin County, Kentucky \",\"Marion County, Kentucky \",\"Marshall County, Kentucky \",\"Martin County, Kentucky \",\"Mason County, Kentucky \",\"Meade County, Kentucky \",\"Menifee County, Kentucky \",\"Mercer County, Kentucky \",\"Metcalfe County, Kentucky \",\"Monroe County, Kentucky \",\"Montgomery County, Kentucky \",\"Morgan County, Kentucky \",\"Muhlenberg County, Kentucky \",\"Nelson County, Kentucky \",\"Nicholas County, Kentucky \",\"Ohio County, Kentucky \",\"Oldham County, Kentucky \",\"Owen County, Kentucky \",\"Owsley County, Kentucky \",\"Pendleton County, Kentucky \",\"Perry County, Kentucky \",\"Pike County, Kentucky \",\"Powell County, Kentucky \",\"Pulaski County, Kentucky \",\"Robertson County, Kentucky \",\"Rockcastle County, Kentucky \",\"Rowan County, Kentucky \",\"Russell County, Kentucky \",\"Scott County, Kentucky \",\"Shelby County, Kentucky \",\"Simpson County, Kentucky \",\"Spencer County, Kentucky \",\"Taylor County, Kentucky \",\"Todd County, Kentucky \",\"Trigg County, Kentucky \",\"Trimble County, Kentucky \",\"Union County, Kentucky \",\"Warren County, Kentucky \",\"Washington County, Kentucky \",\"Wayne County, Kentucky \",\"Webster County, Kentucky \",\"Whitley County, Kentucky \",\"Wolfe County, Kentucky \",\"Woodford County, Kentucky \",\"Acadia Parish, Louisiana \",\"Allen Parish, Louisiana \",\"Ascension Parish, Louisiana \",\"Assumption Parish, Louisiana \",\"Avoyelles Parish, Louisiana \",\"Beauregard Parish, Louisiana \",\"Bienville Parish, Louisiana \",\"Bossier Parish, Louisiana \",\"Caddo Parish, Louisiana \",\"Calcasieu Parish, Louisiana \",\"Caldwell Parish, Louisiana \",\"Cameron Parish, Louisiana \",\"Catahoula Parish, Louisiana \",\"Claiborne Parish, Louisiana \",\"Concordia Parish, Louisiana \",\"De Soto Parish, Louisiana \",\"East Baton Rouge Parish, Louisiana \",\"East Carroll Parish, Louisiana \",\"East Feliciana Parish, Louisiana \",\"Evangeline Parish, Louisiana \",\"Franklin Parish, Louisiana \",\"Grant Parish, Louisiana \",\"Iberia Parish, Louisiana \",\"Iberville Parish, Louisiana \",\"Jackson Parish, Louisiana \",\"Jefferson Parish, Louisiana \",\"Jefferson Davis Parish, Louisiana \",\"Lafayette Parish, Louisiana \",\"Lafourche Parish, Louisiana \",\"LaSalle Parish, Louisiana \",\"Lincoln Parish, Louisiana \",\"Livingston Parish, Louisiana \",\"Madison Parish, Louisiana \",\"Morehouse Parish, Louisiana \",\"Natchitoches Parish, Louisiana \",\"Orleans Parish, Louisiana \",\"Ouachita Parish, Louisiana \",\"Plaquemines Parish, Louisiana \",\"Pointe Coupee Parish, Louisiana \",\"Rapides Parish, Louisiana \",\"Red River Parish, Louisiana \",\"Richland Parish, Louisiana \",\"Sabine Parish, Louisiana \",\"St. Bernard Parish, Louisiana \",\"St. Charles Parish, Louisiana \",\"St. Helena Parish, Louisiana \",\"St. James Parish, Louisiana \",\"St. John the Baptist Parish, Louisiana \",\"St. Landry Parish, Louisiana \",\"St. Martin Parish, Louisiana \",\"St. Mary Parish, Louisiana \",\"St. Tammany Parish, Louisiana \",\"Tangipahoa Parish, Louisiana \",\"Tensas Parish, Louisiana \",\"Terrebonne Parish, Louisiana \",\"Union Parish, Louisiana \",\"Vermilion Parish, Louisiana \",\"Vernon Parish, Louisiana \",\"Washington Parish, Louisiana \",\"Webster Parish, Louisiana \",\"West Baton Rouge Parish, Louisiana \",\"West Carroll Parish, Louisiana \",\"West Feliciana Parish, Louisiana \",\"Winn Parish, Louisiana \",\"Androscoggin County, Maine \",\"Aroostook County, Maine \",\"Cumberland County, Maine \",\"Franklin County, Maine \",\"Hancock County, Maine \",\"Kennebec County, Maine \",\"Knox County, Maine \",\"Lincoln County, Maine \",\"Oxford County, Maine \",\"Penobscot County, Maine \",\"Piscataquis County, Maine \",\"Sagadahoc County, Maine \",\"Somerset County, Maine \",\"Waldo County, Maine \",\"Washington County, Maine \",\"York County, Maine \",\"Allegany County, Maryland \",\"Anne Arundel County, Maryland \",\"Baltimore County, Maryland \",\"Calvert County, Maryland \",\"Caroline County, Maryland \",\"Carroll County, Maryland \",\"Cecil County, Maryland \",\"Charles County, Maryland \",\"Dorchester County, Maryland \",\"Frederick County, Maryland \",\"Garrett County, Maryland \",\"Harford County, Maryland \",\"Howard County, Maryland \",\"Kent County, Maryland \",\"Montgomery County, Maryland \",\"Prince George's County, Maryland \",\"Queen Anne's County, Maryland \",\"St. Mary's County, Maryland \",\"Somerset County, Maryland \",\"Talbot County, Maryland \",\"Washington County, Maryland \",\"Wicomico County, Maryland \",\"Worcester County, Maryland \",\"Baltimore, City of, Maryland \",\"Barnstable County, Massachusetts \",\"Berkshire County, Massachusetts \",\"Bristol County, Massachusetts \",\"Dukes County, Massachusetts \",\"Essex County, Massachusetts \",\"Franklin County, Massachusetts \",\"Hampden County, Massachusetts \",\"Hampshire County, Massachusetts \",\"Middlesex County, Massachusetts \",\"Nantucket, Town and County of, Massachusetts \",\"Norfolk County, Massachusetts \",\"Plymouth County, Massachusetts \",\"Suffolk County, Massachusetts \",\"Worcester County, Massachusetts \",\"Alcona County, Michigan \",\"Alger County, Michigan \",\"Allegan County, Michigan \",\"Alpena County, Michigan \",\"Antrim County, Michigan \",\"Arenac County, Michigan \",\"Baraga County, Michigan \",\"Barry County, Michigan \",\"Bay County, Michigan \",\"Benzie County, Michigan \",\"Berrien County, Michigan \",\"Branch County, Michigan \",\"Calhoun County, Michigan \",\"Cass County, Michigan \",\"Charlevoix County, Michigan \",\"Cheboygan County, Michigan \",\"Chippewa County, Michigan \",\"Clare County, Michigan \",\"Clinton County, Michigan \",\"Crawford County, Michigan \",\"Delta County, Michigan \",\"Dickinson County, Michigan \",\"Eaton County, Michigan \",\"Emmet County, Michigan \",\"Genesee County, Michigan \",\"Gladwin County, Michigan \",\"Gogebic County, Michigan \",\"Grand Traverse County, Michigan \",\"Gratiot County, Michigan \",\"Hillsdale County, Michigan \",\"Houghton County, Michigan \",\"Huron County, Michigan \",\"Ingham County, Michigan \",\"Ionia County, Michigan \",\"Iosco County, Michigan \",\"Iron County, Michigan \",\"Isabella County, Michigan \",\"Jackson County, Michigan \",\"Kalamazoo County, Michigan \",\"Kalkaska County, Michigan \",\"Kent County, Michigan \",\"Keweenaw County, Michigan \",\"Lake County, Michigan \",\"Lapeer County, Michigan \",\"Leelanau County, Michigan \",\"Lenawee County, Michigan \",\"Livingston County, Michigan \",\"Luce County, Michigan \",\"Mackinac County, Michigan \",\"Macomb County, Michigan \",\"Manistee County, Michigan \",\"Marquette County, Michigan \",\"Mason County, Michigan \",\"Mecosta County, Michigan \",\"Menominee County, Michigan \",\"Midland County, Michigan \",\"Missaukee County, Michigan \",\"Monroe County, Michigan \",\"Montcalm County, Michigan \",\"Montmorency County, Michigan \",\"Muskegon County, Michigan \",\"Newaygo County, Michigan \",\"Oakland County, Michigan \",\"Oceana County, Michigan \",\"Ogemaw County, Michigan \",\"Ontonagon County, Michigan \",\"Osceola County, Michigan \",\"Oscoda County, Michigan \",\"Otsego County, Michigan \",\"Ottawa County, Michigan \",\"Presque Isle County, Michigan \",\"Roscommon County, Michigan \",\"Saginaw County, Michigan \",\"St. Clair County, Michigan \",\"St. Joseph County, Michigan \",\"Sanilac County, Michigan \",\"Schoolcraft County, Michigan \",\"Shiawassee County, Michigan \",\"Tuscola County, Michigan \",\"Van Buren County, Michigan \",\"Washtenaw County, Michigan \",\"Wayne County, Michigan \",\"Wexford County, Michigan \",\"Aitkin County, Minnesota \",\"Anoka County, Minnesota \",\"Becker County, Minnesota \",\"Beltrami County, Minnesota \",\"Benton County, Minnesota \",\"Big Stone County, Minnesota \",\"Blue Earth County, Minnesota \",\"Brown County, Minnesota \",\"Carlton County, Minnesota \",\"Carver County, Minnesota \",\"Cass County, Minnesota \",\"Chippewa County, Minnesota \",\"Chisago County, Minnesota \",\"Clay County, Minnesota \",\"Clearwater County, Minnesota \",\"Cook County, Minnesota \",\"Cottonwood County, Minnesota \",\"Crow Wing County, Minnesota \",\"Dakota County, Minnesota \",\"Dodge County, Minnesota \",\"Douglas County, Minnesota \",\"Faribault County, Minnesota \",\"Fillmore County, Minnesota \",\"Freeborn County, Minnesota \",\"Goodhue County, Minnesota \",\"Grant County, Minnesota \",\"Hennepin County, Minnesota \",\"Houston County, Minnesota \",\"Hubbard County, Minnesota \",\"Isanti County, Minnesota \",\"Itasca County, Minnesota \",\"Jackson County, Minnesota \",\"Kanabec County, Minnesota \",\"Kandiyohi County, Minnesota \",\"Kittson County, Minnesota \",\"Koochiching County, Minnesota \",\"Lac qui Parle County, Minnesota \",\"Lake County, Minnesota \",\"Lake of the Woods County, Minnesota \",\"Le Sueur County, Minnesota \",\"Lincoln County, Minnesota \",\"Lyon County, Minnesota \",\"McLeod County, Minnesota \",\"Mahnomen County, Minnesota \",\"Marshall County, Minnesota \",\"Martin County, Minnesota \",\"Meeker County, Minnesota \",\"Mille Lacs County, Minnesota \",\"Morrison County, Minnesota \",\"Mower County, Minnesota \",\"Murray County, Minnesota \",\"Nicollet County, Minnesota \",\"Nobles County, Minnesota \",\"Norman County, Minnesota \",\"Olmsted County, Minnesota \",\"Otter Tail County, Minnesota \",\"Pennington County, Minnesota \",\"Pine County, Minnesota \",\"Pipestone County, Minnesota \",\"Polk County, Minnesota \",\"Pope County, Minnesota \",\"Ramsey County, Minnesota \",\"Red Lake County, Minnesota \",\"Redwood County, Minnesota \",\"Renville County, Minnesota \",\"Rice County, Minnesota \",\"Rock County, Minnesota \",\"Roseau County, Minnesota \",\"St. Louis County, Minnesota \",\"Scott County, Minnesota \",\"Sherburne County, Minnesota \",\"Sibley County, Minnesota \",\"Stearns County, Minnesota \",\"Steele County, Minnesota \",\"Stevens County, Minnesota \",\"Swift County, Minnesota \",\"Todd County, Minnesota \",\"Traverse County, Minnesota \",\"Wabasha County, Minnesota \",\"Wadena County, Minnesota \",\"Waseca County, Minnesota \",\"Washington County, Minnesota \",\"Watonwan County, Minnesota \",\"Wilkin County, Minnesota \",\"Winona County, Minnesota \",\"Wright County, Minnesota \",\"Yellow Medicine County, Minnesota \",\"Adams County, Mississippi \",\"Alcorn County, Mississippi \",\"Amite County, Mississippi \",\"Attala County, Mississippi \",\"Benton County, Mississippi \",\"Bolivar County, Mississippi \",\"Calhoun County, Mississippi \",\"Carroll County, Mississippi \",\"Chickasaw County, Mississippi \",\"Choctaw County, Mississippi \",\"Claiborne County, Mississippi \",\"Clarke County, Mississippi \",\"Clay County, Mississippi \",\"Coahoma County, Mississippi \",\"Copiah County, Mississippi \",\"Covington County, Mississippi \",\"DeSoto County, Mississippi \",\"Forrest County, Mississippi \",\"Franklin County, Mississippi \",\"George County, Mississippi \",\"Greene County, Mississippi \",\"Grenada County, Mississippi \",\"Hancock County, Mississippi \",\"Harrison County, Mississippi \",\"Hinds County, Mississippi \",\"Holmes County, Mississippi \",\"Humphreys County, Mississippi \",\"Issaquena County, Mississippi \",\"Itawamba County, Mississippi \",\"Jackson County, Mississippi \",\"Jasper County, Mississippi \",\"Jefferson County, Mississippi \",\"Jefferson Davis County, Mississippi \",\"Jones County, Mississippi \",\"Kemper County, Mississippi \",\"Lafayette County, Mississippi \",\"Lamar County, Mississippi \",\"Lauderdale County, Mississippi \",\"Lawrence County, Mississippi \",\"Leake County, Mississippi \",\"Lee County, Mississippi \",\"Leflore County, Mississippi \",\"Lincoln County, Mississippi \",\"Lowndes County, Mississippi \",\"Madison County, Mississippi \",\"Marion County, Mississippi \",\"Marshall County, Mississippi \",\"Monroe County, Mississippi \",\"Montgomery County, Mississippi \",\"Neshoba County, Mississippi \",\"Newton County, Mississippi \",\"Noxubee County, Mississippi \",\"Oktibbeha County, Mississippi \",\"Panola County, Mississippi \",\"Pearl River County, Mississippi \",\"Perry County, Mississippi \",\"Pike County, Mississippi \",\"Pontotoc County, Mississippi \",\"Prentiss County, Mississippi \",\"Quitman County, Mississippi \",\"Rankin County, Mississippi \",\"Scott County, Mississippi \",\"Sharkey County, Mississippi \",\"Simpson County, Mississippi \",\"Smith County, Mississippi \",\"Stone County, Mississippi \",\"Sunflower County, Mississippi \",\"Tallahatchie County, Mississippi \",\"Tate County, Mississippi \",\"Tippah County, Mississippi \",\"Tishomingo County, Mississippi \",\"Tunica County, Mississippi \",\"Union County, Mississippi \",\"Walthall County, Mississippi \",\"Warren County, Mississippi \",\"Washington County, Mississippi \",\"Wayne County, Mississippi \",\"Webster County, Mississippi \",\"Wilkinson County, Mississippi \",\"Winston County, Mississippi \",\"Yalobusha County, Mississippi \",\"Yazoo County, Mississippi \",\"Adair County, Missouri \",\"Andrew County, Missouri \",\"Atchison County, Missouri \",\"Audrain County, Missouri \",\"Barry County, Missouri \",\"Barton County, Missouri \",\"Bates County, Missouri \",\"Benton County, Missouri \",\"Bollinger County, Missouri \",\"Boone County, Missouri \",\"Buchanan County, Missouri \",\"Butler County, Missouri \",\"Caldwell County, Missouri \",\"Callaway County, Missouri \",\"Camden County, Missouri \",\"Cape Girardeau County, Missouri \",\"Carroll County, Missouri \",\"Carter County, Missouri \",\"Cass County, Missouri \",\"Cedar County, Missouri \",\"Chariton County, Missouri \",\"Christian County, Missouri \",\"Clark County, Missouri \",\"Clay County, Missouri \",\"Clinton County, Missouri \",\"Cole County, Missouri \",\"Cooper County, Missouri \",\"Crawford County, Missouri \",\"Dade County, Missouri \",\"Dallas County, Missouri \",\"Daviess County, Missouri \",\"DeKalb County, Missouri \",\"Dent County, Missouri \",\"Douglas County, Missouri \",\"Dunklin County, Missouri \",\"Franklin County, Missouri \",\"Gasconade County, Missouri \",\"Gentry County, Missouri \",\"Greene County, Missouri \",\"Grundy County, Missouri \",\"Harrison County, Missouri \",\"Henry County, Missouri \",\"Hickory County, Missouri \",\"Holt County, Missouri \",\"Howard County, Missouri \",\"Howell County, Missouri \",\"Iron County, Missouri \",\"Jackson County, Missouri \",\"Jasper County, Missouri \",\"Jefferson County, Missouri \",\"Johnson County, Missouri \",\"Knox County, Missouri \",\"Laclede County, Missouri \",\"Lafayette County, Missouri \",\"Lawrence County, Missouri \",\"Lewis County, Missouri \",\"Lincoln County, Missouri \",\"Linn County, Missouri \",\"Livingston County, Missouri \",\"McDonald County, Missouri \",\"Macon County, Missouri \",\"Madison County, Missouri \",\"Maries County, Missouri \",\"Marion County, Missouri \",\"Mercer County, Missouri \",\"Miller County, Missouri \",\"Mississippi County, Missouri \",\"Moniteau County, Missouri \",\"Monroe County, Missouri \",\"Montgomery County, Missouri \",\"Morgan County, Missouri \",\"New Madrid County, Missouri \",\"Newton County, Missouri \",\"Nodaway County, Missouri \",\"Oregon County, Missouri \",\"Osage County, Missouri \",\"Ozark County, Missouri \",\"Pemiscot County, Missouri \",\"Perry County, Missouri \",\"Pettis County, Missouri \",\"Phelps County, Missouri \",\"Pike County, Missouri \",\"Platte County, Missouri \",\"Polk County, Missouri \",\"Pulaski County, Missouri \",\"Putnam County, Missouri \",\"Ralls County, Missouri \",\"Randolph County, Missouri \",\"Ray County, Missouri \",\"Reynolds County, Missouri \",\"Ripley County, Missouri \",\"St. Charles County, Missouri \",\"St. Clair County, Missouri \",\"Ste. Genevieve County, Missouri \",\"St. Francois County, Missouri \",\"St. Louis County, Missouri \",\"Saline County, Missouri \",\"Schuyler County, Missouri \",\"Scotland County, Missouri \",\"Scott County, Missouri \",\"Shannon County, Missouri \",\"Shelby County, Missouri \",\"Stoddard County, Missouri \",\"Stone County, Missouri \",\"Sullivan County, Missouri \",\"Taney County, Missouri \",\"Texas County, Missouri \",\"Vernon County, Missouri \",\"Warren County, Missouri \",\"Washington County, Missouri \",\"Wayne County, Missouri \",\"Webster County, Missouri \",\"Worth County, Missouri \",\"Wright County, Missouri \",\"St. Louis, City of, Missouri \",\"Beaverhead County, Montana \",\"Big Horn County, Montana \",\"Blaine County, Montana \",\"Broadwater County, Montana \",\"Carbon County, Montana \",\"Carter County, Montana \",\"Cascade County, Montana \",\"Chouteau County, Montana \",\"Custer County, Montana \",\"Daniels County, Montana \",\"Dawson County, Montana \",\"Deer Lodge County, Montana \",\"Fallon County, Montana \",\"Fergus County, Montana \",\"Flathead County, Montana \",\"Gallatin County, Montana \",\"Garfield County, Montana \",\"Glacier County, Montana \",\"Golden Valley County, Montana \",\"Granite County, Montana \",\"Hill County, Montana \",\"Jefferson County, Montana \",\"Judith Basin County, Montana \",\"Lake County, Montana \",\"Lewis and Clark County, Montana \",\"Liberty County, Montana \",\"Lincoln County, Montana \",\"McCone County, Montana \",\"Madison County, Montana \",\"Meagher County, Montana \",\"Mineral County, Montana \",\"Missoula County, Montana \",\"Musselshell County, Montana \",\"Park County, Montana \",\"Petroleum County, Montana \",\"Phillips County, Montana \",\"Pondera County, Montana \",\"Powder River County, Montana \",\"Powell County, Montana \",\"Prairie County, Montana \",\"Ravalli County, Montana \",\"Richland County, Montana \",\"Roosevelt County, Montana \",\"Rosebud County, Montana \",\"Sanders County, Montana \",\"Sheridan County, Montana \",\"Silver Bow County, Montana \",\"Stillwater County, Montana \",\"Sweet Grass County, Montana \",\"Teton County, Montana \",\"Toole County, Montana \",\"Treasure County, Montana \",\"Valley County, Montana \",\"Wheatland County, Montana \",\"Wibaux County, Montana \",\"Yellowstone County, Montana \",\"Adams County, Nebraska \",\"Antelope County, Nebraska \",\"Arthur County, Nebraska \",\"Banner County, Nebraska \",\"Blaine County, Nebraska \",\"Boone County, Nebraska \",\"Box Butte County, Nebraska \",\"Boyd County, Nebraska \",\"Brown County, Nebraska \",\"Buffalo County, Nebraska \",\"Burt County, Nebraska \",\"Butler County, Nebraska \",\"Cass County, Nebraska \",\"Cedar County, Nebraska \",\"Chase County, Nebraska \",\"Cherry County, Nebraska \",\"Cheyenne County, Nebraska \",\"Clay County, Nebraska \",\"Colfax County, Nebraska \",\"Cuming County, Nebraska \",\"Custer County, Nebraska \",\"Dakota County, Nebraska \",\"Dawes County, Nebraska \",\"Dawson County, Nebraska \",\"Deuel County, Nebraska \",\"Dixon County, Nebraska \",\"Dodge County, Nebraska \",\"Douglas County, Nebraska \",\"Dundy County, Nebraska \",\"Fillmore County, Nebraska \",\"Franklin County, Nebraska \",\"Frontier County, Nebraska \",\"Furnas County, Nebraska \",\"Gage County, Nebraska \",\"Garden County, Nebraska \",\"Garfield County, Nebraska \",\"Gosper County, Nebraska \",\"Grant County, Nebraska \",\"Greeley County, Nebraska \",\"Hall County, Nebraska \",\"Hamilton County, Nebraska \",\"Harlan County, Nebraska \",\"Hayes County, Nebraska \",\"Hitchcock County, Nebraska \",\"Holt County, Nebraska \",\"Hooker County, Nebraska \",\"Howard County, Nebraska \",\"Jefferson County, Nebraska \",\"Johnson County, Nebraska \",\"Kearney County, Nebraska \",\"Keith County, Nebraska \",\"Keya Paha County, Nebraska \",\"Kimball County, Nebraska \",\"Knox County, Nebraska \",\"Lancaster County, Nebraska \",\"Lincoln County, Nebraska \",\"Logan County, Nebraska \",\"Loup County, Nebraska \",\"McPherson County, Nebraska \",\"Madison County, Nebraska \",\"Merrick County, Nebraska \",\"Morrill County, Nebraska \",\"Nance County, Nebraska \",\"Nemaha County, Nebraska \",\"Nuckolls County, Nebraska \",\"Otoe County, Nebraska \",\"Pawnee County, Nebraska \",\"Perkins County, Nebraska \",\"Phelps County, Nebraska \",\"Pierce County, Nebraska \",\"Platte County, Nebraska \",\"Polk County, Nebraska \",\"Red Willow County, Nebraska \",\"Richardson County, Nebraska \",\"Rock County, Nebraska \",\"Saline County, Nebraska \",\"Sarpy County, Nebraska \",\"Saunders County, Nebraska \",\"Scotts Bluff County, Nebraska \",\"Seward County, Nebraska \",\"Sheridan County, Nebraska \",\"Sherman County, Nebraska \",\"Sioux County, Nebraska \",\"Stanton County, Nebraska \",\"Thayer County, Nebraska \",\"Thomas County, Nebraska \",\"Thurston County, Nebraska \",\"Valley County, Nebraska \",\"Washington County, Nebraska \",\"Wayne County, Nebraska \",\"Webster County, Nebraska \",\"Wheeler County, Nebraska \",\"York County, Nebraska \",\"Churchill County, Nevada \",\"Clark County, Nevada \",\"Douglas County, Nevada \",\"Elko County, Nevada \",\"Esmeralda County, Nevada \",\"Eureka County, Nevada \",\"Humboldt County, Nevada \",\"Lander County, Nevada \",\"Lincoln County, Nevada \",\"Lyon County, Nevada \",\"Mineral County, Nevada \",\"Nye County, Nevada \",\"Pershing County, Nevada \",\"Storey County, Nevada \",\"Washoe County, Nevada \",\"White Pine County, Nevada \",\"Carson City, Consolidated Municipality of, Nevada \",\"Belknap County, New Hampshire \",\"Carroll County, New Hampshire \",\"Cheshire County, New Hampshire \",\"Coos County, New Hampshire \",\"Grafton County, New Hampshire \",\"Hillsborough County, New Hampshire \",\"Merrimack County, New Hampshire \",\"Rockingham County, New Hampshire \",\"Strafford County, New Hampshire \",\"Sullivan County, New Hampshire \",\"Atlantic County, New Jersey \",\"Bergen County, New Jersey \",\"Burlington County, New Jersey \",\"Camden County, New Jersey \",\"Cape May County, New Jersey \",\"Cumberland County, New Jersey \",\"Essex County, New Jersey \",\"Gloucester County, New Jersey \",\"Hudson County, New Jersey \",\"Hunterdon County, New Jersey \",\"Mercer County, New Jersey \",\"Middlesex County, New Jersey \",\"Monmouth County, New Jersey \",\"Morris County, New Jersey \",\"Ocean County, New Jersey \",\"Passaic County, New Jersey \",\"Salem County, New Jersey \",\"Somerset County, New Jersey \",\"Sussex County, New Jersey \",\"Union County, New Jersey \",\"Warren County, New Jersey \",\"Bernalillo County, New Mexico \",\"Catron County, New Mexico \",\"Chaves County, New Mexico \",\"Cibola County, New Mexico \",\"Colfax County, New Mexico \",\"Curry County, New Mexico \",\"De Baca County, New Mexico \",\"Doña Ana County, New Mexico \",\"Eddy County, New Mexico \",\"Grant County, New Mexico \",\"Guadalupe County, New Mexico \",\"Harding County, New Mexico \",\"Hidalgo County, New Mexico \",\"Lea County, New Mexico \",\"Lincoln County, New Mexico \",\"Los Alamos County, New Mexico \",\"Luna County, New Mexico \",\"McKinley County, New Mexico \",\"Mora County, New Mexico \",\"Otero County, New Mexico \",\"Quay County, New Mexico \",\"Rio Arriba County, New Mexico \",\"Roosevelt County, New Mexico \",\"Sandoval County, New Mexico \",\"San Juan County, New Mexico \",\"San Miguel County, New Mexico \",\"Santa Fe County, New Mexico \",\"Sierra County, New Mexico \",\"Socorro County, New Mexico \",\"Taos County, New Mexico \",\"Torrance County, New Mexico \",\"Union County, New Mexico \",\"Valencia County, New Mexico \",\"Albany County, New York \",\"Allegany County, New York \",\"Bronx County, New York \",\"Broome County, New York \",\"Cattaraugus County, New York \",\"Cayuga County, New York \",\"Chautauqua County, New York \",\"Chemung County, New York \",\"Chenango County, New York \",\"Clinton County, New York \",\"Columbia County, New York \",\"Cortland County, New York \",\"Delaware County, New York \",\"Dutchess County, New York \",\"Erie County, New York \",\"Essex County, New York \",\"Franklin County, New York \",\"Fulton County, New York \",\"Genesee County, New York \",\"Greene County, New York \",\"Hamilton County, New York \",\"Herkimer County, New York \",\"Jefferson County, New York \",\"Kings County, New York \",\"Lewis County, New York \",\"Livingston County, New York \",\"Madison County, New York \",\"Monroe County, New York \",\"Montgomery County, New York \",\"Nassau County, New York \",\"New York County, New York \",\"Niagara County, New York \",\"Oneida County, New York \",\"Onondaga County, New York \",\"Ontario County, New York \",\"Orange County, New York \",\"Orleans County, New York \",\"Oswego County, New York \",\"Otsego County, New York \",\"Putnam County, New York \",\"Queens County, New York \",\"Rensselaer County, New York \",\"Richmond County, New York \",\"Rockland County, New York \",\"St. Lawrence County, New York \",\"Saratoga County, New York \",\"Schenectady County, New York \",\"Schoharie County, New York \",\"Schuyler County, New York \",\"Seneca County, New York \",\"Steuben County, New York \",\"Suffolk County, New York \",\"Sullivan County, New York \",\"Tioga County, New York \",\"Tompkins County, New York \",\"Ulster County, New York \",\"Warren County, New York \",\"Washington County, New York \",\"Wayne County, New York \",\"Westchester County, New York \",\"Wyoming County, New York \",\"Yates County, New York \",\"Alamance County, North Carolina \",\"Alexander County, North Carolina \",\"Alleghany County, North Carolina \",\"Anson County, North Carolina \",\"Ashe County, North Carolina \",\"Avery County, North Carolina \",\"Beaufort County, North Carolina \",\"Bertie County, North Carolina \",\"Bladen County, North Carolina \",\"Brunswick County, North Carolina \",\"Buncombe County, North Carolina \",\"Burke County, North Carolina \",\"Cabarrus County, North Carolina \",\"Caldwell County, North Carolina \",\"Camden County, North Carolina \",\"Carteret County, North Carolina \",\"Caswell County, North Carolina \",\"Catawba County, North Carolina \",\"Chatham County, North Carolina \",\"Cherokee County, North Carolina \",\"Chowan County, North Carolina \",\"Clay County, North Carolina \",\"Cleveland County, North Carolina \",\"Columbus County, North Carolina \",\"Craven County, North Carolina \",\"Cumberland County, North Carolina \",\"Currituck County, North Carolina \",\"Dare County, North Carolina \",\"Davidson County, North Carolina \",\"Davie County, North Carolina \",\"Duplin County, North Carolina \",\"Durham County, North Carolina \",\"Edgecombe County, North Carolina \",\"Forsyth County, North Carolina \",\"Franklin County, North Carolina \",\"Gaston County, North Carolina \",\"Gates County, North Carolina \",\"Graham County, North Carolina \",\"Granville County, North Carolina \",\"Greene County, North Carolina \",\"Guilford County, North Carolina \",\"Halifax County, North Carolina \",\"Harnett County, North Carolina \",\"Haywood County, North Carolina \",\"Henderson County, North Carolina \",\"Hertford County, North Carolina \",\"Hoke County, North Carolina \",\"Hyde County, North Carolina \",\"Iredell County, North Carolina \",\"Jackson County, North Carolina \",\"Johnston County, North Carolina \",\"Jones County, North Carolina \",\"Lee County, North Carolina \",\"Lenoir County, North Carolina \",\"Lincoln County, North Carolina \",\"McDowell County, North Carolina \",\"Macon County, North Carolina \",\"Madison County, North Carolina \",\"Martin County, North Carolina \",\"Mecklenburg County, North Carolina \",\"Mitchell County, North Carolina \",\"Montgomery County, North Carolina \",\"Moore County, North Carolina \",\"Nash County, North Carolina \",\"New Hanover County, North Carolina \",\"Northampton County, North Carolina \",\"Onslow County, North Carolina \",\"Orange County, North Carolina \",\"Pamlico County, North Carolina \",\"Pasquotank County, North Carolina \",\"Pender County, North Carolina \",\"Perquimans County, North Carolina \",\"Person County, North Carolina \",\"Pitt County, North Carolina \",\"Polk County, North Carolina \",\"Randolph County, North Carolina \",\"Richmond County, North Carolina \",\"Robeson County, North Carolina \",\"Rockingham County, North Carolina \",\"Rowan County, North Carolina \",\"Rutherford County, North Carolina \",\"Sampson County, North Carolina \",\"Scotland County, North Carolina \",\"Stanly County, North Carolina \",\"Stokes County, North Carolina \",\"Surry County, North Carolina \",\"Swain County, North Carolina \",\"Transylvania County, North Carolina \",\"Tyrrell County, North Carolina \",\"Union County, North Carolina \",\"Vance County, North Carolina \",\"Wake County, North Carolina \",\"Warren County, North Carolina \",\"Washington County, North Carolina \",\"Watauga County, North Carolina \",\"Wayne County, North Carolina \",\"Wilkes County, North Carolina \",\"Wilson County, North Carolina \",\"Yadkin County, North Carolina \",\"Yancey County, North Carolina \",\"Adams County, North Dakota \",\"Barnes County, North Dakota \",\"Benson County, North Dakota \",\"Billings County, North Dakota \",\"Bottineau County, North Dakota \",\"Bowman County, North Dakota \",\"Burke County, North Dakota \",\"Burleigh County, North Dakota \",\"Cass County, North Dakota \",\"Cavalier County, North Dakota \",\"Dickey County, North Dakota \",\"Divide County, North Dakota \",\"Dunn County, North Dakota \",\"Eddy County, North Dakota \",\"Emmons County, North Dakota \",\"Foster County, North Dakota \",\"Golden Valley County, North Dakota \",\"Grand Forks County, North Dakota \",\"Grant County, North Dakota \",\"Griggs County, North Dakota \",\"Hettinger County, North Dakota \",\"Kidder County, North Dakota \",\"LaMoure County, North Dakota \",\"Logan County, North Dakota \",\"McHenry County, North Dakota \",\"McIntosh County, North Dakota \",\"McKenzie County, North Dakota \",\"McLean County, North Dakota \",\"Mercer County, North Dakota \",\"Morton County, North Dakota \",\"Mountrail County, North Dakota \",\"Nelson County, North Dakota \",\"Oliver County, North Dakota \",\"Pembina County, North Dakota \",\"Pierce County, North Dakota \",\"Ramsey County, North Dakota \",\"Ransom County, North Dakota \",\"Renville County, North Dakota \",\"Richland County, North Dakota \",\"Rolette County, North Dakota \",\"Sargent County, North Dakota \",\"Sheridan County, North Dakota \",\"Sioux County, North Dakota \",\"Slope County, North Dakota \",\"Stark County, North Dakota \",\"Steele County, North Dakota \",\"Stutsman County, North Dakota \",\"Towner County, North Dakota \",\"Traill County, North Dakota \",\"Walsh County, North Dakota \",\"Ward County, North Dakota \",\"Wells County, North Dakota \",\"Williams County, North Dakota \",\"Adams County, Ohio \",\"Allen County, Ohio \",\"Ashland County, Ohio \",\"Ashtabula County, Ohio \",\"Athens County, Ohio \",\"Auglaize County, Ohio \",\"Belmont County, Ohio \",\"Brown County, Ohio \",\"Butler County, Ohio \",\"Carroll County, Ohio \",\"Champaign County, Ohio \",\"Clark County, Ohio \",\"Clermont County, Ohio \",\"Clinton County, Ohio \",\"Columbiana County, Ohio \",\"Coshocton County, Ohio \",\"Crawford County, Ohio \",\"Cuyahoga County, Ohio \",\"Darke County, Ohio \",\"Defiance County, Ohio \",\"Delaware County, Ohio \",\"Erie County, Ohio \",\"Fairfield County, Ohio \",\"Fayette County, Ohio \",\"Franklin County, Ohio \",\"Fulton County, Ohio \",\"Gallia County, Ohio \",\"Geauga County, Ohio \",\"Greene County, Ohio \",\"Guernsey County, Ohio \",\"Hamilton County, Ohio \",\"Hancock County, Ohio \",\"Hardin County, Ohio \",\"Harrison County, Ohio \",\"Henry County, Ohio \",\"Highland County, Ohio \",\"Hocking County, Ohio \",\"Holmes County, Ohio \",\"Huron County, Ohio \",\"Jackson County, Ohio \",\"Jefferson County, Ohio \",\"Knox County, Ohio \",\"Lake County, Ohio \",\"Lawrence County, Ohio \",\"Licking County, Ohio \",\"Logan County, Ohio \",\"Lorain County, Ohio \",\"Lucas County, Ohio \",\"Madison County, Ohio \",\"Mahoning County, Ohio \",\"Marion County, Ohio \",\"Medina County, Ohio \",\"Meigs County, Ohio \",\"Mercer County, Ohio \",\"Miami County, Ohio \",\"Monroe County, Ohio \",\"Montgomery County, Ohio \",\"Morgan County, Ohio \",\"Morrow County, Ohio \",\"Muskingum County, Ohio \",\"Noble County, Ohio \",\"Ottawa County, Ohio \",\"Paulding County, Ohio \",\"Perry County, Ohio \",\"Pickaway County, Ohio \",\"Pike County, Ohio \",\"Portage County, Ohio \",\"Preble County, Ohio \",\"Putnam County, Ohio \",\"Richland County, Ohio \",\"Ross County, Ohio \",\"Sandusky County, Ohio \",\"Scioto County, Ohio \",\"Seneca County, Ohio \",\"Shelby County, Ohio \",\"Stark County, Ohio \",\"Summit County, Ohio \",\"Trumbull County, Ohio \",\"Tuscarawas County, Ohio \",\"Union County, Ohio \",\"Van Wert County, Ohio \",\"Vinton County, Ohio \",\"Warren County, Ohio \",\"Washington County, Ohio \",\"Wayne County, Ohio \",\"Williams County, Ohio \",\"Wood County, Ohio \",\"Wyandot County, Ohio \",\"Adair County, Oklahoma \",\"Alfalfa County, Oklahoma \",\"Atoka County, Oklahoma \",\"Beaver County, Oklahoma \",\"Beckham County, Oklahoma \",\"Blaine County, Oklahoma \",\"Bryan County, Oklahoma \",\"Caddo County, Oklahoma \",\"Canadian County, Oklahoma \",\"Carter County, Oklahoma \",\"Cherokee County, Oklahoma \",\"Choctaw County, Oklahoma \",\"Cimarron County, Oklahoma \",\"Cleveland County, Oklahoma \",\"Coal County, Oklahoma \",\"Comanche County, Oklahoma \",\"Cotton County, Oklahoma \",\"Craig County, Oklahoma \",\"Creek County, Oklahoma \",\"Custer County, Oklahoma \",\"Delaware County, Oklahoma \",\"Dewey County, Oklahoma \",\"Ellis County, Oklahoma \",\"Garfield County, Oklahoma \",\"Garvin County, Oklahoma \",\"Grady County, Oklahoma \",\"Grant County, Oklahoma \",\"Greer County, Oklahoma \",\"Harmon County, Oklahoma \",\"Harper County, Oklahoma \",\"Haskell County, Oklahoma \",\"Hughes County, Oklahoma \",\"Jackson County, Oklahoma \",\"Jefferson County, Oklahoma \",\"Johnston County, Oklahoma \",\"Kay County, Oklahoma \",\"Kingfisher County, Oklahoma \",\"Kiowa County, Oklahoma \",\"Latimer County, Oklahoma \",\"Le Flore County, Oklahoma \",\"Lincoln County, Oklahoma \",\"Logan County, Oklahoma \",\"Love County, Oklahoma \",\"McClain County, Oklahoma \",\"McCurtain County, Oklahoma \",\"McIntosh County, Oklahoma \",\"Major County, Oklahoma \",\"Marshall County, Oklahoma \",\"Mayes County, Oklahoma \",\"Murray County, Oklahoma \",\"Muskogee County, Oklahoma \",\"Noble County, Oklahoma \",\"Nowata County, Oklahoma \",\"Okfuskee County, Oklahoma \",\"Oklahoma County, Oklahoma \",\"Okmulgee County, Oklahoma \",\"Osage County, Oklahoma \",\"Ottawa County, Oklahoma \",\"Pawnee County, Oklahoma \",\"Payne County, Oklahoma \",\"Pittsburg County, Oklahoma \",\"Pontotoc County, Oklahoma \",\"Pottawatomie County, Oklahoma \",\"Pushmataha County, Oklahoma \",\"Roger Mills County, Oklahoma \",\"Rogers County, Oklahoma \",\"Seminole County, Oklahoma \",\"Sequoyah County, Oklahoma \",\"Stephens County, Oklahoma \",\"Texas County, Oklahoma \",\"Tillman County, Oklahoma \",\"Tulsa County, Oklahoma \",\"Wagoner County, Oklahoma \",\"Washington County, Oklahoma \",\"Washita County, Oklahoma \",\"Woods County, Oklahoma \",\"Woodward County, Oklahoma \",\"Baker County, Oregon \",\"Benton County, Oregon \",\"Clackamas County, Oregon \",\"Clatsop County, Oregon \",\"Columbia County, Oregon \",\"Coos County, Oregon \",\"Crook County, Oregon \",\"Curry County, Oregon \",\"Deschutes County, Oregon \",\"Douglas County, Oregon \",\"Gilliam County, Oregon \",\"Grant County, Oregon \",\"Harney County, Oregon \",\"Hood River County, Oregon \",\"Jackson County, Oregon \",\"Jefferson County, Oregon \",\"Josephine County, Oregon \",\"Klamath County, Oregon \",\"Lake County, Oregon \",\"Lane County, Oregon \",\"Lincoln County, Oregon \",\"Linn County, Oregon \",\"Malheur County, Oregon \",\"Marion County, Oregon \",\"Morrow County, Oregon \",\"Multnomah County, Oregon \",\"Polk County, Oregon \",\"Sherman County, Oregon \",\"Tillamook County, Oregon \",\"Umatilla County, Oregon \",\"Union County, Oregon \",\"Wallowa County, Oregon \",\"Wasco County, Oregon \",\"Washington County, Oregon \",\"Wheeler County, Oregon \",\"Yamhill County, Oregon \",\"Adams County, Pennsylvania \",\"Allegheny County, Pennsylvania \",\"Armstrong County, Pennsylvania \",\"Beaver County, Pennsylvania \",\"Bedford County, Pennsylvania \",\"Berks County, Pennsylvania \",\"Blair County, Pennsylvania \",\"Bradford County, Pennsylvania \",\"Bucks County, Pennsylvania \",\"Butler County, Pennsylvania \",\"Cambria County, Pennsylvania \",\"Cameron County, Pennsylvania \",\"Carbon County, Pennsylvania \",\"Centre County, Pennsylvania \",\"Chester County, Pennsylvania \",\"Clarion County, Pennsylvania \",\"Clearfield County, Pennsylvania \",\"Clinton County, Pennsylvania \",\"Columbia County, Pennsylvania \",\"Crawford County, Pennsylvania \",\"Cumberland County, Pennsylvania \",\"Dauphin County, Pennsylvania \",\"Delaware County, Pennsylvania \",\"Elk County, Pennsylvania \",\"Erie County, Pennsylvania \",\"Fayette County, Pennsylvania \",\"Forest County, Pennsylvania \",\"Franklin County, Pennsylvania \",\"Fulton County, Pennsylvania \",\"Greene County, Pennsylvania \",\"Huntingdon County, Pennsylvania \",\"Indiana County, Pennsylvania \",\"Jefferson County, Pennsylvania \",\"Juniata County, Pennsylvania \",\"Lackawanna County, Pennsylvania \",\"Lancaster County, Pennsylvania \",\"Lawrence County, Pennsylvania \",\"Lebanon County, Pennsylvania \",\"Lehigh County, Pennsylvania \",\"Luzerne County, Pennsylvania \",\"Lycoming County, Pennsylvania \",\"McKean County, Pennsylvania \",\"Mercer County, Pennsylvania \",\"Mifflin County, Pennsylvania \",\"Monroe County, Pennsylvania \",\"Montgomery County, Pennsylvania \",\"Montour County, Pennsylvania \",\"Northampton County, Pennsylvania \",\"Northumberland County, Pennsylvania \",\"Perry County, Pennsylvania \",\"Philadelphia County, Pennsylvania \",\"Pike County, Pennsylvania \",\"Potter County, Pennsylvania \",\"Schuylkill County, Pennsylvania \",\"Snyder County, Pennsylvania \",\"Somerset County, Pennsylvania \",\"Sullivan County, Pennsylvania \",\"Susquehanna County, Pennsylvania \",\"Tioga County, Pennsylvania \",\"Union County, Pennsylvania \",\"Venango County, Pennsylvania \",\"Warren County, Pennsylvania \",\"Washington County, Pennsylvania \",\"Wayne County, Pennsylvania \",\"Westmoreland County, Pennsylvania \",\"Wyoming County, Pennsylvania \",\"York County, Pennsylvania \",\"Bristol County, Rhode Island \",\"Kent County, Rhode Island \",\"Newport County, Rhode Island \",\"Providence County, Rhode Island \",\"Washington County, Rhode Island \",\"Abbeville County, South Carolina \",\"Aiken County, South Carolina \",\"Allendale County, South Carolina \",\"Anderson County, South Carolina \",\"Bamberg County, South Carolina \",\"Barnwell County, South Carolina \",\"Beaufort County, South Carolina \",\"Berkeley County, South Carolina \",\"Calhoun County, South Carolina \",\"Charleston County, South Carolina \",\"Cherokee County, South Carolina \",\"Chester County, South Carolina \",\"Chesterfield County, South Carolina \",\"Clarendon County, South Carolina \",\"Colleton County, South Carolina \",\"Darlington County, South Carolina \",\"Dillon County, South Carolina \",\"Dorchester County, South Carolina \",\"Edgefield County, South Carolina \",\"Fairfield County, South Carolina \",\"Florence County, South Carolina \",\"Georgetown County, South Carolina \",\"Greenville County, South Carolina \",\"Greenwood County, South Carolina \",\"Hampton County, South Carolina \",\"Horry County, South Carolina \",\"Jasper County, South Carolina \",\"Kershaw County, South Carolina \",\"Lancaster County, South Carolina \",\"Laurens County, South Carolina \",\"Lee County, South Carolina \",\"Lexington County, South Carolina \",\"McCormick County, South Carolina \",\"Marion County, South Carolina \",\"Marlboro County, South Carolina \",\"Newberry County, South Carolina \",\"Oconee County, South Carolina \",\"Orangeburg County, South Carolina \",\"Pickens County, South Carolina \",\"Richland County, South Carolina \",\"Saluda County, South Carolina \",\"Spartanburg County, South Carolina \",\"Sumter County, South Carolina \",\"Union County, South Carolina \",\"Williamsburg County, South Carolina \",\"York County, South Carolina \",\"Aurora County, South Dakota \",\"Beadle County, South Dakota \",\"Bennett County, South Dakota \",\"Bon Homme County, South Dakota \",\"Brookings County, South Dakota \",\"Brown County, South Dakota \",\"Brule County, South Dakota \",\"Buffalo County, South Dakota \",\"Butte County, South Dakota \",\"Campbell County, South Dakota \",\"Charles Mix County, South Dakota \",\"Clark County, South Dakota \",\"Clay County, South Dakota \",\"Codington County, South Dakota \",\"Corson County, South Dakota \",\"Custer County, South Dakota \",\"Davison County, South Dakota \",\"Day County, South Dakota \",\"Deuel County, South Dakota \",\"Dewey County, South Dakota \",\"Douglas County, South Dakota \",\"Edmunds County, South Dakota \",\"Fall River County, South Dakota \",\"Faulk County, South Dakota \",\"Grant County, South Dakota \",\"Gregory County, South Dakota \",\"Haakon County, South Dakota \",\"Hamlin County, South Dakota \",\"Hand County, South Dakota \",\"Hanson County, South Dakota \",\"Harding County, South Dakota \",\"Hughes County, South Dakota \",\"Hutchinson County, South Dakota \",\"Hyde County, South Dakota \",\"Jackson County, South Dakota \",\"Jerauld County, South Dakota \",\"Jones County, South Dakota \",\"Kingsbury County, South Dakota \",\"Lake County, South Dakota \",\"Lawrence County, South Dakota \",\"Lincoln County, South Dakota \",\"Lyman County, South Dakota \",\"McCook County, South Dakota \",\"McPherson County, South Dakota \",\"Marshall County, South Dakota \",\"Meade County, South Dakota \",\"Mellette County, South Dakota \",\"Miner County, South Dakota \",\"Minnehaha County, South Dakota \",\"Moody County, South Dakota \",\"Pennington County, South Dakota \",\"Perkins County, South Dakota \",\"Potter County, South Dakota \",\"Roberts County, South Dakota \",\"Sanborn County, South Dakota \",\"Shannon County, South Dakota \",\"Spink County, South Dakota \",\"Stanley County, South Dakota \",\"Sully County, South Dakota \",\"Todd County, South Dakota \",\"Tripp County, South Dakota \",\"Turner County, South Dakota \",\"Union County, South Dakota \",\"Walworth County, South Dakota \",\"Yankton County, South Dakota \",\"Ziebach County, South Dakota \",\"Anderson County, Tennessee \",\"Bedford County, Tennessee \",\"Benton County, Tennessee \",\"Bledsoe County, Tennessee \",\"Blount County, Tennessee \",\"Bradley County, Tennessee \",\"Campbell County, Tennessee \",\"Cannon County, Tennessee \",\"Carroll County, Tennessee \",\"Carter County, Tennessee \",\"Cheatham County, Tennessee \",\"Chester County, Tennessee \",\"Claiborne County, Tennessee \",\"Clay County, Tennessee \",\"Cocke County, Tennessee \",\"Coffee County, Tennessee \",\"Crockett County, Tennessee \",\"Cumberland County, Tennessee \",\"Davidson County, Tennessee \",\"Decatur County, Tennessee \",\"DeKalb County, Tennessee \",\"Dickson County, Tennessee \",\"Dyer County, Tennessee \",\"Fayette County, Tennessee \",\"Fentress County, Tennessee \",\"Franklin County, Tennessee \",\"Gibson County, Tennessee \",\"Giles County, Tennessee \",\"Grainger County, Tennessee \",\"Greene County, Tennessee \",\"Grundy County, Tennessee \",\"Hamblen County, Tennessee \",\"Hamilton County, Tennessee \",\"Hancock County, Tennessee \",\"Hardeman County, Tennessee \",\"Hardin County, Tennessee \",\"Hawkins County, Tennessee \",\"Haywood County, Tennessee \",\"Henderson County, Tennessee \",\"Henry County, Tennessee \",\"Hickman County, Tennessee \",\"Houston County, Tennessee \",\"Humphreys County, Tennessee \",\"Jackson County, Tennessee \",\"Jefferson County, Tennessee \",\"Johnson County, Tennessee \",\"Knox County, Tennessee \",\"Lake County, Tennessee \",\"Lauderdale County, Tennessee \",\"Lawrence County, Tennessee \",\"Lewis County, Tennessee \",\"Lincoln County, Tennessee \",\"Loudon County, Tennessee \",\"McMinn County, Tennessee \",\"McNairy County, Tennessee \",\"Macon County, Tennessee \",\"Madison County, Tennessee \",\"Marion County, Tennessee \",\"Marshall County, Tennessee \",\"Maury County, Tennessee \",\"Meigs County, Tennessee \",\"Monroe County, Tennessee \",\"Montgomery County, Tennessee \",\"Moore County, Tennessee \",\"Morgan County, Tennessee \",\"Obion County, Tennessee \",\"Overton County, Tennessee \",\"Perry County, Tennessee \",\"Pickett County, Tennessee \",\"Polk County, Tennessee \",\"Putnam County, Tennessee \",\"Rhea County, Tennessee \",\"Roane County, Tennessee \",\"Robertson County, Tennessee \",\"Rutherford County, Tennessee \",\"Scott County, Tennessee \",\"Sequatchie County, Tennessee \",\"Sevier County, Tennessee \",\"Shelby County, Tennessee \",\"Smith County, Tennessee \",\"Stewart County, Tennessee \",\"Sullivan County, Tennessee \",\"Sumner County, Tennessee \",\"Tipton County, Tennessee \",\"Trousdale County, Tennessee \",\"Unicoi County, Tennessee \",\"Union County, Tennessee \",\"Van Buren County, Tennessee \",\"Warren County, Tennessee \",\"Washington County, Tennessee \",\"Wayne County, Tennessee \",\"Weakley County, Tennessee \",\"White County, Tennessee \",\"Williamson County, Tennessee \",\"Wilson County, Tennessee \",\"Anderson County, Texas \",\"Andrews County, Texas \",\"Angelina County, Texas \",\"Aransas County, Texas \",\"Archer County, Texas \",\"Armstrong County, Texas \",\"Atascosa County, Texas \",\"Austin County, Texas \",\"Bailey County, Texas \",\"Bandera County, Texas \",\"Bastrop County, Texas \",\"Baylor County, Texas \",\"Bee County, Texas \",\"Bell County, Texas \",\"Bexar County, Texas \",\"Blanco County, Texas \",\"Borden County, Texas \",\"Bosque County, Texas \",\"Bowie County, Texas \",\"Brazoria County, Texas \",\"Brazos County, Texas \",\"Brewster County, Texas \",\"Briscoe County, Texas \",\"Brooks County, Texas \",\"Brown County, Texas \",\"Burleson County, Texas \",\"Burnet County, Texas \",\"Caldwell County, Texas \",\"Calhoun County, Texas \",\"Callahan County, Texas \",\"Cameron County, Texas \",\"Camp County, Texas \",\"Carson County, Texas \",\"Cass County, Texas \",\"Castro County, Texas \",\"Chambers County, Texas \",\"Cherokee County, Texas \",\"Childress County, Texas \",\"Clay County, Texas \",\"Cochran County, Texas \",\"Coke County, Texas \",\"Coleman County, Texas \",\"Collin County, Texas \",\"Collingsworth County, Texas \",\"Colorado County, Texas \",\"Comal County, Texas \",\"Comanche County, Texas \",\"Concho County, Texas \",\"Cooke County, Texas \",\"Coryell County, Texas \",\"Cottle County, Texas \",\"Crane County, Texas \",\"Crockett County, Texas \",\"Crosby County, Texas \",\"Culberson County, Texas \",\"Dallam County, Texas \",\"Dallas County, Texas \",\"Dawson County, Texas \",\"Deaf Smith County, Texas \",\"Delta County, Texas \",\"Denton County, Texas \",\"DeWitt County, Texas \",\"Dickens County, Texas \",\"Dimmit County, Texas \",\"Donley County, Texas \",\"Duval County, Texas \",\"Eastland County, Texas \",\"Ector County, Texas \",\"Edwards County, Texas \",\"Ellis County, Texas \",\"El Paso County, Texas \",\"Erath County, Texas \",\"Falls County, Texas \",\"Fannin County, Texas \",\"Fayette County, Texas \",\"Fisher County, Texas \",\"Floyd County, Texas \",\"Foard County, Texas \",\"Fort Bend County, Texas \",\"Franklin County, Texas \",\"Freestone County, Texas \",\"Frio County, Texas \",\"Gaines County, Texas \",\"Galveston County, Texas \",\"Garza County, Texas \",\"Gillespie County, Texas \",\"Glasscock County, Texas \",\"Goliad County, Texas \",\"Gonzales County, Texas \",\"Gray County, Texas \",\"Grayson County, Texas \",\"Gregg County, Texas \",\"Grimes County, Texas \",\"Guadalupe County, Texas \",\"Hale County, Texas \",\"Hall County, Texas \",\"Hamilton County, Texas \",\"Hansford County, Texas \",\"Hardeman County, Texas \",\"Hardin County, Texas \",\"Harris County, Texas \",\"Harrison County, Texas \",\"Hartley County, Texas \",\"Haskell County, Texas \",\"Hays County, Texas \",\"Hemphill County, Texas \",\"Henderson County, Texas \",\"Hidalgo County, Texas \",\"Hill County, Texas \",\"Hockley County, Texas \",\"Hood County, Texas \",\"Hopkins County, Texas \",\"Houston County, Texas \",\"Howard County, Texas \",\"Hudspeth County, Texas \",\"Hunt County, Texas \",\"Hutchinson County, Texas \",\"Irion County, Texas \",\"Jack County, Texas \",\"Jackson County, Texas \",\"Jasper County, Texas \",\"Jeff Davis County, Texas \",\"Jefferson County, Texas \",\"Jim Hogg County, Texas \",\"Jim Wells County, Texas \",\"Johnson County, Texas \",\"Jones County, Texas \",\"Karnes County, Texas \",\"Kaufman County, Texas \",\"Kendall County, Texas \",\"Kenedy County, Texas \",\"Kent County, Texas \",\"Kerr County, Texas \",\"Kimble County, Texas \",\"King County, Texas \",\"Kinney County, Texas \",\"Kleberg County, Texas \",\"Knox County, Texas \",\"Lamar County, Texas \",\"Lamb County, Texas \",\"Lampasas County, Texas \",\"La Salle County, Texas \",\"Lavaca County, Texas \",\"Lee County, Texas \",\"Leon County, Texas \",\"Liberty County, Texas \",\"Limestone County, Texas \",\"Lipscomb County, Texas \",\"Live Oak County, Texas \",\"Llano County, Texas \",\"Loving County, Texas \",\"Lubbock County, Texas \",\"Lynn County, Texas \",\"McCulloch County, Texas \",\"McLennan County, Texas \",\"McMullen County, Texas \",\"Madison County, Texas \",\"Marion County, Texas \",\"Martin County, Texas \",\"Mason County, Texas \",\"Matagorda County, Texas \",\"Maverick County, Texas \",\"Medina County, Texas \",\"Menard County, Texas \",\"Midland County, Texas \",\"Milam County, Texas \",\"Mills County, Texas \",\"Mitchell County, Texas \",\"Montague County, Texas \",\"Montgomery County, Texas \",\"Moore County, Texas \",\"Morris County, Texas \",\"Motley County, Texas \",\"Nacogdoches County, Texas \",\"Navarro County, Texas \",\"Newton County, Texas \",\"Nolan County, Texas \",\"Nueces County, Texas \",\"Ochiltree County, Texas \",\"Oldham County, Texas \",\"Orange County, Texas \",\"Palo Pinto County, Texas \",\"Panola County, Texas \",\"Parker County, Texas \",\"Parmer County, Texas \",\"Pecos County, Texas \",\"Polk County, Texas \",\"Potter County, Texas \",\"Presidio County, Texas \",\"Rains County, Texas \",\"Randall County, Texas \",\"Reagan County, Texas \",\"Real County, Texas \",\"Red River County, Texas \",\"Reeves County, Texas \",\"Refugio County, Texas \",\"Roberts County, Texas \",\"Robertson County, Texas \",\"Rockwall County, Texas \",\"Runnels County, Texas \",\"Rusk County, Texas \",\"Sabine County, Texas \",\"San Augustine County, Texas \",\"San Jacinto County, Texas \",\"San Patricio County, Texas \",\"San Saba County, Texas \",\"Schleicher County, Texas \",\"Scurry County, Texas \",\"Shackelford County, Texas \",\"Shelby County, Texas \",\"Sherman County, Texas \",\"Smith County, Texas \",\"Somervell County, Texas \",\"Starr County, Texas \",\"Stephens County, Texas \",\"Sterling County, Texas \",\"Stonewall County, Texas \",\"Sutton County, Texas \",\"Swisher County, Texas \",\"Tarrant County, Texas \",\"Taylor County, Texas \",\"Terrell County, Texas \",\"Terry County, Texas \",\"Throckmorton County, Texas \",\"Titus County, Texas \",\"Tom Green County, Texas \",\"Travis County, Texas \",\"Trinity County, Texas \",\"Tyler County, Texas \",\"Upshur County, Texas \",\"Upton County, Texas \",\"Uvalde County, Texas \",\"Val Verde County, Texas \",\"Van Zandt County, Texas \",\"Victoria County, Texas \",\"Walker County, Texas \",\"Waller County, Texas \",\"Ward County, Texas \",\"Washington County, Texas \",\"Webb County, Texas \",\"Wharton County, Texas \",\"Wheeler County, Texas \",\"Wichita County, Texas \",\"Wilbarger County, Texas \",\"Willacy County, Texas \",\"Williamson County, Texas \",\"Wilson County, Texas \",\"Winkler County, Texas \",\"Wise County, Texas \",\"Wood County, Texas \",\"Yoakum County, Texas \",\"Young County, Texas \",\"Zapata County, Texas \",\"Zavala County, Texas \",\"Beaver County, Utah \",\"Box Elder County, Utah \",\"Cache County, Utah \",\"Carbon County, Utah \",\"Daggett County, Utah \",\"Davis County, Utah \",\"Duchesne County, Utah \",\"Emery County, Utah \",\"Garfield County, Utah \",\"Grand County, Utah \",\"Iron County, Utah \",\"Juab County, Utah \",\"Kane County, Utah \",\"Millard County, Utah \",\"Morgan County, Utah \",\"Piute County, Utah \",\"Rich County, Utah \",\"Salt Lake County, Utah \",\"San Juan County, Utah \",\"Sanpete County, Utah \",\"Sevier County, Utah \",\"Summit County, Utah \",\"Tooele County, Utah \",\"Uintah County, Utah \",\"Utah County, Utah \",\"Wasatch County, Utah \",\"Washington County, Utah \",\"Wayne County, Utah \",\"Weber County, Utah \",\"Addison County, Vermont \",\"Bennington County, Vermont \",\"Caledonia County, Vermont \",\"Chittenden County, Vermont \",\"Essex County, Vermont \",\"Franklin County, Vermont \",\"Grand Isle County, Vermont \",\"Lamoille County, Vermont \",\"Orange County, Vermont \",\"Orleans County, Vermont \",\"Rutland County, Vermont \",\"Washington County, Vermont \",\"Windham County, Vermont \",\"Windsor County, Vermont \",\"Accomack County, Virginia \",\"Albemarle County, Virginia \",\"Alleghany County, Virginia \",\"Amelia County, Virginia \",\"Amherst County, Virginia \",\"Appomattox County, Virginia \",\"Arlington County, Virginia \",\"Augusta County, Virginia \",\"Bath County, Virginia \",\"Bedford County, Virginia \",\"Bland County, Virginia \",\"Botetourt County, Virginia \",\"Brunswick County, Virginia \",\"Buchanan County, Virginia \",\"Buckingham County, Virginia \",\"Campbell County, Virginia \",\"Caroline County, Virginia \",\"Carroll County, Virginia \",\"Charles City County, Virginia \",\"Charlotte County, Virginia \",\"Chesterfield County, Virginia \",\"Clarke County, Virginia \",\"Craig County, Virginia \",\"Culpeper County, Virginia \",\"Cumberland County, Virginia \",\"Dickenson County, Virginia \",\"Dinwiddie County, Virginia \",\"Essex County, Virginia \",\"Fairfax County, Virginia \",\"Fauquier County, Virginia \",\"Floyd County, Virginia \",\"Fluvanna County, Virginia \",\"Franklin County, Virginia \",\"Frederick County, Virginia \",\"Giles County, Virginia \",\"Gloucester County, Virginia \",\"Goochland County, Virginia \",\"Grayson County, Virginia \",\"Greene County, Virginia \",\"Greensville County, Virginia \",\"Halifax County, Virginia \",\"Hanover County, Virginia \",\"Henrico County, Virginia \",\"Henry County, Virginia \",\"Highland County, Virginia \",\"Isle of Wight County, Virginia \",\"James City County, Virginia \",\"King and Queen County, Virginia \",\"King George County, Virginia \",\"King William County, Virginia \",\"Lancaster County, Virginia \",\"Lee County, Virginia \",\"Loudoun County, Virginia \",\"Louisa County, Virginia \",\"Lunenburg County, Virginia \",\"Madison County, Virginia \",\"Mathews County, Virginia \",\"Mecklenburg County, Virginia \",\"Middlesex County, Virginia \",\"Montgomery County, Virginia \",\"Nelson County, Virginia \",\"New Kent County, Virginia \",\"Northampton County, Virginia \",\"Northumberland County, Virginia \",\"Nottoway County, Virginia \",\"Orange County, Virginia \",\"Page County, Virginia \",\"Patrick County, Virginia \",\"Pittsylvania County, Virginia \",\"Powhatan County, Virginia \",\"Prince Edward County, Virginia \",\"Prince George County, Virginia \",\"Prince William County, Virginia \",\"Pulaski County, Virginia \",\"Rappahannock County, Virginia \",\"Richmond County, Virginia \",\"Roanoke County, Virginia \",\"Rockbridge County, Virginia \",\"Rockingham County, Virginia \",\"Russell County, Virginia \",\"Scott County, Virginia \",\"Shenandoah County, Virginia \",\"Smyth County, Virginia \",\"Southampton County, Virginia \",\"Spotsylvania County, Virginia \",\"Stafford County, Virginia \",\"Surry County, Virginia \",\"Sussex County, Virginia \",\"Tazewell County, Virginia \",\"Warren County, Virginia \",\"Washington County, Virginia \",\"Westmoreland County, Virginia \",\"Wise County, Virginia \",\"Wythe County, Virginia \",\"York County, Virginia \",\"Alexandria, City of, Virginia \",\"Bedford, City of, Virginia \",\"Bristol, City of, Virginia \",\"Buena Vista, City of, Virginia \",\"Charlottesville, City of, Virginia \",\"Chesapeake, City of, Virginia \",\"Colonial Heights, City of, Virginia \",\"Covington, City of, Virginia \",\"Danville, City of, Virginia \",\"Emporia, City of, Virginia \",\"Fairfax, City of, Virginia \",\"Falls Church, City of, Virginia \",\"Franklin, City of, Virginia \",\"Fredericksburg, City of, Virginia \",\"Galax, City of, Virginia \",\"Hampton, City of, Virginia \",\"Harrisonburg, City of, Virginia \",\"Hopewell, City of, Virginia \",\"Lexington, City of, Virginia \",\"Lynchburg, City of, Virginia \",\"Manassas, City of, Virginia \",\"Manassas Park, City of, Virginia \",\"Martinsville, City of, Virginia \",\"Newport News, City of, Virginia \",\"Norfolk, City of, Virginia \",\"Norton, City of, Virginia \",\"Petersburg, City of, Virginia \",\"Poquoson, City of, Virginia \",\"Portsmouth, City of, Virginia \",\"Radford, City of, Virginia \",\"Richmond, City of, Virginia \",\"Roanoke, City of, Virginia \",\"Salem, City of, Virginia \",\"Staunton, City of, Virginia \",\"Suffolk, City of, Virginia \",\"Virginia Beach, City of, Virginia \",\"Waynesboro, City of, Virginia \",\"Williamsburg, City of, Virginia \",\"Winchester, City of, Virginia \",\"Adams County, Washington \",\"Asotin County, Washington \",\"Benton County, Washington \",\"Chelan County, Washington \",\"Clallam County, Washington \",\"Clark County, Washington \",\"Columbia County, Washington \",\"Cowlitz County, Washington \",\"Douglas County, Washington \",\"Ferry County, Washington \",\"Franklin County, Washington \",\"Garfield County, Washington \",\"Grant County, Washington \",\"Grays Harbor County, Washington \",\"Island County, Washington \",\"Jefferson County, Washington \",\"King County, Washington \",\"Kitsap County, Washington \",\"Kittitas County, Washington \",\"Klickitat County, Washington \",\"Lewis County, Washington \",\"Lincoln County, Washington \",\"Mason County, Washington \",\"Okanogan County, Washington \",\"Pacific County, Washington \",\"Pend Oreille County, Washington \",\"Pierce County, Washington \",\"San Juan County, Washington \",\"Skagit County, Washington \",\"Skamania County, Washington \",\"Snohomish County, Washington \",\"Spokane County, Washington \",\"Stevens County, Washington \",\"Thurston County, Washington \",\"Wahkiakum County, Washington \",\"Walla Walla County, Washington \",\"Whatcom County, Washington \",\"Whitman County, Washington \",\"Yakima County, Washington \",\"Barbour County, West Virginia \",\"Berkeley County, West Virginia \",\"Boone County, West Virginia \",\"Braxton County, West Virginia \",\"Brooke County, West Virginia \",\"Cabell County, West Virginia \",\"Calhoun County, West Virginia \",\"Clay County, West Virginia \",\"Doddridge County, West Virginia \",\"Fayette County, West Virginia \",\"Gilmer County, West Virginia \",\"Grant County, West Virginia \",\"Greenbrier County, West Virginia \",\"Hampshire County, West Virginia \",\"Hancock County, West Virginia \",\"Hardy County, West Virginia \",\"Harrison County, West Virginia \",\"Jackson County, West Virginia \",\"Jefferson County, West Virginia \",\"Kanawha County, West Virginia \",\"Lewis County, West Virginia \",\"Lincoln County, West Virginia \",\"Logan County, West Virginia \",\"McDowell County, West Virginia \",\"Marion County, West Virginia \",\"Marshall County, West Virginia \",\"Mason County, West Virginia \",\"Mercer County, West Virginia \",\"Mineral County, West Virginia \",\"Mingo County, West Virginia \",\"Monongalia County, West Virginia \",\"Monroe County, West Virginia \",\"Morgan County, West Virginia \",\"Nicholas County, West Virginia \",\"Ohio County, West Virginia \",\"Pendleton County, West Virginia \",\"Pleasants County, West Virginia \",\"Pocahontas County, West Virginia \",\"Preston County, West Virginia \",\"Putnam County, West Virginia \",\"Raleigh County, West Virginia \",\"Randolph County, West Virginia \",\"Ritchie County, West Virginia \",\"Roane County, West Virginia \",\"Summers County, West Virginia \",\"Taylor County, West Virginia \",\"Tucker County, West Virginia \",\"Tyler County, West Virginia \",\"Upshur County, West Virginia \",\"Wayne County, West Virginia \",\"Webster County, West Virginia \",\"Wetzel County, West Virginia \",\"Wirt County, West Virginia \",\"Wood County, West Virginia \",\"Wyoming County, West Virginia \",\"Adams County, Wisconsin \",\"Ashland County, Wisconsin \",\"Barron County, Wisconsin \",\"Bayfield County, Wisconsin \",\"Brown County, Wisconsin \",\"Buffalo County, Wisconsin \",\"Burnett County, Wisconsin \",\"Calumet County, Wisconsin \",\"Chippewa County, Wisconsin \",\"Clark County, Wisconsin \",\"Columbia County, Wisconsin \",\"Crawford County, Wisconsin \",\"Dane County, Wisconsin \",\"Dodge County, Wisconsin \",\"Door County, Wisconsin \",\"Douglas County, Wisconsin \",\"Dunn County, Wisconsin \",\"Eau Claire County, Wisconsin \",\"Florence County, Wisconsin \",\"Fond du Lac County, Wisconsin \",\"Forest County, Wisconsin \",\"Grant County, Wisconsin \",\"Green County, Wisconsin \",\"Green Lake County, Wisconsin \",\"Iowa County, Wisconsin \",\"Iron County, Wisconsin \",\"Jackson County, Wisconsin \",\"Jefferson County, Wisconsin \",\"Juneau County, Wisconsin \",\"Kenosha County, Wisconsin \",\"Kewaunee County, Wisconsin \",\"La Crosse County, Wisconsin \",\"Lafayette County, Wisconsin \",\"Langlade County, Wisconsin \",\"Lincoln County, Wisconsin \",\"Manitowoc County, Wisconsin \",\"Marathon County, Wisconsin \",\"Marinette County, Wisconsin \",\"Marquette County, Wisconsin \",\"Menominee County, Wisconsin \",\"Milwaukee County, Wisconsin \",\"Monroe County, Wisconsin \",\"Oconto County, Wisconsin \",\"Oneida County, Wisconsin \",\"Outagamie County, Wisconsin \",\"Ozaukee County, Wisconsin \",\"Pepin County, Wisconsin \",\"Pierce County, Wisconsin \",\"Polk County, Wisconsin \",\"Portage County, Wisconsin \",\"Price County, Wisconsin \",\"Racine County, Wisconsin \",\"Richland County, Wisconsin \",\"Rock County, Wisconsin \",\"Rusk County, Wisconsin \",\"St. Croix County, Wisconsin \",\"Sauk County, Wisconsin \",\"Sawyer County, Wisconsin \",\"Shawano County, Wisconsin \",\"Sheboygan County, Wisconsin \",\"Taylor County, Wisconsin \",\"Trempealeau County, Wisconsin \",\"Vernon County, Wisconsin \",\"Vilas County, Wisconsin \",\"Walworth County, Wisconsin \",\"Washburn County, Wisconsin \",\"Washington County, Wisconsin \",\"Waukesha County, Wisconsin \",\"Waupaca County, Wisconsin \",\"Waushara County, Wisconsin \",\"Winnebago County, Wisconsin \",\"Wood County, Wisconsin \",\"Albany County, Wyoming \",\"Big Horn County, Wyoming \",\"Campbell County, Wyoming \",\"Carbon County, Wyoming \",\"Converse County, Wyoming \",\"Crook County, Wyoming \",\"Fremont County, Wyoming \",\"Goshen County, Wyoming \",\"Hot Springs County, Wyoming \",\"Johnson County, Wyoming \",\"Laramie County, Wyoming \",\"Lincoln County, Wyoming \",\"Natrona County, Wyoming \",\"Niobrara County, Wyoming \",\"Park County, Wyoming \",\"Platte County, Wyoming \",\"Sheridan County, Wyoming \",\"Sublette County, Wyoming \",\"Sweetwater County, Wyoming \",\"Teton County, Wyoming \",\"Uinta County, Wyoming \",\"Washakie County, Wyoming \",\"Weston County, Wyoming \"];\n $('#county').autocomplete({\n source: availableTags,\n multiselect: true\n });\n $('#locationofInterest').autocomplete({\n source: availableTags,\n multiselect: true\n });\n });\n });\n\n if (typeof readyCallback === \"function\") readyCallback();\n};\n\nfor (var i = 0, l = docsToCheck.length; i < l; i++) {\n if (location.href.match(docsToCheck[i].pageRegex)) {\n jQuery(document).ready(function() {\n //remove form and add Marketo placeholder\n jQuery(docsToCheck[i].cssSelector).after('<form id=\"mktoForm_' + docsToCheck[i].formNumber + '\"></form>');\n\n function getScriptWithLoadHandler(src, callback) {\n var head = document.getElementsByTagName('head')[0];\n var scripts = document.getElementsByTagName(\"script\"),\n i, s = scripts[0];\n var newScript = document.createElement(\"script\");\n newScript.type = \"text/javascript\";\n newScript.async = true;\n newScript.src = src;\n newScript.onerror = function() {\n if (this.addEventListener)\n this.readyState = \"loaded\"\n };\n newScript.onload = newScript.onreadystatechange = function() {\n if (!this.readyState || this.readyState === \"complete\" || this.readyState === \"loaded\") {\n this.onload = this.onreadystatechange = null;\n if (this.addEventListener)\n this.readyState = \"loaded\";\n try {\n callback.call(this)\n } catch (e) {}\n }\n };\n head.appendChild(newScript);\n };\n getScriptWithLoadHandler(\"//pages.mko.cropscience.bayer.com/js/forms2/js/forms2.min.js\", function() {\n if (typeof window.MktoForms2 === \"object\") {\n MktoForms2.loadForm(\"//pages.mko.cropscience.bayer.com\", docsToCheck[i].marketoScriptId, docsToCheck[i].formNumber);\n applyMarketoStyling(function() {\n // execute any logic after styling is applied\n });\n }\n });\n });\n break;\n }\n}", "language": "javascript" } } ] }, { "id": "RLb056afc8f45c41ba8b97d757e19ca219", "name": "zPixel - GoogleAds | AllPages (Lewishybrids) | LibraryLoaded", "events": [ { "modulePath": "core/src/lib/events/libraryLoaded.js", "settings": { }, "ruleOrder": 50.0 } ], "conditions": [ { "modulePath": "core/src/lib/conditions/domain.js", "settings": { "domains": [ "lewishybrids.com" ] } } ], "actions": [ { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "<script async src=\"https://www.googletagmanager.com/gtag/js?id=DC-10290109\"></script>\n<script>\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n\n gtag('config', 'DC-10290109');\n</script>", "language": "html" } }, { "modulePath": "core/src/lib/actions/customCode.js", "settings": { "source": "gtag('event', 'conversion', {\n'allow_custom_scripts': true,\n'send_to': 'DC-10290109/lewis0/lewis+standard'\n});", "language": "javascript" } } ] }, { "id": "RL1310887cdb344f878a37e23a8440e46c", "name": "LatamCampaign - Page2ChoiceOfBayerProducts | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignPage2ChoiceOfBayerProducts" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar29", "type": "value", "value": "%event.detail.formName%" }, { "name": "eVar33", "type": "value", "value": "%event.detail.formStep%" }, { "name": "eVar70", "type": "value", "value": "%event.detail.tokenId%" } ], "events": [ { "name": "event28" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "page" } } ] }, { "id": "RL2708c07fcf6d4184a598b54e31bbfc49", "name": "LatamCampaign - Page3OnClickOfFinalizar | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignPage3OnClickOfFinalizar" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar29", "type": "value", "value": "%event.detail.formName%" }, { "name": "eVar70", "type": "value", "value": "%event.detail.tokenId%" } ], "events": [ { "name": "event21" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Page3 OnClickOfFinalizar", "linkType": "o" } } ] }, { "id": "RL293c5e25ae5f472babb62be9d6876029", "name": "LatamCampaign - Page1ChoiceOfCultivationContinue | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignPage1ChoiceOfCultivationContinue" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar29", "type": "value", "value": "%event.detail.formName%" }, { "name": "eVar70", "type": "value", "value": "%event.detail.tokenId%" }, { "name": "eVar71", "type": "value", "value": "%event.detail.pageInteraction%" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "page" } } ] }, { "id": "RL4720b9a6737a4feba0ec5a31d429a55a", "name": "LatamCampaign - Page4Confirmation | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignPage4Confirmation" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar29", "type": "value", "value": "%event.detail.formName%" }, { "name": "eVar33", "type": "value", "value": "%event.detail.formStep%" }, { "name": "eVar70", "type": "value", "value": "%event.detail.tokenId%" } ], "events": [ { "name": "event30" }, { "name": "event32" }, { "name": "event192" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "page" } } ] }, { "id": "RL76996a4707ee4c60adf7c5e54a67f928", "name": "LatamCampaign - ProductString | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignProductString" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.linkTrackVars = "products"; s.products = event.detail.productString; } }, "trackerProperties": { "events": [ { "name": "event196" }, { "name": "event197" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Products", "linkType": "o" } } ] }, { "id": "RL8e016bbfbf68441f9667bba270ea75a5", "name": "LatamCampaign - Page5PartnerBenefit | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignPage5PartnerBenefit" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar29", "type": "value", "value": "%event.detail.formName%" }, { "name": "eVar33", "type": "value", "value": "%event.detail.formStep%" }, { "name": "eVar70", "type": "value", "value": "%event.detail.tokenId%" } ], "events": [ { "name": "event193" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "page" } } ] }, { "id": "RL9e8131135778463eab244a6a12dfbbc7", "name": "LatamCampaign - Page2ChoiceOfBayerProductsContinue | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignPage2ChoiceOfBayerProductsContinue" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "customSetup": { "source": function(event, s) { s.linkTrackVars = "events"; s.linkTrackEvents = "event194,event195"; if( event.detail.benefitType == "Points" ) { s.events = "event194=" + event.detail.pointsValue; } else if (event.detail.benefitType == "Dinheiro" ) { s.events = "event195=" + + event.detail.dinheiroValue; } } }, "trackerProperties": { "eVars": [ { "name": "eVar29", "type": "value", "value": "%event.detail.formName%" }, { "name": "eVar70", "type": "value", "value": "%event.detail.tokenId%" }, { "name": "eVar72", "type": "value", "value": "%event.detail.benefitType%" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Page2 ChoiceOfBayerProducts Continue", "linkType": "o" } } ] }, { "id": "RLa6b0ea734f6d4b7cbff66195ba50eaa1", "name": "LatamCampaign - Page5PartnerBenefitStateCityDropdowns | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignPage5PartnerBenefitStateCityDropdowns" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar29", "type": "value", "value": "%event.detail.formName%" }, { "name": "eVar70", "type": "value", "value": "%event.detail.tokenId%" }, { "name": "eVar71", "type": "value", "value": "%event.detail.formValues%" } ], "events": [ { "name": "event21" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Page5 PartnerBenefitStateCityDropdowns", "linkType": "o" } } ] }, { "id": "RLb3ca56e7a553440e9464d80d48dc3975", "name": "LatamCampaign - WhatsappClicks | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignWhatsappClicks" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar29", "type": "value", "value": "%event.detail.formName%" }, { "name": "eVar70", "type": "value", "value": "%event.detail.tokenId%" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Whatsapp link click", "linkType": "o" } } ] }, { "id": "RLcae2532b604b4889913ed40d9b5d987e", "name": "LatamCampaign - Page1ChoiceOfCultivation | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignPage1ChoiceOfCultivation" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar29", "type": "value", "value": "%event.detail.formName%" }, { "name": "eVar33", "type": "value", "value": "%event.detail.formStep%" }, { "name": "eVar70", "type": "value", "value": "%event.detail.tokenId%" } ], "events": [ { "name": "event28" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "page" } } ] }, { "id": "RLec61b599a15143fdb0759f31e010a794", "name": "LatamCampaign - Page3BenefitsBasket | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignPage3BenefitsBasket" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar29", "type": "value", "value": "%event.detail.formName%" }, { "name": "eVar33", "type": "value", "value": "%event.detail.formStep%" }, { "name": "eVar70", "type": "value", "value": "%event.detail.tokenId%" } ], "events": [ { "name": "event191" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "page" } } ] }, { "id": "RLeff4b5c08ab64649b8356719cb58c66c", "name": "LatamCampaign - GlobalCustomLinkTrackingForCTAs | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignGlobalCustomLinkTrackingForCTAs" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "%event.detail.buttonText%", "linkType": "o" } } ] }, { "id": "RLf44f2fdb76de4a5daf300013e224229e", "name": "LatamCampaign - Page4OnClickOfFinalizar | DirectCall | AA", "events": [ { "modulePath": "core/src/lib/events/directCall.js", "settings": { "identifier": "latamCampaignPage4OnClickOfFinalizar" }, "ruleOrder": 50.0 } ], "conditions": [ ], "actions": [ { "modulePath": "adobe-analytics/src/lib/actions/clearVariables.js", "settings": { } }, { "modulePath": "adobe-analytics/src/lib/actions/setVariables.js", "settings": { "trackerProperties": { "eVars": [ { "name": "eVar29", "type": "value", "value": "%event.detail.formName%" }, { "name": "eVar70", "type": "value", "value": "%event.detail.tokenId%" } ] } } }, { "modulePath": "adobe-analytics/src/lib/actions/sendBeacon.js", "settings": { "type": "link", "linkName": "Page4 OnClickOfFinalizar", "linkType": "o" } } ] } ] } })(); var _satellite = (function () { 'use strict'; if (!window.atob) { console.warn('Adobe Launch is unsupported in IE 9 and below.'); return; } var reactorDocument = document; /* object-assign (c) Sindre Sorhus @license MIT */ /* eslint-disable no-unused-vars */ var getOwnPropertySymbols = Object.getOwnPropertySymbols; var hasOwnProperty = Object.prototype.hasOwnProperty; var propIsEnumerable = Object.prototype.propertyIsEnumerable; function toObject(val) { if (val === null || val === undefined) { throw new TypeError('Object.assign cannot be called with null or undefined'); } return Object(val); } function shouldUseNative() { try { if (!Object.assign) { return false; } // Detect buggy property enumeration order in older V8 versions. // https://bugs.chromium.org/p/v8/issues/detail?id=4118 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers test1[5] = 'de'; if (Object.getOwnPropertyNames(test1)[0] === '5') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test2 = {}; for (var i = 0; i < 10; i++) { test2['_' + String.fromCharCode(i)] = i; } var order2 = Object.getOwnPropertyNames(test2).map(function (n) { return test2[n]; }); if (order2.join('') !== '0123456789') { return false; } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 var test3 = {}; 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { test3[letter] = letter; }); if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { return false; } return true; } catch (err) { // We don't expect any of the above to throw, but better to be safe. return false; } } var objectAssign = shouldUseNative() ? Object.assign : function (target, source) { var from; var to = toObject(target); var symbols; for (var s = 1; s < arguments.length; s++) { from = Object(arguments[s]); for (var key in from) { if (hasOwnProperty.call(from, key)) { to[key] = from[key]; } } if (getOwnPropertySymbols) { symbols = getOwnPropertySymbols(from); for (var i = 0; i < symbols.length; i++) { if (propIsEnumerable.call(from, symbols[i])) { to[symbols[i]] = from[symbols[i]]; } } } } return to; }; var reactorObjectAssign = objectAssign; var reactorWindow = window; /*************************************************************************************** * (c) 2021 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var createDynamicHostResolver = function (turbineEmbedCode, cdnAllowList, debugController) { // even an empty list is flagging to us that we're trying to enforce dynamic var isDynamicEnforced = Array.isArray(cdnAllowList); var shouldAugment = Boolean(isDynamicEnforced && turbineEmbedCode); // TODO: web only? I think embedded TVs wouldn't have // __satellite.container.dynamicEnforced turned on var turbineUrl = document.createElement('a'); turbineUrl.href = turbineEmbedCode; if ( (!/^https?:\/\/.*/.test(turbineEmbedCode) || !turbineUrl.host) && isDynamicEnforced ) { var missingEmbedCodeError = new Error( 'Unable to find the Library Embed Code for Dynamic Host Resolution.' ); missingEmbedCodeError.code = 'dynamic_host_resolver_constructor_error'; throw missingEmbedCodeError; } if (isDynamicEnforced && cdnAllowList.indexOf(turbineUrl.hostname) === -1) { var dynamicDeniedError = new Error( 'This library is not authorized for this domain. ' + 'Please contact your CSM for more information.' ); dynamicDeniedError.code = 'dynamic_host_not_allowed'; throw dynamicDeniedError; } /** * Returns the host of the Turbine embed code, or an empty string if Dynamic Host * is not enabled. * @returns {string} */ var memoizedHostResult; var getTurbineHost = function () { if (memoizedHostResult != null) { return memoizedHostResult; } if (shouldAugment) { // be sure we always force https to Adobe managed domains. // IE 10/11 returns the :443 protocol when modern browsers don't, so this replacement // is bringing every browser in line with the same return value var sanitizedHost = turbineUrl.host; if (/:80$/.test(sanitizedHost)) { sanitizedHost = sanitizedHost.replace(':80', ''); } else if (/:80\/$/.test(sanitizedHost)) { sanitizedHost = sanitizedHost.replace(':80/', ''); } else if (/:443$/.test(sanitizedHost)) { sanitizedHost = sanitizedHost.replace(':443', ''); } else if (/:443\/$/.test(sanitizedHost)) { sanitizedHost = sanitizedHost.replace(':443/', ''); } memoizedHostResult = 'https://' + sanitizedHost; } else { memoizedHostResult = ''; } return memoizedHostResult; }; /** * Returns a url decorated with the host of the Turbine embed code. If Dynamic host * is disabled, the original sourceUrl is returned unmodified. * @param sourceUrl * @returns {string|*} */ var decorateWithDynamicHost = function (sourceUrl) { if (shouldAugment && typeof sourceUrl === 'string') { var urlParts = [ getTurbineHost(), sourceUrl.charAt(0) === '/' ? sourceUrl.slice(1) : sourceUrl ]; return urlParts.join('/'); } return sourceUrl; }; var dynamicHostResolver = { getTurbineHost: getTurbineHost, decorateWithDynamicHost: decorateWithDynamicHost, get isDynamicEnforced() { return isDynamicEnforced; } }; if (reactorWindow) { debugController.onDebugChanged(function (isEnabled) { if (isEnabled) { reactorWindow.dynamicHostResolver = dynamicHostResolver; } else { delete reactorWindow.dynamicHostResolver; } }); } return dynamicHostResolver; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ /** * Rules can be ordered by users at the event type level. For example, assume both Rule A and Rule B * use the Library Loaded and Window Loaded event types. Rule A can be ordered to come before Rule B * on Library Loaded but after Rule B on Window Loaded. * * Order values are integers and act more as a priority. In other words, multiple rules can have the * same order value. If they have the same order value, their order of execution should be * considered nondetermistic. * * @param {Array} rules * @returns {Array} An ordered array of rule-event pair objects. */ var buildRuleExecutionOrder = function (rules) { var ruleEventPairs = []; rules.forEach(function (rule) { if (rule.events) { rule.events.forEach(function (event) { ruleEventPairs.push({ rule: rule, event: event }); }); } }); return ruleEventPairs.sort(function (ruleEventPairA, ruleEventPairB) { return ruleEventPairA.event.ruleOrder - ruleEventPairB.event.ruleOrder; }); }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var DEBUG_LOCAL_STORAGE_NAME = 'debug'; var createDebugController = function (localStorage, logger) { var getPersistedDebugEnabled = function () { return localStorage.getItem(DEBUG_LOCAL_STORAGE_NAME) === 'true'; }; var setPersistedDebugEnabled = function (enabled) { localStorage.setItem(DEBUG_LOCAL_STORAGE_NAME, enabled); }; var debugChangedCallbacks = []; var onDebugChanged = function (callback) { debugChangedCallbacks.push(callback); }; logger.outputEnabled = getPersistedDebugEnabled(); return { onDebugChanged: onDebugChanged, getDebugEnabled: getPersistedDebugEnabled, setDebugEnabled: function (enabled) { if (getPersistedDebugEnabled() !== enabled) { setPersistedDebugEnabled(enabled); logger.outputEnabled = enabled; debugChangedCallbacks.forEach(function (callback) { callback(enabled); }); } } }; }; /*************************************************************************************** * (c) 2018 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var MODULE_NOT_FUNCTION_ERROR = 'Module did not export a function.'; var createExecuteDelegateModule = function ( moduleProvider, replaceTokens, settingsFileTransformer ) { return function (moduleDescriptor, syntheticEvent, moduleCallParameters) { moduleCallParameters = moduleCallParameters || []; var moduleExports = moduleProvider.getModuleExports( moduleDescriptor.modulePath ); if (typeof moduleExports !== 'function') { throw new Error(MODULE_NOT_FUNCTION_ERROR); } // dynamically replace the host on the module settings var moduleDefinition = moduleProvider.getModuleDefinition( moduleDescriptor.modulePath ); // We're transforming URLs in-place to ensure that the developer's settings object reference // is the same object reference as moduleDescriptor.settings. Therefore, we must only transform // the settings one time and save a reference saying that we've done that. We're saving this in // the module descriptor of each event, condition, and action so that we aren't modifying the // settings object. var moduleSettings = moduleDescriptor.settings || {}; if ( !moduleDescriptor.hasTransformedFilePaths && moduleDefinition.filePaths ) { settingsFileTransformer( moduleSettings, moduleDefinition.filePaths, moduleDescriptor.modulePath ); moduleDescriptor.hasTransformedFilePaths = true; } // replace tokens var moduleDescriptorSettings = replaceTokens( moduleSettings, syntheticEvent ); return moduleExports .bind(null, moduleDescriptorSettings) .apply(null, moduleCallParameters); }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ /** * "Cleans" text by trimming the string and removing spaces and newlines. * @param {string} str The string to clean. * @returns {string} */ var cleanText = function (str) { return typeof str === 'string' ? str.replace(/\s+/g, ' ').trim() : str; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ /** * Log levels. * @readonly * @enum {string} * @private */ var levels = { LOG: 'log', INFO: 'info', DEBUG: 'debug', WARN: 'warn', ERROR: 'error' }; /** * Rocket unicode surrogate pair. * @type {string} */ var ROCKET = '\uD83D\uDE80'; /** * The user's internet explorer version. If they're not running internet explorer, then it should * be NaN. * @type {Number} */ var ieVersion = parseInt( (/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1] ); /** * Prefix to use on all messages. The rocket unicode doesn't work on IE 10. * @type {string} */ var launchPrefix = ieVersion === 10 ? '[Launch]' : ROCKET; /** * Whether logged messages should be output to the console. * @type {boolean} */ var outputEnabled = false; /** * Processes a log message. * @param {string} level The level of message to log. * @param {...*} arg Any argument to be logged. * @private */ var process = function (level) { if (outputEnabled && window.console) { var logArguments = Array.prototype.slice.call(arguments, 1); logArguments.unshift(launchPrefix); // window.debug is unsupported in IE 10 if (level === levels.DEBUG && !window.console[level]) { level = levels.INFO; } window.console[level].apply(window.console, logArguments); } }; /** * Outputs a message to the web console. * @param {...*} arg Any argument to be logged. */ var log = process.bind(null, levels.LOG); /** * Outputs informational message to the web console. In some browsers a small "i" icon is * displayed next to these items in the web console's log. * @param {...*} arg Any argument to be logged. */ var info = process.bind(null, levels.INFO); /** * Outputs debug message to the web console. In browsers that do not support * console.debug, console.info is used instead. * @param {...*} arg Any argument to be logged. */ var debug = process.bind(null, levels.DEBUG); /** * Outputs a warning message to the web console. * @param {...*} arg Any argument to be logged. */ var warn = process.bind(null, levels.WARN); /** * Outputs an error message to the web console. * @param {...*} arg Any argument to be logged. */ var error = process.bind(null, levels.ERROR); /** * Outputs a warning message to the web console. * @param {...*} arg Any argument to be logged. */ var logDeprecation = function () { var wasEnabled = outputEnabled; outputEnabled = true; process.apply( null, Array.prototype.concat(levels.WARN, Array.prototype.slice.call(arguments)) ); if (!wasEnabled) { outputEnabled = false; } }; var logger = { log: log, info: info, debug: debug, warn: warn, error: error, deprecation: logDeprecation, /** * Whether logged messages should be output to the console. * @type {boolean} */ get outputEnabled() { return outputEnabled; }, set outputEnabled(value) { outputEnabled = value; }, /** * Creates a logging utility that only exposes logging functionality and prefixes all messages * with an identifier. */ createPrefixedLogger: function (identifier) { var loggerSpecificPrefix = '[' + identifier + ']'; return { log: log.bind(null, loggerSpecificPrefix), info: info.bind(null, loggerSpecificPrefix), debug: debug.bind(null, loggerSpecificPrefix), warn: warn.bind(null, loggerSpecificPrefix), error: error.bind(null, loggerSpecificPrefix) }; } }; var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function getAugmentedNamespace(n) { if (n.__esModule) return n; var a = Object.defineProperty({}, '__esModule', {value: true}); Object.keys(n).forEach(function (k) { var d = Object.getOwnPropertyDescriptor(n, k); Object.defineProperty(a, k, d.get ? d : { enumerable: true, get: function () { return n[k]; } }); }); return a; } function createCommonjsModule(fn) { var module = { exports: {} }; return fn(module, module.exports), module.exports; } /*! * JavaScript Cookie v2.2.1 * https://github.com/js-cookie/js-cookie * * Copyright 2006, 2015 Klaus Hartl & Fagner Brack * Released under the MIT license */ var js_cookie = createCommonjsModule(function (module, exports) { (function (factory) { var registeredInModuleLoader; { module.exports = factory(); registeredInModuleLoader = true; } if (!registeredInModuleLoader) { var OldCookies = window.Cookies; var api = window.Cookies = factory(); api.noConflict = function () { window.Cookies = OldCookies; return api; }; } }(function () { function extend () { var i = 0; var result = {}; for (; i < arguments.length; i++) { var attributes = arguments[ i ]; for (var key in attributes) { result[key] = attributes[key]; } } return result; } function decode (s) { return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent); } function init (converter) { function api() {} function set (key, value, attributes) { if (typeof document === 'undefined') { return; } attributes = extend({ path: '/' }, api.defaults, attributes); if (typeof attributes.expires === 'number') { attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5); } // We're using "expires" because "max-age" is not supported by IE attributes.expires = attributes.expires ? attributes.expires.toUTCString() : ''; try { var result = JSON.stringify(value); if (/^[\{\[]/.test(result)) { value = result; } } catch (e) {} value = converter.write ? converter.write(value, key) : encodeURIComponent(String(value)) .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); key = encodeURIComponent(String(key)) .replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent) .replace(/[\(\)]/g, escape); var stringifiedAttributes = ''; for (var attributeName in attributes) { if (!attributes[attributeName]) { continue; } stringifiedAttributes += '; ' + attributeName; if (attributes[attributeName] === true) { continue; } // Considers RFC 6265 section 5.2: // ... // 3. If the remaining unparsed-attributes contains a %x3B (";") // character: // Consume the characters of the unparsed-attributes up to, // not including, the first %x3B (";") character. // ... stringifiedAttributes += '=' + attributes[attributeName].split(';')[0]; } return (document.cookie = key + '=' + value + stringifiedAttributes); } function get (key, json) { if (typeof document === 'undefined') { return; } var jar = {}; // To prevent the for loop in the first place assign an empty array // in case there are no cookies at all. var cookies = document.cookie ? document.cookie.split('; ') : []; var i = 0; for (; i < cookies.length; i++) { var parts = cookies[i].split('='); var cookie = parts.slice(1).join('='); if (!json && cookie.charAt(0) === '"') { cookie = cookie.slice(1, -1); } try { var name = decode(parts[0]); cookie = (converter.read || converter)(cookie, name) || decode(cookie); if (json) { try { cookie = JSON.parse(cookie); } catch (e) {} } jar[name] = cookie; if (key === name) { break; } } catch (e) {} } return key ? jar[key] : jar; } api.set = set; api.get = function (key) { return get(key, false /* read as raw */); }; api.getJSON = function (key) { return get(key, true /* read as json */); }; api.remove = function (key, attributes) { set(key, '', extend(attributes, { expires: -1 })); }; api.defaults = {}; api.withConverter = init; return api; } return init(function () {}); })); }); /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ // js-cookie has other methods that we haven't exposed here. By limiting the exposed API, // we have a little more flexibility to change the underlying implementation later. If clear // use cases come up for needing the other methods js-cookie exposes, we can re-evaluate whether // we want to expose them here. var reactorCookie = { get: js_cookie.get, set: js_cookie.set, remove: js_cookie.remove }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var NAMESPACE = 'com.adobe.reactor.'; var getNamespacedStorage = function (storageType, additionalNamespace) { var finalNamespace = NAMESPACE + (additionalNamespace || ''); // When storage is disabled on Safari, the mere act of referencing window.localStorage // or window.sessionStorage throws an error. For this reason, we wrap in a try-catch. return { /** * Reads a value from storage. * @param {string} name The name of the item to be read. * @returns {string} */ getItem: function (name) { try { return reactorWindow[storageType].getItem(finalNamespace + name); } catch (e) { return null; } }, /** * Saves a value to storage. * @param {string} name The name of the item to be saved. * @param {string} value The value of the item to be saved. * @returns {boolean} Whether the item was successfully saved to storage. */ setItem: function (name, value) { try { reactorWindow[storageType].setItem(finalNamespace + name, value); return true; } catch (e) { return false; } } }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var COOKIE_PREFIX = '_sdsat_'; var DATA_ELEMENTS_NAMESPACE = 'dataElements.'; var MIGRATED_KEY = 'dataElementCookiesMigrated'; var reactorLocalStorage = getNamespacedStorage('localStorage'); var dataElementSessionStorage = getNamespacedStorage( 'sessionStorage', DATA_ELEMENTS_NAMESPACE ); var dataElementLocalStorage = getNamespacedStorage( 'localStorage', DATA_ELEMENTS_NAMESPACE ); var storageDurations = { PAGEVIEW: 'pageview', SESSION: 'session', VISITOR: 'visitor' }; var pageviewCache = {}; var serialize = function (value) { var serialized; try { // On some browsers, with some objects, errors will be thrown during serialization. For example, // in Chrome with the window object, it will throw "TypeError: Converting circular structure // to JSON" serialized = JSON.stringify(value); } catch (e) {} return serialized; }; var setValue = function (key, storageDuration, value) { var serializedValue; switch (storageDuration) { case storageDurations.PAGEVIEW: pageviewCache[key] = value; return; case storageDurations.SESSION: serializedValue = serialize(value); if (serializedValue) { dataElementSessionStorage.setItem(key, serializedValue); } return; case storageDurations.VISITOR: serializedValue = serialize(value); if (serializedValue) { dataElementLocalStorage.setItem(key, serializedValue); } return; } }; var getValue = function (key, storageDuration) { var value; // It should consistently return the same value if no stored item was found. We chose null, // though undefined could be a reasonable value as well. switch (storageDuration) { case storageDurations.PAGEVIEW: return pageviewCache.hasOwnProperty(key) ? pageviewCache[key] : null; case storageDurations.SESSION: value = dataElementSessionStorage.getItem(key); return value === null ? value : JSON.parse(value); case storageDurations.VISITOR: value = dataElementLocalStorage.getItem(key); return value === null ? value : JSON.parse(value); } }; // Remove when migration period has ended. We intentionally leave cookies as they are so that if // DTM is running on the same domain it can still use the persisted values. Our migration strategy // is essentially copying data from cookies and then diverging the storage mechanism between // DTM and Launch (DTM uses cookies and Launch uses session and local storage). var migrateDataElement = function (dataElementName, storageDuration) { var storedValue = reactorCookie.get(COOKIE_PREFIX + dataElementName); if (storedValue !== undefined) { setValue(dataElementName, storageDuration, storedValue); } }; var migrateCookieData = function (dataElements) { if (!reactorLocalStorage.getItem(MIGRATED_KEY)) { Object.keys(dataElements).forEach(function (dataElementName) { migrateDataElement( dataElementName, dataElements[dataElementName].storageDuration ); }); reactorLocalStorage.setItem(MIGRATED_KEY, true); } }; var dataElementSafe = { setValue: setValue, getValue: getValue, migrateCookieData: migrateCookieData }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var getErrorMessage = function ( dataDef, dataElementName, errorMessage, errorStack ) { return ( 'Failed to execute data element module ' + dataDef.modulePath + ' for data element ' + dataElementName + '. ' + errorMessage + (errorStack ? '\n' + errorStack : '') ); }; var createGetDataElementValue = function ( moduleProvider, getDataElementDefinition, replaceTokens, undefinedVarsReturnEmpty, settingsFileTransformer ) { return function (name, syntheticEvent) { var dataDef = getDataElementDefinition(name); if (!dataDef) { return undefinedVarsReturnEmpty ? '' : undefined; } var storageDuration = dataDef.storageDuration; var moduleExports; var moduleDefinition; try { moduleExports = moduleProvider.getModuleExports(dataDef.modulePath); moduleDefinition = moduleProvider.getModuleDefinition(dataDef.modulePath); } catch (e) { logger.error(getErrorMessage(dataDef, name, e.message, e.stack)); return; } if (typeof moduleExports !== 'function') { logger.error( getErrorMessage(dataDef, name, 'Module did not export a function.') ); return; } var value; var dataElementSettings = dataDef.settings || {}; if (!dataDef.hasTransformedFilePaths && moduleDefinition.filePaths) { settingsFileTransformer( dataElementSettings, moduleDefinition.filePaths, dataDef.modulePath ); dataDef.hasTransformedFilePaths = true; } try { value = moduleExports( replaceTokens(dataElementSettings, syntheticEvent), syntheticEvent ); } catch (e) { logger.error(getErrorMessage(dataDef, name, e.message, e.stack)); return; } if (storageDuration) { if (value != null) { dataElementSafe.setValue(name, storageDuration, value); } else { value = dataElementSafe.getValue(name, storageDuration); } } if (value == null && dataDef.defaultValue != null) { value = dataDef.defaultValue; } if (typeof value === 'string') { if (dataDef.cleanText) { value = cleanText(value); } if (dataDef.forceLowerCase) { value = value.toLowerCase(); } } return value; }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var specialPropertyAccessors = { text: function (obj) { return obj.textContent; }, cleanText: function (obj) { return cleanText(obj.textContent); } }; /** * This returns the value of a property at a given path. For example, a <code>path<code> of * <code>foo.bar</code> will return the value of <code>obj.foo.bar</code>. * * In addition, if <code>path</code> is <code>foo.bar.getAttribute(unicorn)</code> and * <code>obj.foo.bar</code> has a method named <code>getAttribute</code>, the method will be * called with a value of <code>"unicorn"</code> and the value will be returned. * * Also, if <code>path</code> is <code>foo.bar.@text</code> or other supported properties * beginning with <code>@</code>, a special accessor will be used. * * @param host * @param path * @param supportSpecial * @returns {*} */ var getObjectProperty = function (host, propChain, supportSpecial) { var value = host; var attrMatch; for (var i = 0, len = propChain.length; i < len; i++) { if (value == null) { return undefined; } var prop = propChain[i]; if (supportSpecial && prop.charAt(0) === '@') { var specialProp = prop.slice(1); value = specialPropertyAccessors[specialProp](value); continue; } if ( value.getAttribute && (attrMatch = prop.match(/^getAttribute\((.+)\)$/)) ) { var attr = attrMatch[1]; value = value.getAttribute(attr); continue; } value = value[prop]; } return value; }; /** * Returns the value of a variable. * @param {string} variable * @param {Object} [syntheticEvent] A synthetic event. Only required when using %event... %this... * or %target... * @returns {*} */ var createGetVar = function ( customVars, getDataElementDefinition, getDataElementValue ) { return function (variable, syntheticEvent) { var value; if (getDataElementDefinition(variable)) { // Accessing nested properties of a data element using dot-notation is unsupported because // users can currently create data elements with periods in the name. value = getDataElementValue(variable, syntheticEvent); } else { var propChain = variable.split('.'); var variableHostName = propChain.shift(); if (variableHostName === 'this') { if (syntheticEvent) { // I don't know why this is the only one that supports special properties, but that's the // way it was in Satellite. value = getObjectProperty(syntheticEvent.element, propChain, true); } } else if (variableHostName === 'event') { if (syntheticEvent) { value = getObjectProperty(syntheticEvent, propChain); } } else if (variableHostName === 'target') { if (syntheticEvent) { value = getObjectProperty(syntheticEvent.target, propChain); } } else { value = getObjectProperty(customVars[variableHostName], propChain); } } return value; }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ /** * Determines if the provided name is a valid variable, where the variable * can be a data element, element, event, target, or custom var. * @param variableName * @returns {boolean} */ var createIsVar = function (customVars, getDataElementDefinition) { return function (variableName) { var nameBeforeDot = variableName.split('.')[0]; return Boolean( getDataElementDefinition(variableName) || nameBeforeDot === 'this' || nameBeforeDot === 'event' || nameBeforeDot === 'target' || customVars.hasOwnProperty(nameBeforeDot) ); }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var extractModuleExports = function (script, require, turbine) { var module = { exports: {} }; script.call(module.exports, module, module.exports, require, turbine); return module.exports; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var createModuleProvider = function () { var moduleByReferencePath = {}; var getModule = function (referencePath) { var module = moduleByReferencePath[referencePath]; if (!module) { throw new Error('Module ' + referencePath + ' not found.'); } return module; }; var registerModule = function ( referencePath, moduleDefinition, extensionName, require, turbine ) { var module = { definition: moduleDefinition, extensionName: extensionName, require: require, turbine: turbine }; module.require = require; moduleByReferencePath[referencePath] = module; }; var hydrateCache = function () { Object.keys(moduleByReferencePath).forEach(function (referencePath) { try { getModuleExports(referencePath); } catch (e) { var errorMessage = 'Error initializing module ' + referencePath + '. ' + e.message + (e.stack ? '\n' + e.stack : ''); logger.error(errorMessage); } }); }; var getModuleExports = function (referencePath) { var module = getModule(referencePath); // Using hasOwnProperty instead of a falsey check because the module could export undefined // in which case we don't want to execute the module each time the exports is requested. if (!module.hasOwnProperty('exports')) { module.exports = extractModuleExports( module.definition.script, module.require, module.turbine ); } return module.exports; }; var getModuleDefinition = function (referencePath) { return getModule(referencePath).definition; }; var getModuleExtensionName = function (referencePath) { return getModule(referencePath).extensionName; }; return { registerModule: registerModule, hydrateCache: hydrateCache, getModuleExports: getModuleExports, getModuleDefinition: getModuleDefinition, getModuleExtensionName: getModuleExtensionName }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var warningLogged = false; var createNotifyMonitors = function (_satellite) { return function (type, event) { var monitors = _satellite._monitors; if (monitors) { if (!warningLogged) { logger.warn( 'The _satellite._monitors API may change at any time and should only ' + 'be used for debugging.' ); warningLogged = true; } monitors.forEach(function (monitor) { if (monitor[type]) { monitor[type](event); } }); } }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ /** * Replacing any variable tokens (%myDataElement%, %this.foo%, etc.) with their associated values. * A new string, object, or array will be created; the thing being processed will never be * modified. * @param {*} thing Thing potentially containing variable tokens. Objects and arrays will be * deeply processed. * @param {HTMLElement} [element] Associated HTML element. Used for special tokens * (%this.something%). * @param {Object} [event] Associated event. Used for special tokens (%event.something%, * %target.something%) * @returns {*} A processed value. */ var createReplaceTokens = function (isVar, getVar, undefinedVarsReturnEmpty) { var replaceTokensInString; var replaceTokensInObject; var replaceTokensInArray; var replaceTokens; var variablesBeingRetrieved = []; var getVarValue = function (token, variableName, syntheticEvent) { if (!isVar(variableName)) { return token; } variablesBeingRetrieved.push(variableName); var val = getVar(variableName, syntheticEvent); variablesBeingRetrieved.pop(); return val == null && undefinedVarsReturnEmpty ? '' : val; }; /** * Perform variable substitutions to a string where tokens are specified in the form %foo%. * If the only content of the string is a single data element token, then the raw data element * value will be returned instead. * * @param str {string} The string potentially containing data element tokens. * @param element {HTMLElement} The element to use for tokens in the form of %this.property%. * @param event {Object} The event object to use for tokens in the form of %target.property%. * @returns {*} */ replaceTokensInString = function (str, syntheticEvent) { // Is the string a single data element token and nothing else? var result = /^%([^%]+)%$/.exec(str); if (result) { return getVarValue(str, result[1], syntheticEvent); } else { return str.replace(/%(.+?)%/g, function (token, variableName) { return getVarValue(token, variableName, syntheticEvent); }); } }; replaceTokensInObject = function (obj, syntheticEvent) { var ret = {}; var keys = Object.keys(obj); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = obj[key]; ret[key] = replaceTokens(value, syntheticEvent); } return ret; }; replaceTokensInArray = function (arr, syntheticEvent) { var ret = []; for (var i = 0, len = arr.length; i < len; i++) { ret.push(replaceTokens(arr[i], syntheticEvent)); } return ret; }; replaceTokens = function (thing, syntheticEvent) { if (typeof thing === 'string') { return replaceTokensInString(thing, syntheticEvent); } else if (Array.isArray(thing)) { return replaceTokensInArray(thing, syntheticEvent); } else if (typeof thing === 'object' && thing !== null) { return replaceTokensInObject(thing, syntheticEvent); } return thing; }; return function (thing, syntheticEvent) { // It's possible for a data element to reference another data element. Because of this, // we need to prevent circular dependencies from causing an infinite loop. if (variablesBeingRetrieved.length > 10) { logger.error( 'Data element circular reference detected: ' + variablesBeingRetrieved.join(' -> ') ); return thing; } return replaceTokens(thing, syntheticEvent); }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var createSetCustomVar = function (customVars) { return function () { if (typeof arguments[0] === 'string') { customVars[arguments[0]] = arguments[1]; } else if (arguments[0]) { // assume an object literal var mapping = arguments[0]; for (var key in mapping) { customVars[key] = mapping[key]; } } }; }; /** * @this {Promise} */ function finallyConstructor(callback) { var constructor = this.constructor; return this.then( function(value) { // @ts-ignore return constructor.resolve(callback()).then(function() { return value; }); }, function(reason) { // @ts-ignore return constructor.resolve(callback()).then(function() { // @ts-ignore return constructor.reject(reason); }); } ); } // Store setTimeout reference so promise-polyfill will be unaffected by // other code modifying setTimeout (like sinon.useFakeTimers()) var setTimeoutFunc = setTimeout; function isArray(x) { return Boolean(x && typeof x.length !== 'undefined'); } function noop() {} // Polyfill for Function.prototype.bind function bind(fn, thisArg) { return function() { fn.apply(thisArg, arguments); }; } /** * @constructor * @param {Function} fn */ function Promise(fn) { if (!(this instanceof Promise)) throw new TypeError('Promises must be constructed via new'); if (typeof fn !== 'function') throw new TypeError('not a function'); /** @type {!number} */ this._state = 0; /** @type {!boolean} */ this._handled = false; /** @type {Promise|undefined} */ this._value = undefined; /** @type {!Array<!Function>} */ this._deferreds = []; doResolve(fn, this); } function handle(self, deferred) { while (self._state === 3) { self = self._value; } if (self._state === 0) { self._deferreds.push(deferred); return; } self._handled = true; Promise._immediateFn(function() { var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; if (cb === null) { (self._state === 1 ? resolve : reject)(deferred.promise, self._value); return; } var ret; try { ret = cb(self._value); } catch (e) { reject(deferred.promise, e); return; } resolve(deferred.promise, ret); }); } function resolve(self, newValue) { try { // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.'); if ( newValue && (typeof newValue === 'object' || typeof newValue === 'function') ) { var then = newValue.then; if (newValue instanceof Promise) { self._state = 3; self._value = newValue; finale(self); return; } else if (typeof then === 'function') { doResolve(bind(then, newValue), self); return; } } self._state = 1; self._value = newValue; finale(self); } catch (e) { reject(self, e); } } function reject(self, newValue) { self._state = 2; self._value = newValue; finale(self); } function finale(self) { if (self._state === 2 && self._deferreds.length === 0) { Promise._immediateFn(function() { if (!self._handled) { Promise._unhandledRejectionFn(self._value); } }); } for (var i = 0, len = self._deferreds.length; i < len; i++) { handle(self, self._deferreds[i]); } self._deferreds = null; } /** * @constructor */ function Handler(onFulfilled, onRejected, promise) { this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; this.onRejected = typeof onRejected === 'function' ? onRejected : null; this.promise = promise; } /** * Take a potentially misbehaving resolver function and make sure * onFulfilled and onRejected are only called once. * * Makes no guarantees about asynchrony. */ function doResolve(fn, self) { var done = false; try { fn( function(value) { if (done) return; done = true; resolve(self, value); }, function(reason) { if (done) return; done = true; reject(self, reason); } ); } catch (ex) { if (done) return; done = true; reject(self, ex); } } Promise.prototype['catch'] = function(onRejected) { return this.then(null, onRejected); }; Promise.prototype.then = function(onFulfilled, onRejected) { // @ts-ignore var prom = new this.constructor(noop); handle(this, new Handler(onFulfilled, onRejected, prom)); return prom; }; Promise.prototype['finally'] = finallyConstructor; Promise.all = function(arr) { return new Promise(function(resolve, reject) { if (!isArray(arr)) { return reject(new TypeError('Promise.all accepts an array')); } var args = Array.prototype.slice.call(arr); if (args.length === 0) return resolve([]); var remaining = args.length; function res(i, val) { try { if (val && (typeof val === 'object' || typeof val === 'function')) { var then = val.then; if (typeof then === 'function') { then.call( val, function(val) { res(i, val); }, reject ); return; } } args[i] = val; if (--remaining === 0) { resolve(args); } } catch (ex) { reject(ex); } } for (var i = 0; i < args.length; i++) { res(i, args[i]); } }); }; Promise.resolve = function(value) { if (value && typeof value === 'object' && value.constructor === Promise) { return value; } return new Promise(function(resolve) { resolve(value); }); }; Promise.reject = function(value) { return new Promise(function(resolve, reject) { reject(value); }); }; Promise.race = function(arr) { return new Promise(function(resolve, reject) { if (!isArray(arr)) { return reject(new TypeError('Promise.race accepts an array')); } for (var i = 0, len = arr.length; i < len; i++) { Promise.resolve(arr[i]).then(resolve, reject); } }); }; // Use polyfill for setImmediate for performance gains Promise._immediateFn = // @ts-ignore (typeof setImmediate === 'function' && function(fn) { // @ts-ignore setImmediate(fn); }) || function(fn) { setTimeoutFunc(fn, 0); }; Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) { if (typeof console !== 'undefined' && console) { console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console } }; var src = /*#__PURE__*/Object.freeze({ __proto__: null, 'default': Promise }); var require$$0 = /*@__PURE__*/getAugmentedNamespace(src); /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ // For building Turbine we are using Rollup. For running the turbine tests we are using // Karma + Webpack. You need to specify the default import when using promise-polyfill` // with Webpack 2+. We need `require('promise-polyfill').default` for running the tests // and `require('promise-polyfill')` for building Turbine. var reactorPromise = (typeof window !== 'undefined' && window.Promise) || (typeof commonjsGlobal !== 'undefined' && commonjsGlobal.Promise) || require$$0.default || require$$0; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createAddActionToQueue = function ( executeDelegateModule, normalizeRuleComponentError, logActionError ) { return function (action, rule, syntheticEvent, lastPromiseInQueue) { return lastPromiseInQueue.then(function () { // This module is used when ruleComponentSequencing is enabled. // action.timeout is always supplied to this module as >= 0 when delayNext is true. var delayNextAction = action.delayNext; var actionTimeoutId; return new reactorPromise(function (resolve, reject) { var moduleResult = executeDelegateModule(action, syntheticEvent, [ syntheticEvent ]); if (!delayNextAction) { return resolve(); } var promiseTimeoutMs = action.timeout; var timeoutPromise = new reactorPromise(function (resolve, reject) { actionTimeoutId = setTimeout(function () { reject( new Error( 'A timeout occurred because the action took longer than ' + promiseTimeoutMs / 1000 + ' seconds to complete. ' ) ); }, promiseTimeoutMs); }); reactorPromise.race([moduleResult, timeoutPromise]).then(resolve, reject); }) .catch(function (e) { clearTimeout(actionTimeoutId); e = normalizeRuleComponentError(e); logActionError(action, rule, e); return reactorPromise.reject(e); }) .then(function () { clearTimeout(actionTimeoutId); }); }); }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createAddConditionToQueue = function ( executeDelegateModule, normalizeRuleComponentError, isConditionMet, logConditionError, logConditionNotMet ) { return function (condition, rule, syntheticEvent, lastPromiseInQueue) { return lastPromiseInQueue.then(function () { // This module is used when ruleComponentSequencing is enabled. // condition.timeout is always supplied to this module as >= 0. // Conditions always assume delayNext = true because we have to know the // condition result before moving on. var conditionTimeoutId; return new reactorPromise(function (resolve, reject) { var moduleResult = executeDelegateModule(condition, syntheticEvent, [ syntheticEvent ]); var promiseTimeoutMs = condition.timeout; var timeoutPromise = new reactorPromise(function (resolve, reject) { conditionTimeoutId = setTimeout(function () { reject( new Error( 'A timeout occurred because the condition took longer than ' + promiseTimeoutMs / 1000 + ' seconds to complete. ' ) ); }, promiseTimeoutMs); }); reactorPromise.race([moduleResult, timeoutPromise]).then(resolve, reject); }) .catch(function (e) { clearTimeout(conditionTimeoutId); e = normalizeRuleComponentError(e); logConditionError(condition, rule, e); return reactorPromise.reject(e); }) .then(function (result) { clearTimeout(conditionTimeoutId); if (!isConditionMet(condition, result)) { logConditionNotMet(condition, rule); return reactorPromise.reject(); } }); }); }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var lastPromiseInQueue = reactorPromise.resolve(); var createAddRuleToQueue = function ( addConditionToQueue, addActionToQueue, logRuleCompleted ) { return function (rule, syntheticEvent) { if (rule.conditions) { rule.conditions.forEach(function (condition) { lastPromiseInQueue = addConditionToQueue( condition, rule, syntheticEvent, lastPromiseInQueue ); }); } if (rule.actions) { rule.actions.forEach(function (action) { lastPromiseInQueue = addActionToQueue( action, rule, syntheticEvent, lastPromiseInQueue ); }); } lastPromiseInQueue = lastPromiseInQueue.then(function () { logRuleCompleted(rule); }); // Allows later rules to keep running when an error occurs within this rule. lastPromiseInQueue = lastPromiseInQueue.catch(function () {}); return lastPromiseInQueue; }; }; var isPromiseLike = function (value) { return Boolean( value && typeof value === 'object' && typeof value.then === 'function' ); }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createEvaluateConditions = function ( executeDelegateModule, isConditionMet, logConditionNotMet, logConditionError ) { return function (rule, syntheticEvent) { var condition; if (rule.conditions) { for (var i = 0; i < rule.conditions.length; i++) { condition = rule.conditions[i]; try { var result = executeDelegateModule(condition, syntheticEvent, [ syntheticEvent ]); // If the result is promise-like, the extension needs to do something asynchronously, // but the customer does not have rule component sequencing enabled on the property. // If we didn't do this, the condition would always pass because the promise is // considered "truthy". if (isPromiseLike(result)) { throw new Error( 'Rule component sequencing must be enabled on the property ' + 'for this condition to function properly.' ); } if (!isConditionMet(condition, result)) { logConditionNotMet(condition, rule); return false; } } catch (e) { logConditionError(condition, rule, e); return false; } } } return true; }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createExecuteRule = function (evaluateConditions, runActions) { return function (rule, normalizedSyntheticEvent) { if (evaluateConditions(rule, normalizedSyntheticEvent)) { runActions(rule, normalizedSyntheticEvent); } }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createGetModuleDisplayNameByRuleComponent = function (moduleProvider) { return function (ruleComponent) { var moduleDefinition = moduleProvider.getModuleDefinition( ruleComponent.modulePath ); return ( (moduleDefinition && moduleDefinition.displayName) || ruleComponent.modulePath ); }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createGetSyntheticEventMeta = function (moduleProvider) { return function (ruleEventPair) { var rule = ruleEventPair.rule; var event = ruleEventPair.event; var moduleName = moduleProvider.getModuleDefinition(event.modulePath).name; var extensionName = moduleProvider.getModuleExtensionName(event.modulePath); return { $type: extensionName + '.' + moduleName, $rule: { id: rule.id, name: rule.name } }; }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createInitEventModule = function ( triggerRule, executeDelegateModule, normalizeSyntheticEvent, getErrorMessage, getSyntheticEventMeta, logger ) { return function (guardUntilAllInitialized, ruleEventPair) { var rule = ruleEventPair.rule; var event = ruleEventPair.event; event.settings = event.settings || {}; try { var syntheticEventMeta = getSyntheticEventMeta(ruleEventPair); executeDelegateModule(event, null, [ /** * This is the callback that executes a particular rule when an event has occurred. * @param {Object} [syntheticEvent] An object that contains detail regarding the event * that occurred. */ function trigger(syntheticEvent) { // DTM-11871 // If we're still in the process of initializing event modules, // we need to queue up any calls to trigger, otherwise if the triggered // rule does something that triggers a different rule whose event module // has not been initialized, that secondary rule will never get executed. // This can be removed if we decide to always use the rule queue, since // conditions and actions will be processed asynchronously, which // would give time for all event modules to be initialized. var normalizedSyntheticEvent = normalizeSyntheticEvent( syntheticEventMeta, syntheticEvent ); guardUntilAllInitialized(function () { triggerRule(normalizedSyntheticEvent, rule); }); } ]); } catch (e) { logger.error(getErrorMessage(event, rule, e)); } }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createLogActionError = function ( getRuleComponentErrorMessage, getModuleDisplayNameByRuleComponent, logger, notifyMonitors ) { return function (action, rule, e) { var actionDisplayName = getModuleDisplayNameByRuleComponent(action); logger.error(getRuleComponentErrorMessage(actionDisplayName, rule.name, e)); notifyMonitors('ruleActionFailed', { rule: rule, action: action }); }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createLogConditionError = function ( getRuleComponentErrorMessage, getModuleDisplayNameByRuleComponent, logger, notifyMonitors ) { return function (condition, rule, e) { var conditionDisplayName = getModuleDisplayNameByRuleComponent(condition); logger.error( getRuleComponentErrorMessage(conditionDisplayName, rule.name, e) ); notifyMonitors('ruleConditionFailed', { rule: rule, condition: condition }); }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createLogConditionNotMet = function ( getModuleDisplayNameByRuleComponent, logger, notifyMonitors ) { return function (condition, rule) { var conditionDisplayName = getModuleDisplayNameByRuleComponent(condition); logger.log( 'Condition "' + conditionDisplayName + '" for rule "' + rule.name + '" was not met.' ); notifyMonitors('ruleConditionFailed', { rule: rule, condition: condition }); }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createLogRuleCompleted = function (logger, notifyMonitors) { return function (rule) { logger.log('Rule "' + rule.name + '" fired.'); notifyMonitors('ruleCompleted', { rule: rule }); }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createRunActions = function ( executeDelegateModule, logActionError, logRuleCompleted ) { return function (rule, syntheticEvent) { var action; if (rule.actions) { for (var i = 0; i < rule.actions.length; i++) { action = rule.actions[i]; try { executeDelegateModule(action, syntheticEvent, [syntheticEvent]); } catch (e) { logActionError(action, rule, e); return; } } } logRuleCompleted(rule); }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var createTriggerRule = function ( ruleComponentSequencingEnabled, executeRule, addRuleToQueue, notifyMonitors ) { return function (normalizedSyntheticEvent, rule) { notifyMonitors('ruleTriggered', { rule: rule }); if (ruleComponentSequencingEnabled) { addRuleToQueue(rule, normalizedSyntheticEvent); } else { executeRule(rule, normalizedSyntheticEvent); } }; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var getRuleComponentErrorMessage = function (ruleComponentName, ruleName, error) { return ( 'Failed to execute "' + ruleComponentName + '" for "' + ruleName + '" rule. ' + error.message + (error.stack ? '\n' + error.stack : '') ); }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var isConditionMet = function (condition, result) { return (result && !condition.negate) || (!result && condition.negate); }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var triggerCallQueue = []; var eventModulesInitialized = false; var guardUntilAllInitialized = function (callback) { if (!eventModulesInitialized) { triggerCallQueue.push(callback); } else { callback(); } }; var initRules = function (buildRuleExecutionOrder, rules, initEventModule) { buildRuleExecutionOrder(rules).forEach(function (ruleEventPair) { initEventModule(guardUntilAllInitialized, ruleEventPair); }); eventModulesInitialized = true; triggerCallQueue.forEach(function (triggerCall) { triggerCall(); }); triggerCallQueue = []; }; /* Copyright 2020 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var normalizeRuleComponentError = function (e) { if (!e) { e = new Error( 'The extension triggered an error, but no error information was provided.' ); } if (!(e instanceof Error)) { var stringifiedError = typeof e === 'object' ? JSON.stringify(e) : String(e); e = new Error(stringifiedError); } return e; }; /*! * isobject <https://github.com/jonschlinkert/isobject> * * Copyright (c) 2014-2017, Jon Schlinkert. * Released under the MIT License. */ var isobject = function isObject(val) { return val != null && typeof val === 'object' && Array.isArray(val) === false; }; /*! * is-plain-object <https://github.com/jonschlinkert/is-plain-object> * * Copyright (c) 2014-2017, Jon Schlinkert. * Released under the MIT License. */ function isObjectObject(o) { return isobject(o) === true && Object.prototype.toString.call(o) === '[object Object]'; } var isPlainObject = function isPlainObject(o) { var ctor,prot; if (isObjectObject(o) === false) return false; // If has modified constructor ctor = o.constructor; if (typeof ctor !== 'function') return false; // If has modified prototype prot = ctor.prototype; if (isObjectObject(prot) === false) return false; // If constructor does not have an Object-specific method if (prot.hasOwnProperty('isPrototypeOf') === false) { return false; } // Most likely a plain Object return true; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ /** * Normalizes a synthetic event so that it exists and has at least meta. * @param {Object} syntheticEventMeta * @param {Object} [syntheticEvent] * @returns {Object} */ var normalizeSyntheticEvent = function (syntheticEventMeta, syntheticEvent) { syntheticEvent = syntheticEvent || {}; // This ensures that as the user hands us a synthetic event for multiple rules, // we aren't overwriting a new meta into the same object reference. if (isPlainObject(syntheticEvent)) { syntheticEvent = reactorObjectAssign({}, syntheticEvent, syntheticEventMeta); } else { // When syntheticEvent is not an object, there's nothing we can guarantee // about the ability to "copy". Leave it alone. reactorObjectAssign(syntheticEvent, syntheticEventMeta); } // Remove after some arbitrary time period when we think users have had sufficient chance // to move away from event.type if (!syntheticEvent.hasOwnProperty('type')) { Object.defineProperty(syntheticEvent, 'type', { get: function () { logger.deprecation( 'Accessing event.type in Adobe Launch has been deprecated and will be ' + 'removed soon. Please use event.$type instead.' ); return syntheticEvent.$type; } }); } return syntheticEvent; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ /** * Creates a function that, when called with an extension name and module name, will return the * exports of the respective shared module. * * @param {Object} extensions * @param {Object} moduleProvider * @returns {Function} */ var createGetSharedModuleExports = function (extensions, moduleProvider) { return function (extensionName, moduleName) { var extension = extensions[extensionName]; if (extension) { var modules = extension.modules; if (modules) { var referencePaths = Object.keys(modules); for (var i = 0; i < referencePaths.length; i++) { var referencePath = referencePaths[i]; var module = modules[referencePath]; if (module.shared && module.name === moduleName) { return moduleProvider.getModuleExports(referencePath); } } } } }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ /** * Creates a function that, when called, will return a configuration object with data element * tokens replaced. * * @param {Object} settings * @returns {Function} */ var createGetExtensionSettings = function (replaceTokens, settings) { return function () { return settings ? replaceTokens(settings) : {}; }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ /** * Creates a function that, when called, will return the full hosted lib file URL. * * @param {string} hostedLibFilesBaseUrl * @returns {Function} */ var createGetHostedLibFileUrl = function ( decorateWithDynamicHost, hostedLibFilesBaseUrl, minified ) { return function (file) { if (minified) { var fileParts = file.split('.'); fileParts.splice(fileParts.length - 1 || 1, 0, 'min'); file = fileParts.join('.'); } return decorateWithDynamicHost(hostedLibFilesBaseUrl) + file; }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var JS_EXTENSION = '.js'; /** * @private * Returns the directory of a path. A limited version of path.dirname in nodejs. * * To keep it simple, it makes the following assumptions: * path has a least one slash * path does not end with a slash * path does not have empty segments (e.g., /src/lib//foo.bar) * * @param {string} path * @returns {string} */ var dirname = function (path) { return path.substr(0, path.lastIndexOf('/')); }; /** * Determines if a string ends with a certain string. * @param {string} str The string to test. * @param {string} suffix The suffix to look for at the end of str. * @returns {boolean} Whether str ends in suffix. */ var endsWith = function (str, suffix) { return str.indexOf(suffix, str.length - suffix.length) !== -1; }; /** * Given a starting path and a path relative to the starting path, returns the final path. A * limited version of path.resolve in nodejs. * * To keep it simple, it makes the following assumptions: * fromPath has at least one slash * fromPath does not end with a slash. * fromPath does not have empty segments (e.g., /src/lib//foo.bar) * relativePath starts with ./ or ../ * * @param {string} fromPath * @param {string} relativePath * @returns {string} */ var resolveRelativePath = function (fromPath, relativePath) { // Handle the case where the relative path does not end in the .js extension. We auto-append it. if (!endsWith(relativePath, JS_EXTENSION)) { relativePath = relativePath + JS_EXTENSION; } var relativePathSegments = relativePath.split('/'); var resolvedPathSegments = dirname(fromPath).split('/'); relativePathSegments.forEach(function (relativePathSegment) { if (!relativePathSegment || relativePathSegment === '.') { return; } else if (relativePathSegment === '..') { if (resolvedPathSegments.length) { resolvedPathSegments.pop(); } } else { resolvedPathSegments.push(relativePathSegment); } }); return resolvedPathSegments.join('/'); }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var getPromise = function(url, script) { return new reactorPromise(function(resolve, reject) { script.onload = function() { resolve(script); }; script.onerror = function() { reject(new Error('Failed to load script ' + url)); }; }); }; var reactorLoadScript = function(url) { var script = document.createElement('script'); script.src = url; script.async = true; var promise = getPromise(url, script); document.getElementsByTagName('head')[0].appendChild(script); return promise; }; // Copyright Joyent, Inc. and other Node contributors. // If obj.hasOwnProperty has been overridden, then calling // obj.hasOwnProperty(prop) will break. // See: https://github.com/joyent/node/issues/1707 function hasOwnProperty$1(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } var decode = function(qs, sep, eq, options) { sep = sep || '&'; eq = eq || '='; var obj = {}; if (typeof qs !== 'string' || qs.length === 0) { return obj; } var regexp = /\+/g; qs = qs.split(sep); var maxKeys = 1000; if (options && typeof options.maxKeys === 'number') { maxKeys = options.maxKeys; } var len = qs.length; // maxKeys <= 0 means that we should not limit keys count if (maxKeys > 0 && len > maxKeys) { len = maxKeys; } for (var i = 0; i < len; ++i) { var x = qs[i].replace(regexp, '%20'), idx = x.indexOf(eq), kstr, vstr, k, v; if (idx >= 0) { kstr = x.substr(0, idx); vstr = x.substr(idx + 1); } else { kstr = x; vstr = ''; } k = decodeURIComponent(kstr); v = decodeURIComponent(vstr); if (!hasOwnProperty$1(obj, k)) { obj[k] = v; } else if (Array.isArray(obj[k])) { obj[k].push(v); } else { obj[k] = [obj[k], v]; } } return obj; }; // Copyright Joyent, Inc. and other Node contributors. var stringifyPrimitive = function(v) { switch (typeof v) { case 'string': return v; case 'boolean': return v ? 'true' : 'false'; case 'number': return isFinite(v) ? v : ''; default: return ''; } }; var encode = function(obj, sep, eq, name) { sep = sep || '&'; eq = eq || '='; if (obj === null) { obj = undefined; } if (typeof obj === 'object') { return Object.keys(obj).map(function(k) { var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; if (Array.isArray(obj[k])) { return obj[k].map(function(v) { return ks + encodeURIComponent(stringifyPrimitive(v)); }).join(sep); } else { return ks + encodeURIComponent(stringifyPrimitive(obj[k])); } }).join(sep); } if (!name) return ''; return encodeURIComponent(stringifyPrimitive(name)) + eq + encodeURIComponent(stringifyPrimitive(obj)); }; var querystring = createCommonjsModule(function (module, exports) { exports.decode = exports.parse = decode; exports.encode = exports.stringify = encode; }); /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ // We proxy the underlying querystring module so we can limit the API we expose. // This allows us to more easily make changes to the underlying implementation later without // having to worry about breaking extensions. If extensions demand additional functionality, we // can make adjustments as needed. var reactorQueryString = { parse: function(string) { // if (typeof string === 'string') { // Remove leading ?, #, & for some leniency so you can pass in location.search or // location.hash directly. string = string.trim().replace(/^[?#&]/, ''); } return querystring.parse(string); }, stringify: function(object) { return querystring.stringify(object); } }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var CORE_MODULE_PREFIX = '@adobe/reactor-'; var modules = { cookie: reactorCookie, document: reactorDocument, 'load-script': reactorLoadScript, 'object-assign': reactorObjectAssign, promise: reactorPromise, 'query-string': reactorQueryString, window: reactorWindow }; /** * Creates a function which can be passed as a "require" function to extension modules. * * @param {Function} getModuleExportsByRelativePath * @returns {Function} */ var createPublicRequire = function (getModuleExportsByRelativePath) { return function (key) { if (key.indexOf(CORE_MODULE_PREFIX) === 0) { var keyWithoutScope = key.substr(CORE_MODULE_PREFIX.length); var module = modules[keyWithoutScope]; if (module) { return module; } } if (key.indexOf('./') === 0 || key.indexOf('../') === 0) { return getModuleExportsByRelativePath(key); } throw new Error('Cannot resolve module "' + key + '".'); }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var hydrateModuleProvider = function ( container, moduleProvider, debugController, replaceTokens, getDataElementValue, settingsFileTransformer, decorateWithDynamicHost ) { var extensions = container.extensions; var buildInfo = container.buildInfo; var environment = container.environment; var propertySettings = container.property.settings; if (extensions) { var getSharedModuleExports = createGetSharedModuleExports( extensions, moduleProvider ); Object.keys(extensions).forEach(function (extensionName) { var extension = extensions[extensionName]; var extensionSettings = extension.settings; if (Array.isArray(extension.filePaths)) { extensionSettings = settingsFileTransformer( extensionSettings, extension.filePaths ); } var getExtensionSettings = createGetExtensionSettings( replaceTokens, extensionSettings ); if (extension.modules) { var prefixedLogger = logger.createPrefixedLogger(extension.displayName); var getHostedLibFileUrl = createGetHostedLibFileUrl( decorateWithDynamicHost, extension.hostedLibFilesBaseUrl, buildInfo.minified ); var turbine = { buildInfo: buildInfo, environment: environment, property: { name: container.property.name, id: container.property.id }, getDataElementValue: getDataElementValue, getExtensionSettings: getExtensionSettings, getHostedLibFileUrl: getHostedLibFileUrl, getSharedModule: getSharedModuleExports, logger: prefixedLogger, propertySettings: propertySettings, replaceTokens: replaceTokens, onDebugChanged: debugController.onDebugChanged, get debugEnabled() { return debugController.getDebugEnabled(); } }; Object.keys(extension.modules).forEach(function (referencePath) { var module = extension.modules[referencePath]; var getModuleExportsByRelativePath = function (relativePath) { var resolvedReferencePath = resolveRelativePath( referencePath, relativePath ); return moduleProvider.getModuleExports(resolvedReferencePath); }; var publicRequire = createPublicRequire( getModuleExportsByRelativePath ); moduleProvider.registerModule( referencePath, module, extensionName, publicRequire, turbine ); }); } }); // We want to extract the module exports immediately to allow the modules // to run some logic immediately. // We need to do the extraction here in order for the moduleProvider to // have all the modules previously registered. (eg. when moduleA needs moduleB, both modules // must exist inside moduleProvider). moduleProvider.hydrateCache(); } return moduleProvider; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var hydrateSatelliteObject = function ( _satellite, container, setDebugEnabled, getVar, setCustomVar ) { var customScriptPrefixedLogger = logger.createPrefixedLogger('Custom Script'); // Will get replaced by the directCall event delegate from the Core extension. Exists here in // case there are no direct call rules (and therefore the directCall event delegate won't get // included) and our customers are still calling the method. In this case, we don't want an error // to be thrown. This method existed before Reactor. _satellite.track = function (identifier) { logger.log( '"' + identifier + '" does not match any direct call identifiers.' ); }; // Will get replaced by the Marketing Cloud ID extension if installed. Exists here in case // the extension is not installed and our customers are still calling the method. In this case, // we don't want an error to be thrown. This method existed before Reactor. _satellite.getVisitorId = function () { return null; }; // container.property also has property settings, but it shouldn't concern the user. // By limiting our API exposure to necessities, we provide more flexibility in the future. _satellite.property = { name: container.property.name, id: container.property.id }; _satellite.company = container.company; _satellite.buildInfo = container.buildInfo; _satellite.environment = container.environment; _satellite.logger = customScriptPrefixedLogger; /** * Log a message. We keep this due to legacy baggage. * @param {string} message The message to log. * @param {number} [level] A number that represents the level of logging. * 3=info, 4=warn, 5=error, anything else=log */ _satellite.notify = function (message, level) { logger.deprecation( '_satellite.notify is deprecated. Please use the `_satellite.logger` API.' ); switch (level) { case 3: customScriptPrefixedLogger.info(message); break; case 4: customScriptPrefixedLogger.warn(message); break; case 5: customScriptPrefixedLogger.error(message); break; default: customScriptPrefixedLogger.log(message); } }; _satellite.getVar = getVar; _satellite.setVar = setCustomVar; /** * Writes a cookie. * @param {string} name The name of the cookie to save. * @param {string} value The value of the cookie to save. * @param {number} [days] The number of days to store the cookie. If not specified, the cookie * will be stored for the session only. */ _satellite.setCookie = function (name, value, days) { var optionsStr = ''; var options = {}; if (days) { optionsStr = ', { expires: ' + days + ' }'; options.expires = days; } var msg = '_satellite.setCookie is deprecated. Please use ' + '_satellite.cookie.set("' + name + '", "' + value + '"' + optionsStr + ').'; logger.deprecation(msg); reactorCookie.set(name, value, options); }; /** * Reads a cookie value. * @param {string} name The name of the cookie to read. * @returns {string} */ _satellite.readCookie = function (name) { logger.deprecation( '_satellite.readCookie is deprecated. ' + 'Please use _satellite.cookie.get("' + name + '").' ); return reactorCookie.get(name); }; /** * Removes a cookie value. * @param name */ _satellite.removeCookie = function (name) { logger.deprecation( '_satellite.removeCookie is deprecated. ' + 'Please use _satellite.cookie.remove("' + name + '").' ); reactorCookie.remove(name); }; _satellite.cookie = reactorCookie; // Will get replaced by the pageBottom event delegate from the Core extension. Exists here in // case the customers are not using core (and therefore the pageBottom event delegate won't get // included) and they are still calling the method. In this case, we don't want an error // to be thrown. This method existed before Reactor. _satellite.pageBottom = function () {}; _satellite.setDebug = setDebugEnabled; var warningLogged = false; Object.defineProperty(_satellite, '_container', { get: function () { if (!warningLogged) { logger.warn( '_satellite._container may change at any time and should only ' + 'be used for debugging.' ); warningLogged = true; } return container; } }); }; /*************************************************************************************** * Copyright 2021 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ var byRegexPattern = function (regexScriptSrcPattern) { var scripts = reactorDocument.querySelectorAll('script'); for (var i = 0; i < scripts.length; i++) { var script = scripts[i]; // Find the script that loaded our library. Take into account embed scripts migrated // from DTM. We'll also consider that they may have added a querystring for cache-busting // or whatever. if (regexScriptSrcPattern.test(script.src)) { return script; } } }; var getTurbine = function () { return byRegexPattern(new RegExp(/(launch|satelliteLib)-[^\/]+.js(\?.*)?$/)); }; // NOTE: this entire module can be dropped when IE 10/11 support is dropped. var findPageScript = { getTurbine: getTurbine, byRegexPattern: byRegexPattern }; /*************************************************************************************** * (c) 2021 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ function isArrayReference(str) { return ( typeof str === 'string' && str.indexOf('[') !== -1 && str.indexOf(']') !== -1 ); } function sanitizeArrayKey(pathStrSegment) { return pathStrSegment.substr( 0, // the name goes up to the start of the array bracket: 'someArrayName[]' pathStrSegment.indexOf('[') ); } /** * Recursive function to loop through settings and look for the setting to transform, * which is the final entry within the pathSegments array. Alters settings in-place. * @param {Array} pathSegments * @param {Object} settings * @param {Function} decorateWithDynamicHost */ function traverseIntoSettings(pathSegments, settings, decorateWithDynamicHost) { // nothing to do if (!pathSegments.length || !isPlainObject(settings)) { return; } var currentKey = pathSegments[0]; // base case if (pathSegments.length === 1) { if ( settings.hasOwnProperty(currentKey) && typeof settings[currentKey] === 'string' ) { settings[currentKey] = decorateWithDynamicHost(settings[currentKey]); } return; } // still more work to do var remainingPathSegments = pathSegments.slice(1); if (isArrayReference(currentKey)) { // 'someArrayReference[]' --> 'someArrayReference' currentKey = sanitizeArrayKey(currentKey); var settingsValue = settings[currentKey]; if (Array.isArray(settingsValue)) { settingsValue.forEach(function (arrayEntryObject) { return traverseIntoSettings( remainingPathSegments, arrayEntryObject, decorateWithDynamicHost ); }); } } else { // object case return traverseIntoSettings( remainingPathSegments, settings[currentKey], decorateWithDynamicHost ); } } /** * Returns a function that when called will attempt to traverse the passed in * settings object to each file path and transform a relative URL to an absolute * URL. * * @param isDynamicEnforced * @param decorateWithDynamicHost * @returns {(function(*=, *=, *=): (*))|*} */ var createSettingsFileTransformer = function (isDynamicEnforced, decorateWithDynamicHost) { return function (settings, filePaths, moduleReferencePath) { if ( !isDynamicEnforced || !isPlainObject(settings) || !Object.keys(settings).length || !Array.isArray(filePaths) || !filePaths.length ) { return settings; } // pull out the file paths by the module's reference path and loop over each urlPath filePaths.forEach(function (filePathString) { // The custom code action provides the ability to have the source code in the 'source' // variable or to have an external file. Therefore, this module has 2 behaviors. // It also does not provide a value of false for isExternal just as all other extensions // that use fileTransform do not provide an isExternal variable check. Therefore, we need // to treat Adobe's custom code action special, and don't augment the 'source' variable // if isExternal is not also present. var isAdobeCustomCodeAction = Boolean( moduleReferencePath != null && /^core\/.*actions.*\/customCode\.js$/.test(moduleReferencePath) ); if ( isAdobeCustomCodeAction && filePathString === 'source' && !settings.isExternal ) { return; } // modify the object in place traverseIntoSettings( filePathString.split('.'), settings, decorateWithDynamicHost ); }); return settings; }; }; /*************************************************************************************** * (c) 2017 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. ****************************************************************************************/ // DYNAMIC URL var IEGetTurbineScript = findPageScript .getTurbine; var _satellite = window._satellite; if (_satellite && !window.__satelliteLoaded) { // If a consumer loads the library multiple times, make sure only the first time is effective. window.__satelliteLoaded = true; var container = _satellite.container; // Remove container in public scope ASAP so it can't be manipulated by extension or user code. delete _satellite.container; /* get rid of container.buildInfo decoration once deprecation is finished of buildInfo.environment string */ var buildInfo = reactorObjectAssign({}, container.buildInfo); Object.defineProperty(buildInfo, 'environment', { get: function () { logger.deprecation( 'container.buildInfo.environment is deprecated.' + 'Please use `container.environment.stage` instead' ); return container.environment.stage; } }); container.buildInfo = buildInfo; var localStorage = getNamespacedStorage('localStorage'); var debugController = createDebugController(localStorage, logger); var currentScriptSource = ''; if (reactorDocument.currentScript && reactorDocument.currentScript.getAttribute('src')) { currentScriptSource = reactorDocument.currentScript.getAttribute('src'); } else if (IEGetTurbineScript()) { currentScriptSource = IEGetTurbineScript().getAttribute('src'); } var dynamicHostResolver; try { dynamicHostResolver = createDynamicHostResolver( currentScriptSource, container.company.cdnAllowList, debugController ); } catch (e) { logger.warn('Please review the following error:'); throw e; // We don't want to continue allowing Turbine to start up if we detect an error in here } var settingsFileTransformer = createSettingsFileTransformer( dynamicHostResolver.isDynamicEnforced, dynamicHostResolver.decorateWithDynamicHost ); var moduleProvider = createModuleProvider(); var replaceTokens; var undefinedVarsReturnEmpty = container.property.settings.undefinedVarsReturnEmpty; var ruleComponentSequencingEnabled = container.property.settings.ruleComponentSequencingEnabled; var dataElements = container.dataElements || {}; // Remove when migration period has ended. dataElementSafe.migrateCookieData(dataElements); var getDataElementDefinition = function (name) { return dataElements[name]; }; // We support data elements referencing other data elements. In order to be able to retrieve a // data element value, we need to be able to replace data element tokens inside its settings // object (which is what replaceTokens is for). In order to be able to replace data element // tokens inside a settings object, we need to be able to retrieve data element // values (which is what getDataElementValue is for). This proxy replaceTokens function solves the // chicken-or-the-egg problem by allowing us to provide a replaceTokens function to // getDataElementValue that will stand in place of the real replaceTokens function until it // can be created. This also means that createDataElementValue should not call the proxy // replaceTokens function until after the real replaceTokens has been created. var proxyReplaceTokens = function () { return replaceTokens.apply(null, arguments); }; var getDataElementValue = createGetDataElementValue( moduleProvider, getDataElementDefinition, proxyReplaceTokens, undefinedVarsReturnEmpty, settingsFileTransformer ); var customVars = {}; var setCustomVar = createSetCustomVar(customVars); var isVar = createIsVar(customVars, getDataElementDefinition); var getVar = createGetVar( customVars, getDataElementDefinition, getDataElementValue ); replaceTokens = createReplaceTokens(isVar, getVar, undefinedVarsReturnEmpty); // Important to hydrate satellite object before we hydrate the module provider or init rules. // When we hydrate module provider, we also execute extension code which may be // accessing _satellite. hydrateSatelliteObject( _satellite, container, debugController.setDebugEnabled, getVar, setCustomVar ); hydrateModuleProvider( container, moduleProvider, debugController, replaceTokens, getDataElementValue, settingsFileTransformer, dynamicHostResolver.decorateWithDynamicHost ); var notifyMonitors = createNotifyMonitors(_satellite); var executeDelegateModule = createExecuteDelegateModule( moduleProvider, replaceTokens, settingsFileTransformer ); var getModuleDisplayNameByRuleComponent = createGetModuleDisplayNameByRuleComponent( moduleProvider ); var logConditionNotMet = createLogConditionNotMet( getModuleDisplayNameByRuleComponent, logger, notifyMonitors ); var logConditionError = createLogConditionError( getRuleComponentErrorMessage, getModuleDisplayNameByRuleComponent, logger, notifyMonitors ); var logActionError = createLogActionError( getRuleComponentErrorMessage, getModuleDisplayNameByRuleComponent, logger, notifyMonitors ); var logRuleCompleted = createLogRuleCompleted(logger, notifyMonitors); var evaluateConditions = createEvaluateConditions( executeDelegateModule, isConditionMet, logConditionNotMet, logConditionError ); var runActions = createRunActions( executeDelegateModule, logActionError, logRuleCompleted ); var executeRule = createExecuteRule(evaluateConditions, runActions); var addConditionToQueue = createAddConditionToQueue( executeDelegateModule, normalizeRuleComponentError, isConditionMet, logConditionError, logConditionNotMet ); var addActionToQueue = createAddActionToQueue( executeDelegateModule, normalizeRuleComponentError, logActionError ); var addRuleToQueue = createAddRuleToQueue( addConditionToQueue, addActionToQueue, logRuleCompleted ); var triggerRule = createTriggerRule( ruleComponentSequencingEnabled, executeRule, addRuleToQueue, notifyMonitors ); var getSyntheticEventMeta = createGetSyntheticEventMeta(moduleProvider); var initEventModule = createInitEventModule( triggerRule, executeDelegateModule, normalizeSyntheticEvent, getRuleComponentErrorMessage, getSyntheticEventMeta, logger ); initRules(buildRuleExecutionOrder, container.rules || [], initEventModule); } // Rollup's iife option always sets a global with whatever is exported, so we'll set the // _satellite global with the same object it already is (we've only modified it). var src$1 = _satellite; return src$1; }());