From 5855314359e439881584299b0b4260ab1f74398f Mon Sep 17 00:00:00 2001 From: alectimison-maker Date: Sun, 9 Aug 2026 11:22:01 +0800 Subject: [PATCH 1/2] feat: add verified coupon code action --- src/chrome/src/agent/agent.js | 4 +- src/chrome/src/ui/recommended-actions.js | 88 ++++++++ src/firefox/src/agent/agent.js | 4 +- src/firefox/src/ui/recommended-actions.js | 88 ++++++++ test/run.js | 245 ++++++++++++++++++++++ 5 files changed, 427 insertions(+), 2 deletions(-) diff --git a/src/chrome/src/agent/agent.js b/src/chrome/src/agent/agent.js index d992ebf29..d62812960 100644 --- a/src/chrome/src/agent/agent.js +++ b/src/chrome/src/agent/agent.js @@ -3429,7 +3429,7 @@ export class Agent extends LoopDetector { static EXECUTION_APP_STATE_WRITE_TOOLS = new Set(['scratchpad_write', 'progress_update']); static DELIVERY_OBSERVATION_TOOLS = new Set(['read_page', 'get_accessibility_tree', 'get_interactive_elements', 'extract_data', 'get_selection', 'find_text', 'scroll', 'wait_for_stable', 'wait_for_element', 'read_pdf', 'fetch_url', 'research_url', 'read_downloaded_file', 'iframe_read', 'get_window_info', 'list_downloads', 'progress_read', 'inspect_viewport', 'screenshot', 'get_frames', 'get_shadow_dom', 'shadow_dom_query', 'read_youtube_transcript']); static NAV_PRONE_TOOLS = new Set(['click', 'click_ax', 'set_checked', 'navigate', 'go_back', 'go_forward', 'execute_js', 'iframe_click', 'execute_webmcp_tool']); - static RECOMMENDED_ACTION_FAST_PATH_IDS = new Set(['download-media', 'tweet-webbrain', 'post-webbrain-linkedin']); + static RECOMMENDED_ACTION_FAST_PATH_IDS = new Set(['download-media', 'tweet-webbrain', 'post-webbrain-linkedin', 'find-coupons']); static RECOMMENDED_ACTION_FIRST_TOOLS = Object.freeze({ 'download-media': new Set(['screenshot']), 'summarize-page': new Set(['read_page']), @@ -3439,6 +3439,7 @@ export class Agent extends LoopDetector { 'find-followups': new Set(['get_accessibility_tree']), 'rewrite-focused-draft': new Set(['get_accessibility_tree']), 'compare-price': new Set(['get_accessibility_tree']), + 'find-coupons': new Set(['get_accessibility_tree']), }); static RECOMMENDED_ACTION_READ_ONLY_FIRST_TOOLS = new Set(['screenshot', 'read_page', 'get_accessibility_tree', 'read_youtube_transcript']); @@ -8595,6 +8596,7 @@ Rules: no prose intro, no conclusion, no "this screenshot shows...", no layout d if (!this._skillToolForName(tool)) return null; } if (['tweet-webbrain', 'post-webbrain-linkedin'].includes(id) && tool !== 'navigate') return null; + if (id === 'find-coupons' && tool !== 'get_accessibility_tree') return null; const summary = sanitizePlannerText(action.summary || 'Run the selected recommended action.', 500, { collapseWhitespace: true }); const stepLimit = ['tweet-webbrain', 'post-webbrain-linkedin'].includes(id) ? 600 : 300; const steps = Array.isArray(action.steps) diff --git a/src/chrome/src/ui/recommended-actions.js b/src/chrome/src/ui/recommended-actions.js index 4e46184c6..baf3e518c 100644 --- a/src/chrome/src/ui/recommended-actions.js +++ b/src/chrome/src/ui/recommended-actions.js @@ -7,6 +7,29 @@ const MEETING_HOST_RE = /(^|\.)(zoom\.us|meet\.google\.com|teams\.microsoft\.com const DATING_HOST_RE = /(^|\.)(tinder\.com|bumble\.com|hinge\.co|okcupid\.com|match\.com|pof\.com|badoo\.com|happn\.com|coffeemeetsbagel\.com)$/i; const SHOPPING_HOST_RE = /(^|\.)(amazon\.[a-z.]+|ebay\.[a-z.]+|etsy\.com|walmart\.com|target\.com|bestbuy\.com|shopify\.com|aliexpress\.com|mercadolibre\.[a-z.]+|mercadolivre\.com\.br|hepsiburada\.com|trendyol\.com|n11\.com|shopee\.[a-z.]+|shopeekh\.com|lazada\.[a-z.]+)$/i; const PRODUCT_PATH_RE = /\/(dp|gp\/product|itm|p|product|products|prod|item|listing|ilan|urun)\b/i; +const COUPON_SHOPPING_DOMAINS = [ + 'amazon.com', 'amazon.ca', 'amazon.com.mx', 'amazon.com.br', 'amazon.co.uk', 'amazon.de', 'amazon.fr', + 'amazon.it', 'amazon.es', 'amazon.nl', 'amazon.pl', 'amazon.se', 'amazon.com.be', 'amazon.co.jp', + 'amazon.in', 'amazon.com.au', 'amazon.sg', 'amazon.ae', 'amazon.sa', 'amazon.com.tr', 'amazon.eg', + 'ebay.com', 'ebay.ca', 'ebay.co.uk', 'ebay.de', 'ebay.fr', 'ebay.it', 'ebay.es', 'ebay.com.au', + 'etsy.com', 'walmart.com', 'target.com', 'bestbuy.com', 'aliexpress.com', 'mercadolivre.com.br', + 'hepsiburada.com', 'trendyol.com', 'n11.com', 'shopeekh.com', + 'mercadolibre.com.ar', 'mercadolibre.com.mx', 'mercadolibre.com.co', 'mercadolibre.cl', + 'mercadolibre.com.pe', 'mercadolibre.com.uy', 'mercadolibre.com.ve', 'mercadolibre.com.ec', + 'mercadolibre.com.bo', 'mercadolibre.com.py', 'mercadolibre.com.do', 'mercadolibre.com.gt', + 'mercadolibre.com.hn', 'mercadolibre.com.ni', 'mercadolibre.com.pa', 'mercadolibre.com.sv', + 'mercadolibre.co.cr', + 'shopee.com', 'shopee.com.br', 'shopee.com.co', 'shopee.com.mx', 'shopee.cl', 'shopee.co.id', + 'shopee.com.my', 'shopee.com.ph', 'shopee.sg', 'shopee.co.th', 'shopee.vn', 'shopee.tw', + 'lazada.com', 'lazada.co.id', 'lazada.com.my', 'lazada.com.ph', 'lazada.sg', 'lazada.co.th', 'lazada.vn', +]; +const COUPON_PRODUCT_PATH_RE = /\/(?:dp|gp\/product|itm|p|product|products|prod|item|listing|ilan|urun|ip|detail)(?:\/|$)/i; +const COUPON_BESTBUY_PRODUCT_PATH_RE = /\/site\/[^/]+\/\d+\.p(?:\/|$)/i; +const COUPON_CHECKOUT_PATH_RE = /\/(?:cart|basket|bag|checkout|checkouts|shopping-cart|shopping-bag|warenkorb|panier|carrito|carrinho|sacola|sepet|troli|keranjang|gio-hang|koszyk|korzina)(?:\/|$)/i; +const COUPON_CHECKOUT_HOST_RE = /^(?:checkout|cart)\./i; +const COUPON_FIELD_RE = /\b(coupon|promo(?:tional)?|voucher|discount)\b/i; +const COUPON_EMPTY_CART_RE = /\b(?:your\s+)?(?:cart|basket|bag)\s+(?:is\s+)?empty\b|\b(?:no|zero)\s+items?\s+in\s+(?:your\s+)?(?:cart|basket|bag)\b/i; +const COUPON_PRICE_RE = /[₺$€£¥₹₩]|\b(?:USD|EUR|GBP|TRY|CAD|AUD|JPY|BRL|MXN|INR)\s*\d|\d\s*(?:USD|EUR|GBP|TRY|CAD|AUD|JPY|BRL|MXN|INR)\b/i; const RELEASES_PATH_RE = /^\/[^/]+\/[^/]+\/releases(?:\/|$)/i; const SEARCH_INPUT_RE = /^(search|q|query|keyword|keywords|s)$/i; const EMAIL_HOST_RE = /(^|\.)(mail\.google\.com|gmail\.com|outlook\.live\.com|outlook\.office\.com|outlook\.office365\.com|mail\.yahoo\.com|icloud\.com|proton\.me|protonmail\.com|fastmail\.com|hey\.com|mail\.zoho\.com)$/i; @@ -137,6 +160,24 @@ function visibleTreeArgs(maxDepth = 10) { return { filter: 'visible', maxDepth }; } +function couponRunOptions() { + return { + id: 'find-coupons', + skipPlanner: true, + autoExecute: true, + tool: 'get_accessibility_tree', + args: visibleTreeArgs(12), + summary: 'Find bounded coupon candidates and verify savings only through the merchant checkout UI.', + steps: [ + 'Read the visible product, cart, or checkout first; record the exact item, seller, subtotal, current discount or coupon, and payable total that are actually shown.', + 'Check merchant-provided offers first, then research at most five external candidate codes relevant to this exact merchant and item.', + 'Without a visible coupon field, report only unverified candidates; never add an item or start checkout merely to test a code.', + 'Preserve the existing coupon, gift cards, store credit, and loyalty rewards; replace it only if safely restorable. Try codes one at a time. Call one active only when the merchant accepts it and the payable total or explicit discount changes. Keep the best saving or restore the original state.', + 'Report sources, rejections, restrictions, and before/after savings. Never place the order, pay, enter or change address, shipping, or payment details, or join a membership or subscription. Stop on CAPTCHA or rate limit. Never follow affiliate redirects or install extensions.', + ], + }; +} + function webbrainTweetRunOptions(postText) { const exactPost = String(postText || '').trim(); return { @@ -186,6 +227,43 @@ function hasCartOrPriceSignal(pageInfo = {}) { || /[₺$€£]/.test(haystack); } +function isKnownCouponShoppingHost(host = '') { + return COUPON_SHOPPING_DOMAINS.some((domain) => host === domain || host.endsWith(`.${domain}`)); +} + +function hasCouponFieldSignal(pageInfo = {}) { + const signal = (pageInfo.forms || []).slice(0, 20).flatMap((form) => { + const inputs = (form?.inputs || []).slice(0, 40).filter((input) => { + const type = String(input?.type || '').toLowerCase(); + return !['hidden', 'submit', 'button', 'reset', 'image'].includes(type); + }); + return inputs.flatMap((input) => [input?.type, input?.name, input?.id, input?.placeholder, input?.ariaLabel, input?.label]); + }).filter(Boolean).join(' ').replace(/([a-z])([A-Z])/g, '$1 $2').replace(/[_-]+/g, ' '); + return COUPON_FIELD_RE.test(signal); +} + +function couponPageSignal(pageInfo = {}) { + return [pageInfo.title, pageInfo.description, String(pageInfo.text || '').slice(0, 6000)].filter(Boolean).join(' '); +} + +function hasCouponProductSignal(signal = '') { + return COUPON_PRICE_RE.test(signal) || /\b(add to (?:cart|basket|bag)|buy now|in stock|out of stock|sale price|list price|current price)\b/i.test(signal); +} + +function hasCouponCheckoutValueSignal(signal = '') { + return COUPON_PRICE_RE.test(signal) || /\b(subtotal|order total|payable total|amount due|cart total|estimated total|quantity|qty|\d+\s+items?)\b/i.test(signal); +} + +function isCouponShoppingContext(pageInfo = {}, host = '', path = '/') { + if (!isKnownCouponShoppingHost(host)) return false; + const pageSignal = couponPageSignal(pageInfo); + if (COUPON_EMPTY_CART_RE.test(pageSignal)) return false; + const isCheckoutPage = COUPON_CHECKOUT_HOST_RE.test(host) || COUPON_CHECKOUT_PATH_RE.test(path); + if (isCheckoutPage) return hasCouponFieldSignal(pageInfo) || hasCouponCheckoutValueSignal(pageSignal); + const isProductPage = COUPON_PRODUCT_PATH_RE.test(path) || COUPON_BESTBUY_PRODUCT_PATH_RE.test(path); + return isProductPage && hasCouponProductSignal(pageSignal); +} + function communicationSignal(pageInfo = {}, { includeUrl = true } = {}) { return [ includeUrl ? pageInfo.url : null, @@ -414,6 +492,16 @@ export function buildRecommendedActions(pageInfo = {}, options = {}) { }); } + if (isCouponShoppingContext(pageInfo, host, path)) { + addUnique(actions, { + id: 'find-coupons', + label: 'Find coupon codes', + prompt: 'Inspect this exact product, cart, or checkout through the visible page first. Check merchant-provided offers before researching at most five external candidate codes. If no coupon field is visible, report them only as unverified candidates and never add an item or start checkout merely to test them. If a field is visible, preserve the existing coupon, gift cards, store credit, and loyalty rewards; replace it only if safely restorable. Try codes one at a time, and call one active only when the merchant explicitly accepts it and the payable total or explicit discount changes. Keep the best saving or restore the original state. Report restrictions and before/after totals. Never place the order, pay, enter or change address, shipping, or payment details, or join a membership or subscription. Stop on CAPTCHA or rate limit. Never follow affiliate redirects or install extensions.', + mode: 'act', + runOptions: couponRunOptions(), + }); + } + if (hasNonSearchForm(pageInfo.forms || [])) { addUnique(actions, { id: 'fill-profile', diff --git a/src/firefox/src/agent/agent.js b/src/firefox/src/agent/agent.js index e393f01ec..b4ac1c8eb 100644 --- a/src/firefox/src/agent/agent.js +++ b/src/firefox/src/agent/agent.js @@ -3116,7 +3116,7 @@ export class Agent extends LoopDetector { static EXECUTION_APP_STATE_WRITE_TOOLS = new Set(['scratchpad_write', 'progress_update']); static DELIVERY_OBSERVATION_TOOLS = new Set(['read_page', 'get_accessibility_tree', 'get_interactive_elements', 'extract_data', 'get_selection', 'find_text', 'scroll', 'wait_for_stable', 'wait_for_element', 'read_pdf', 'fetch_url', 'research_url', 'read_downloaded_file', 'iframe_read', 'get_window_info', 'list_downloads', 'progress_read', 'inspect_viewport', 'screenshot', 'get_frames', 'get_shadow_dom', 'shadow_dom_query', 'read_youtube_transcript']); static NAV_PRONE_TOOLS = new Set(['click', 'click_ax', 'set_checked', 'navigate', 'go_back', 'go_forward', 'execute_js', 'iframe_click']); - static RECOMMENDED_ACTION_FAST_PATH_IDS = new Set(['download-media', 'tweet-webbrain', 'post-webbrain-linkedin']); + static RECOMMENDED_ACTION_FAST_PATH_IDS = new Set(['download-media', 'tweet-webbrain', 'post-webbrain-linkedin', 'find-coupons']); static RECOMMENDED_ACTION_FIRST_TOOLS = Object.freeze({ 'download-media': new Set(['screenshot']), 'summarize-page': new Set(['read_page']), @@ -3126,6 +3126,7 @@ export class Agent extends LoopDetector { 'find-followups': new Set(['get_accessibility_tree']), 'rewrite-focused-draft': new Set(['get_accessibility_tree']), 'compare-price': new Set(['get_accessibility_tree']), + 'find-coupons': new Set(['get_accessibility_tree']), }); static RECOMMENDED_ACTION_READ_ONLY_FIRST_TOOLS = new Set(['screenshot', 'read_page', 'get_accessibility_tree', 'read_youtube_transcript']); @@ -7478,6 +7479,7 @@ Rules: no prose intro, no conclusion, no "this screenshot shows...", no layout d if (!this._skillToolForName(tool)) return null; } if (['tweet-webbrain', 'post-webbrain-linkedin'].includes(id) && tool !== 'navigate') return null; + if (id === 'find-coupons' && tool !== 'get_accessibility_tree') return null; const summary = sanitizePlannerText(action.summary || 'Run the selected recommended action.', 500, { collapseWhitespace: true }); const stepLimit = ['tweet-webbrain', 'post-webbrain-linkedin'].includes(id) ? 600 : 300; const steps = Array.isArray(action.steps) diff --git a/src/firefox/src/ui/recommended-actions.js b/src/firefox/src/ui/recommended-actions.js index 88bc0bc94..43cb9afc9 100644 --- a/src/firefox/src/ui/recommended-actions.js +++ b/src/firefox/src/ui/recommended-actions.js @@ -6,6 +6,29 @@ const PUBLIC_MEDIA_HOST_RE = /(^|\.)(youtube\.com|youtu\.be|tiktok\.com|instagra const DATING_HOST_RE = /(^|\.)(tinder\.com|bumble\.com|hinge\.co|okcupid\.com|match\.com|pof\.com|badoo\.com|happn\.com|coffeemeetsbagel\.com)$/i; const SHOPPING_HOST_RE = /(^|\.)(amazon\.[a-z.]+|ebay\.[a-z.]+|etsy\.com|walmart\.com|target\.com|bestbuy\.com|shopify\.com|aliexpress\.com|mercadolibre\.[a-z.]+|mercadolivre\.com\.br|hepsiburada\.com|trendyol\.com|n11\.com|shopee\.[a-z.]+|shopeekh\.com|lazada\.[a-z.]+)$/i; const PRODUCT_PATH_RE = /\/(dp|gp\/product|itm|p|product|products|prod|item|listing|ilan|urun)\b/i; +const COUPON_SHOPPING_DOMAINS = [ + 'amazon.com', 'amazon.ca', 'amazon.com.mx', 'amazon.com.br', 'amazon.co.uk', 'amazon.de', 'amazon.fr', + 'amazon.it', 'amazon.es', 'amazon.nl', 'amazon.pl', 'amazon.se', 'amazon.com.be', 'amazon.co.jp', + 'amazon.in', 'amazon.com.au', 'amazon.sg', 'amazon.ae', 'amazon.sa', 'amazon.com.tr', 'amazon.eg', + 'ebay.com', 'ebay.ca', 'ebay.co.uk', 'ebay.de', 'ebay.fr', 'ebay.it', 'ebay.es', 'ebay.com.au', + 'etsy.com', 'walmart.com', 'target.com', 'bestbuy.com', 'aliexpress.com', 'mercadolivre.com.br', + 'hepsiburada.com', 'trendyol.com', 'n11.com', 'shopeekh.com', + 'mercadolibre.com.ar', 'mercadolibre.com.mx', 'mercadolibre.com.co', 'mercadolibre.cl', + 'mercadolibre.com.pe', 'mercadolibre.com.uy', 'mercadolibre.com.ve', 'mercadolibre.com.ec', + 'mercadolibre.com.bo', 'mercadolibre.com.py', 'mercadolibre.com.do', 'mercadolibre.com.gt', + 'mercadolibre.com.hn', 'mercadolibre.com.ni', 'mercadolibre.com.pa', 'mercadolibre.com.sv', + 'mercadolibre.co.cr', + 'shopee.com', 'shopee.com.br', 'shopee.com.co', 'shopee.com.mx', 'shopee.cl', 'shopee.co.id', + 'shopee.com.my', 'shopee.com.ph', 'shopee.sg', 'shopee.co.th', 'shopee.vn', 'shopee.tw', + 'lazada.com', 'lazada.co.id', 'lazada.com.my', 'lazada.com.ph', 'lazada.sg', 'lazada.co.th', 'lazada.vn', +]; +const COUPON_PRODUCT_PATH_RE = /\/(?:dp|gp\/product|itm|p|product|products|prod|item|listing|ilan|urun|ip|detail)(?:\/|$)/i; +const COUPON_BESTBUY_PRODUCT_PATH_RE = /\/site\/[^/]+\/\d+\.p(?:\/|$)/i; +const COUPON_CHECKOUT_PATH_RE = /\/(?:cart|basket|bag|checkout|checkouts|shopping-cart|shopping-bag|warenkorb|panier|carrito|carrinho|sacola|sepet|troli|keranjang|gio-hang|koszyk|korzina)(?:\/|$)/i; +const COUPON_CHECKOUT_HOST_RE = /^(?:checkout|cart)\./i; +const COUPON_FIELD_RE = /\b(coupon|promo(?:tional)?|voucher|discount)\b/i; +const COUPON_EMPTY_CART_RE = /\b(?:your\s+)?(?:cart|basket|bag)\s+(?:is\s+)?empty\b|\b(?:no|zero)\s+items?\s+in\s+(?:your\s+)?(?:cart|basket|bag)\b/i; +const COUPON_PRICE_RE = /[₺$€£¥₹₩]|\b(?:USD|EUR|GBP|TRY|CAD|AUD|JPY|BRL|MXN|INR)\s*\d|\d\s*(?:USD|EUR|GBP|TRY|CAD|AUD|JPY|BRL|MXN|INR)\b/i; const RELEASES_PATH_RE = /^\/[^/]+\/[^/]+\/releases(?:\/|$)/i; const SEARCH_INPUT_RE = /^(search|q|query|keyword|keywords|s)$/i; const EMAIL_HOST_RE = /(^|\.)(mail\.google\.com|gmail\.com|outlook\.live\.com|outlook\.office\.com|outlook\.office365\.com|mail\.yahoo\.com|icloud\.com|proton\.me|protonmail\.com|fastmail\.com|hey\.com|mail\.zoho\.com)$/i; @@ -136,6 +159,24 @@ function visibleTreeArgs(maxDepth = 10) { return { filter: 'visible', maxDepth }; } +function couponRunOptions() { + return { + id: 'find-coupons', + skipPlanner: true, + autoExecute: true, + tool: 'get_accessibility_tree', + args: visibleTreeArgs(12), + summary: 'Find bounded coupon candidates and verify savings only through the merchant checkout UI.', + steps: [ + 'Read the visible product, cart, or checkout first; record the exact item, seller, subtotal, current discount or coupon, and payable total that are actually shown.', + 'Check merchant-provided offers first, then research at most five external candidate codes relevant to this exact merchant and item.', + 'Without a visible coupon field, report only unverified candidates; never add an item or start checkout merely to test a code.', + 'Preserve the existing coupon, gift cards, store credit, and loyalty rewards; replace it only if safely restorable. Try codes one at a time. Call one active only when the merchant accepts it and the payable total or explicit discount changes. Keep the best saving or restore the original state.', + 'Report sources, rejections, restrictions, and before/after savings. Never place the order, pay, enter or change address, shipping, or payment details, or join a membership or subscription. Stop on CAPTCHA or rate limit. Never follow affiliate redirects or install extensions.', + ], + }; +} + function webbrainTweetRunOptions(postText) { const exactPost = String(postText || '').trim(); return { @@ -185,6 +226,43 @@ function hasCartOrPriceSignal(pageInfo = {}) { || /[₺$€£]/.test(haystack); } +function isKnownCouponShoppingHost(host = '') { + return COUPON_SHOPPING_DOMAINS.some((domain) => host === domain || host.endsWith(`.${domain}`)); +} + +function hasCouponFieldSignal(pageInfo = {}) { + const signal = (pageInfo.forms || []).slice(0, 20).flatMap((form) => { + const inputs = (form?.inputs || []).slice(0, 40).filter((input) => { + const type = String(input?.type || '').toLowerCase(); + return !['hidden', 'submit', 'button', 'reset', 'image'].includes(type); + }); + return inputs.flatMap((input) => [input?.type, input?.name, input?.id, input?.placeholder, input?.ariaLabel, input?.label]); + }).filter(Boolean).join(' ').replace(/([a-z])([A-Z])/g, '$1 $2').replace(/[_-]+/g, ' '); + return COUPON_FIELD_RE.test(signal); +} + +function couponPageSignal(pageInfo = {}) { + return [pageInfo.title, pageInfo.description, String(pageInfo.text || '').slice(0, 6000)].filter(Boolean).join(' '); +} + +function hasCouponProductSignal(signal = '') { + return COUPON_PRICE_RE.test(signal) || /\b(add to (?:cart|basket|bag)|buy now|in stock|out of stock|sale price|list price|current price)\b/i.test(signal); +} + +function hasCouponCheckoutValueSignal(signal = '') { + return COUPON_PRICE_RE.test(signal) || /\b(subtotal|order total|payable total|amount due|cart total|estimated total|quantity|qty|\d+\s+items?)\b/i.test(signal); +} + +function isCouponShoppingContext(pageInfo = {}, host = '', path = '/') { + if (!isKnownCouponShoppingHost(host)) return false; + const pageSignal = couponPageSignal(pageInfo); + if (COUPON_EMPTY_CART_RE.test(pageSignal)) return false; + const isCheckoutPage = COUPON_CHECKOUT_HOST_RE.test(host) || COUPON_CHECKOUT_PATH_RE.test(path); + if (isCheckoutPage) return hasCouponFieldSignal(pageInfo) || hasCouponCheckoutValueSignal(pageSignal); + const isProductPage = COUPON_PRODUCT_PATH_RE.test(path) || COUPON_BESTBUY_PRODUCT_PATH_RE.test(path); + return isProductPage && hasCouponProductSignal(pageSignal); +} + function communicationSignal(pageInfo = {}, { includeUrl = true } = {}) { return [ includeUrl ? pageInfo.url : null, @@ -398,6 +476,16 @@ export function buildRecommendedActions(pageInfo = {}, options = {}) { }); } + if (isCouponShoppingContext(pageInfo, host, path)) { + addUnique(actions, { + id: 'find-coupons', + label: 'Find coupon codes', + prompt: 'Inspect this exact product, cart, or checkout through the visible page first. Check merchant-provided offers before researching at most five external candidate codes. If no coupon field is visible, report them only as unverified candidates and never add an item or start checkout merely to test them. If a field is visible, preserve the existing coupon, gift cards, store credit, and loyalty rewards; replace it only if safely restorable. Try codes one at a time, and call one active only when the merchant explicitly accepts it and the payable total or explicit discount changes. Keep the best saving or restore the original state. Report restrictions and before/after totals. Never place the order, pay, enter or change address, shipping, or payment details, or join a membership or subscription. Stop on CAPTCHA or rate limit. Never follow affiliate redirects or install extensions.', + mode: 'act', + runOptions: couponRunOptions(), + }); + } + if (hasNonSearchForm(pageInfo.forms || [])) { addUnique(actions, { id: 'fill-profile', diff --git a/test/run.js b/test/run.js index a759a2bb2..a0ef95b8b 100644 --- a/test/run.js +++ b/test/run.js @@ -10624,6 +10624,177 @@ for (const [label, buildRecommendedActions] of [['chrome', buildRecommendedActio }); } +for (const [label, buildRecommendedActions] of [['chrome', buildRecommendedActionsCh], ['firefox', buildRecommendedActionsFx]]) { + test(`coupon recommendation targets verified commerce contexts in ${label}`, () => { + const positiveCases = [ + { + name: 'recognized product page', + pageInfo: { + url: 'https://www.amazon.com/dp/B000000', + title: 'Wireless headphones', + description: 'Price $19.99 Add to Cart', + }, + }, + { + name: 'cart route without an exposed coupon field', + pageInfo: { + url: 'https://www.walmart.com/cart', + title: 'Cart', + description: 'Subtotal $42.00', + }, + }, + { + name: 'checkout with a merchant promo field', + pageInfo: { + url: 'https://checkout.ebay.com/', + title: 'Checkout', + forms: [{ inputs: [{ type: 'text', name: 'redemptionCode', placeholder: 'Coupon or promo code' }] }], + }, + }, + { + name: 'Shopee Cambodia product detail page', + pageInfo: { + url: 'https://www.shopeekh.com/kh-en/detail/123', + title: 'Wireless headphones', + description: 'US$20.00', + }, + }, + ]; + + for (const { name, pageInfo } of positiveCases) { + const actions = buildRecommendedActions(pageInfo, { max: 8 }); + const coupon = actions.find((action) => action.id === 'find-coupons'); + assert.ok(coupon, `${label}: missing coupon action for ${name}`); + assert.ok(buildRecommendedActions(pageInfo).some((action) => action.id === 'find-coupons'), `${label}: default action limit hid coupons for ${name}`); + assert.equal(coupon.label, 'Find coupon codes'); + assert.equal(coupon.mode, 'act'); + assert.equal(coupon.runOptions?.id, 'find-coupons'); + assert.equal(coupon.runOptions?.skipPlanner, true); + assert.equal(coupon.runOptions?.autoExecute, true); + assert.equal(coupon.runOptions?.tool, 'get_accessibility_tree'); + assert.deepEqual(coupon.runOptions?.args, { filter: 'visible', maxDepth: 12 }); + const compareIndex = actions.findIndex((action) => action.id === 'compare-price'); + if (compareIndex >= 0) { + assert.ok(actions.indexOf(coupon) < compareIndex, `${label}: coupon action should not be truncated behind compare-price`); + } + } + }); + + test(`coupon recommendation rejects ambiguous and lookalike pages in ${label}`, () => { + const negativeCases = [ + { + name: 'generic storefront homepage', + pageInfo: { + url: 'https://www.amazon.com/', + title: 'Amazon.com', + links: [{ text: 'Cart', href: '/gp/cart/view.html' }, { text: 'Today\'s deals', href: '/deals' }], + }, + }, + { + name: 'storefront tracking form with a hidden discount field', + pageInfo: { + url: 'https://www.amazon.com/', + title: 'Amazon.com', + forms: [{ inputs: [{ type: 'hidden', name: 'discount_tracking' }] }], + }, + }, + { + name: 'storefront marketing form with promo metadata', + pageInfo: { + url: 'https://www.amazon.com/', + title: 'Amazon.com', + forms: [{ inputs: [{ type: 'text', name: 'promoNewsletter', placeholder: 'Get promotions by email' }] }], + }, + }, + { + name: 'gift-card redemption field', + pageInfo: { + url: 'https://www.target.com/account/giftcards', + title: 'Redeem a gift card', + forms: [{ inputs: [{ type: 'text', id: 'gift_code', placeholder: 'Gift code' }] }], + }, + }, + { + name: 'shopping-cart help article', + pageInfo: { + url: 'https://www.amazon.com/gp/help/customer/display.html', + title: 'Shopping Cart Help', + description: 'Learn how the cart works and review common questions.', + }, + }, + { + name: 'empty cart with product recommendations', + pageInfo: { + url: 'https://www.walmart.com/cart', + title: 'Your cart is empty', + text: 'Your cart is empty. Recommended products starting at $19.99.', + }, + }, + { + name: 'product-shaped help route with only a global cart link', + pageInfo: { + url: 'https://www.amazon.com/product/help', + title: 'Product Help', + description: 'Learn about product support.', + links: [{ text: 'Cart', href: '/gp/cart/view.html' }], + }, + }, + { + name: 'lookalike commerce domain', + pageInfo: { + url: 'https://amazon.com.evil.test/dp/B000000', + title: 'Product', + description: 'Price $19.99 Add to Cart', + }, + }, + { + name: 'unknown merchant with coupon-shaped input', + pageInfo: { + url: 'https://shop.example.com/checkout', + title: 'Checkout', + forms: [{ inputs: [{ type: 'text', name: 'coupon', placeholder: 'Promo code' }] }], + }, + }, + { + name: 'malformed URL', + pageInfo: { + url: 'not a URL', + title: 'Product', + description: 'Price $19.99 Add to Cart', + }, + }, + ]; + + for (const { name, pageInfo } of negativeCases) { + const actions = buildRecommendedActions(pageInfo, { max: 8 }); + assert.equal(actions.some((action) => action.id === 'find-coupons'), false, `${label}: false coupon action for ${name}`); + } + }); + + test(`coupon recommendation pins verification and checkout safety in ${label}`, () => { + const actions = buildRecommendedActions({ + url: 'https://www.target.com/cart', + title: 'Cart', + description: 'Subtotal $75.00', + forms: [{ inputs: [{ type: 'text', id: 'promo-code', placeholder: 'Promo code' }] }], + }, { max: 8 }); + const coupon = actions.find((action) => action.id === 'find-coupons'); + assert.ok(coupon); + const contract = [coupon.prompt, coupon.runOptions?.summary, ...(coupon.runOptions?.steps || [])].join(' '); + assert.match(contract, /at most five external candidate codes/i); + assert.match(contract, /unverified candidates/i); + assert.match(contract, /merchant explicitly accepts/i); + assert.match(contract, /payable total or explicit discount/i); + assert.match(contract, /preserve the existing coupon/i); + assert.match(contract, /gift card.*store credit.*loyalty rewards/i); + assert.match(contract, /never place the order/i); + assert.match(contract, /never .*enter or change.*payment/i); + assert.match(contract, /never .*join.*membership or subscription/i); + assert.match(contract, /affiliate redirects/i); + assert.match(contract, /captcha.*rate limit/i); + }); +} + test('WebBrain promotion has localized X and LinkedIn variants with ready-to-go plans', () => { const expectedTweetSteps = (exactPost) => [ 'Open https://x.com/compose/post in the current tab through the visible browser UI.', @@ -60209,6 +60380,80 @@ test('planner gate: trusted WebBrain social promotion actions skip planner and p }); }); +test('planner gate: coupon fast path accepts only its read-only preflight', async () => { + await withPlannerBrowserGlobals(async () => { + for (const [index, [label, AgentClass, buildRecommendedActions]] of [ + ['chrome', AgentCh, buildRecommendedActionsCh], + ['firefox', AgentFx, buildRecommendedActionsFx], + ].entries()) { + const tabId = 9250 + index; + const agent = new AgentClass({ getActive: () => ({}) }); + const coupon = buildRecommendedActions({ + url: 'https://www.walmart.com/cart', + title: 'Cart', + description: 'Subtotal $42.00', + }, { max: 8 }).find((action) => action.id === 'find-coupons'); + assert.ok(coupon?.runOptions, `${label}: coupon ready plan missing`); + + assert.deepEqual( + agent._recommendedActionFastPathPlan({ recommendedAction: coupon.runOptions }), + { + id: 'find-coupons', + tool: 'get_accessibility_tree', + summary: coupon.runOptions.summary, + steps: coupon.runOptions.steps, + }, + `${label}: valid coupon plan should skip a redundant planner call`, + ); + assert.equal( + agent._recommendedActionFastPathPlan({ recommendedAction: { ...coupon.runOptions, tool: 'navigate' } }), + null, + `${label}: coupon fast path must reject a forged immediate tool`, + ); + assert.equal( + agent._recommendedActionFastPathPlan({ recommendedAction: { ...coupon.runOptions, skipPlanner: false } }), + null, + `${label}: coupon fast path must require the first-party skip marker`, + ); + assert.equal( + AgentClass.RECOMMENDED_ACTION_FIRST_TOOLS['find-coupons']?.has('get_accessibility_tree'), + true, + `${label}: coupon preflight tool should be allowlisted`, + ); + + agent.setPlanBeforeActMode('strict'); + agent.setPlanReviewSettings({ mode: 'always' }); + agent.conversations.set(tabId, [{ role: 'system', content: 'system' }]); + let plannerCalls = 0; + agent._runPlannerGate = async () => { + plannerCalls += 1; + throw new Error('coupon recommended action should not call the planner'); + }; + const outcome = await agent._maybeRunPlannerGate( + tabId, + agent.conversations.get(tabId), + { role: 'user', content: coupon.prompt }, + () => {}, + 'act', + null, + null, + null, + { recommendedAction: coupon.runOptions }, + ); + assert.equal(outcome.proceed, true, `${label}: coupon ready plan should proceed`); + assert.equal(plannerCalls, 0, `${label}: coupon ready plan should bypass planner`); + const scratchpadIndex = agent._findScratchpadIndex(agent.conversations.get(tabId)); + assert.ok(scratchpadIndex >= 0, `${label}: coupon ready plan should be pinned`); + const scratchpad = agent._extractScratchpadBody(agent.conversations.get(tabId)[scratchpadIndex].content); + assert.match(scratchpad, /pinned by recommended action/i); + assert.match(scratchpad, /at most five external candidate codes/i); + assert.match(scratchpad, /Never place the order/i); + assert.match(scratchpad, /payment details/i); + assert.match(scratchpad, /membership or subscription/i); + } + }); +}); + test('recommended action first tools are allowlisted and sanitized', () => { for (const [label, AgentClass, prefix] of [['chrome', AgentCh, 'src/chrome'], ['firefox', AgentFx, 'src/firefox']]) { const agent = new AgentClass({ getActive: () => ({}) }); From 9aa0abdc2e5a97fea4301196ee9d193f1528ecdc Mon Sep 17 00:00:00 2001 From: alectimison-maker Date: Sun, 9 Aug 2026 21:50:15 +0800 Subject: [PATCH 2/2] feat: generate coupon merchant coverage --- package.json | 1 + scripts/update-coupon-domains.mjs | 217 ++ src/chrome/src/ui/coupon-domains.js | 3774 +++++++++++++++++++++ src/chrome/src/ui/recommended-actions.js | 24 +- src/firefox/src/ui/coupon-domains.js | 3774 +++++++++++++++++++++ src/firefox/src/ui/recommended-actions.js | 24 +- test/run.js | 70 + 7 files changed, 7850 insertions(+), 34 deletions(-) create mode 100644 scripts/update-coupon-domains.mjs create mode 100644 src/chrome/src/ui/coupon-domains.js create mode 100644 src/firefox/src/ui/coupon-domains.js diff --git a/package.json b/package.json index a5e098451..0c27e4dcb 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "build:web": "npm run build:web:landing && npm run build:blog && npm run build:docs", "build:zip": "node scripts/build-zip.mjs", "trace:otlp": "node scripts/trace-to-otlp.mjs", + "update:coupon-domains": "node scripts/update-coupon-domains.mjs", "sync:logo": "python3 scripts/sync-logo-assets.py && python3 scripts/gen-store-promos.py && node assets/webstore-explainer-2026/render.mjs && node assets/brand-assets-2026-2/render.mjs", "bump": "node scripts/bump-version.mjs", "release": "node scripts/bump-version.mjs --release" diff --git a/scripts/update-coupon-domains.mjs b/scripts/update-coupon-domains.mjs new file mode 100644 index 000000000..c0ba1d3c1 --- /dev/null +++ b/scripts/update-coupon-domains.mjs @@ -0,0 +1,217 @@ +#!/usr/bin/env node + +import { readFile, writeFile } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath, pathToFileURL } from 'node:url'; + +const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const COUPON_FOLLOW_ORIGIN = 'https://couponfollow.com'; +const COUPON_FOLLOW_INDEXES = ['0', ...'abcdefghijklmnopqrstuvwxyz']; +const DEFAULT_CONCURRENCY = 4; +const MAX_RESPONSE_BYTES = 4 * 1024 * 1024; +const PUBLIC_SUFFIX_ONLY = new Set([ + 'co.in', 'co.jp', 'co.kr', 'co.nz', 'co.uk', + 'com.ar', 'com.au', 'com.br', 'com.cn', 'com.co', 'com.hk', 'com.mx', + 'com.my', 'com.pe', 'com.ph', 'com.pk', 'com.sg', 'com.tr', 'com.tw', + 'com.ua', 'co.za', +]); + +// Preserve the original conservative rollout and regional storefronts even if +// a third-party directory temporarily removes or renames one of its entries. +const VETTED_DOMAINS = [ + 'amazon.com', 'amazon.ca', 'amazon.com.mx', 'amazon.com.br', 'amazon.co.uk', 'amazon.de', 'amazon.fr', + 'amazon.it', 'amazon.es', 'amazon.nl', 'amazon.pl', 'amazon.se', 'amazon.com.be', 'amazon.co.jp', + 'amazon.in', 'amazon.com.au', 'amazon.sg', 'amazon.ae', 'amazon.sa', 'amazon.com.tr', 'amazon.eg', + 'ebay.com', 'ebay.ca', 'ebay.co.uk', 'ebay.de', 'ebay.fr', 'ebay.it', 'ebay.es', 'ebay.com.au', + 'etsy.com', 'walmart.com', 'target.com', 'bestbuy.com', 'aliexpress.com', 'mercadolivre.com.br', + 'hepsiburada.com', 'trendyol.com', 'n11.com', 'shopeekh.com', + 'mercadolibre.com.ar', 'mercadolibre.com.mx', 'mercadolibre.com.co', 'mercadolibre.cl', + 'mercadolibre.com.pe', 'mercadolibre.com.uy', 'mercadolibre.com.ve', 'mercadolibre.com.ec', + 'mercadolibre.com.bo', 'mercadolibre.com.py', 'mercadolibre.com.do', 'mercadolibre.com.gt', + 'mercadolibre.com.hn', 'mercadolibre.com.ni', 'mercadolibre.com.pa', 'mercadolibre.com.sv', + 'mercadolibre.co.cr', + 'shopee.com', 'shopee.com.br', 'shopee.com.co', 'shopee.com.mx', 'shopee.cl', 'shopee.co.id', + 'shopee.com.my', 'shopee.com.ph', 'shopee.sg', 'shopee.co.th', 'shopee.vn', 'shopee.tw', + 'lazada.com', 'lazada.co.id', 'lazada.com.my', 'lazada.com.ph', 'lazada.sg', 'lazada.co.th', 'lazada.vn', +]; + +const OUTPUTS = [ + 'src/chrome/src/ui/coupon-domains.js', + 'src/firefox/src/ui/coupon-domains.js', +]; + +function decodeHtmlAttribute(value) { + return String(value || '') + .replace(/&/gi, '&') + .replace(/&#x([0-9a-f]+);/gi, (_, hex) => String.fromCodePoint(Number.parseInt(hex, 16))) + .replace(/&#([0-9]+);/g, (_, decimal) => String.fromCodePoint(Number.parseInt(decimal, 10))); +} + +export function normalizeCouponDomain(value) { + let input = String(value || '').trim().toLowerCase(); + if (!input) return null; + try { + input = decodeURIComponent(input); + } catch { + return null; + } + + let hostname; + try { + hostname = new URL(input.includes('://') ? input : `https://${input}`).hostname; + } catch { + return null; + } + hostname = hostname.replace(/^www\./, '').replace(/\.$/, ''); + if ( + hostname.length > 253 + || !hostname.includes('.') + || !/^[a-z0-9.-]+$/.test(hostname) + || hostname.includes('..') + || PUBLIC_SUFFIX_ONLY.has(hostname) + ) return null; + + const labels = hostname.split('.'); + if (labels.some((label) => !label || label.length > 63 || !/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(label))) { + return null; + } + if (!/^[a-z]{2,63}$/.test(labels.at(-1))) return null; + return hostname; +} + +export function extractCouponFollowDomains(html) { + const domains = new Set(); + const hrefPattern = /]*\bhref\s*=\s*(["'])(.*?)\1/gi; + for (const match of String(html || '').matchAll(hrefPattern)) { + let url; + try { + url = new URL(decodeHtmlAttribute(match[2]), COUPON_FOLLOW_ORIGIN); + } catch { + continue; + } + if (url.hostname !== 'couponfollow.com' && url.hostname !== 'www.couponfollow.com') continue; + const merchantRoute = /^\/site\/([^/]+)\/?$/.exec(url.pathname); + if (!merchantRoute) continue; + const domain = normalizeCouponDomain(merchantRoute[1]); + if (domain) domains.add(domain); + } + return [...domains].sort(); +} + +function normalizedDomains(domains) { + const result = new Set(); + for (const candidate of [...VETTED_DOMAINS, ...(domains || [])]) { + const domain = normalizeCouponDomain(candidate); + if (domain) result.add(domain); + } + return [...result].sort(); +} + +export function renderCouponDomainModule(domains, { sources = [] } = {}) { + const normalized = normalizedDomains(domains); + if (!normalized.length) throw new Error('Refusing to render an empty coupon merchant domain set.'); + const sourceLines = sources.length + ? sources.map((source) => ` * Source: ${source}`).join('\n') + : ' * Source: https://couponfollow.com/site/browse/{0,a-z}/all'; + return `/**\n * Generated by \`npm run update:coupon-domains\`; do not edit by hand.\n${sourceLines}\n * Runtime updates are intentionally disabled: this reviewed snapshot ships with the extension.\n */\nexport const COUPON_MERCHANT_DOMAINS = new Set([\n${normalized.map((domain) => ` '${domain}',`).join('\n')}\n]);\n`; +} + +async function fetchText(url, fetchImpl = fetch) { + const response = await fetchImpl(url, { + headers: { + accept: 'text/html', + 'user-agent': 'WebBrainCouponDomainUpdater/1.0 (+https://github.com/webbrain-one/webbrain)', + }, + redirect: 'follow', + signal: AbortSignal.timeout(30_000), + }); + if (!response.ok) throw new Error(`${url} returned HTTP ${response.status}`); + const declaredLength = Number(response.headers.get('content-length') || 0); + if (declaredLength > MAX_RESPONSE_BYTES) { + throw new Error(`${url} declared ${declaredLength} bytes; limit is ${MAX_RESPONSE_BYTES}`); + } + const text = await response.text(); + if (Buffer.byteLength(text) > MAX_RESPONSE_BYTES) { + throw new Error(`${url} exceeded the ${MAX_RESPONSE_BYTES}-byte response limit`); + } + return text; +} + +async function mapConcurrent(items, concurrency, task) { + const results = new Array(items.length); + let nextIndex = 0; + async function worker() { + while (nextIndex < items.length) { + const index = nextIndex; + nextIndex += 1; + results[index] = await task(items[index], index); + } + } + await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, () => worker())); + return results; +} + +export async function collectCouponFollowDomains({ concurrency = DEFAULT_CONCURRENCY, fetchImpl = fetch } = {}) { + const boundedConcurrency = Math.max(1, Math.min(8, Number(concurrency) || DEFAULT_CONCURRENCY)); + const urls = COUPON_FOLLOW_INDEXES.map((index) => `${COUPON_FOLLOW_ORIGIN}/site/browse/${index}/all`); + const pages = await mapConcurrent(urls, boundedConcurrency, async (url) => { + const html = await fetchText(url, fetchImpl); + const domains = extractCouponFollowDomains(html); + if (!domains.length) throw new Error(`${url} contained no merchant domains`); + return domains; + }); + return normalizedDomains(pages.flat()); +} + +function parseArgs(argv) { + const args = { check: false, concurrency: DEFAULT_CONCURRENCY }; + for (let index = 0; index < argv.length; index += 1) { + const arg = argv[index]; + if (arg === '--check') { + args.check = true; + continue; + } + if (arg === '--concurrency') { + args.concurrency = Number(argv[index + 1]); + index += 1; + continue; + } + throw new Error(`Unknown argument: ${arg}`); + } + if (!Number.isInteger(args.concurrency) || args.concurrency < 1 || args.concurrency > 8) { + throw new Error('--concurrency must be an integer from 1 to 8'); + } + return args; +} + +async function runCli() { + const args = parseArgs(process.argv.slice(2)); + const domains = await collectCouponFollowDomains({ concurrency: args.concurrency }); + const rendered = renderCouponDomainModule(domains); + const changed = []; + + for (const relativePath of OUTPUTS) { + const outputPath = path.join(ROOT, relativePath); + let current = null; + try { + current = await readFile(outputPath, 'utf8'); + } catch (error) { + if (error.code !== 'ENOENT') throw error; + } + if (current === rendered) continue; + changed.push(relativePath); + if (!args.check) await writeFile(outputPath, rendered); + } + + if (args.check && changed.length) { + throw new Error(`coupon domain snapshot is stale: ${changed.join(', ')}`); + } + console.log(`${args.check ? 'Checked' : 'Wrote'} ${domains.length} coupon merchant domains${changed.length ? ` (${changed.join(', ')})` : ' (no changes)'}.`); +} + +if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) { + runCli().catch((error) => { + console.error(`update-coupon-domains: ${error.message}`); + process.exitCode = 1; + }); +} diff --git a/src/chrome/src/ui/coupon-domains.js b/src/chrome/src/ui/coupon-domains.js new file mode 100644 index 000000000..e2c016e16 --- /dev/null +++ b/src/chrome/src/ui/coupon-domains.js @@ -0,0 +1,3774 @@ +/** + * Generated by `npm run update:coupon-domains`; do not edit by hand. + * Source: https://couponfollow.com/site/browse/{0,a-z}/all + * Runtime updates are intentionally disabled: this reviewed snapshot ships with the extension. + */ +export const COUPON_MERCHANT_DOMAINS = new Set([ + '100percentpure.com', + '123-reg.co.uk', + '123inkcartridges.ca', + '123inkjets.com', + '177milkstreet.com', + '1800baskets.com', + '1800contacts.com', + '1800flowers.ca', + '1800flowers.com', + '1800gotjunk.com', + '1800gunsandammo.com', + '1800lighting.com', + '1800petmeds.com', + '1ink.com', + '1upnutrition.com', + '23andme.com', + '247blinds.co.uk', + '24hourfitness.com', + '24s.com', + '2modern.com', + '2ndswing.com', + '2xist.com', + '31philliplim.com', + '32degrees.com', + '360training.com', + '365games.co.uk', + '39dollarglasses.com', + '4inkjets.com', + '4wheelparts.com', + '511tactical.com', + '6pm.com', + '7forallmankind.com', + '99designs.com', + 'a1supplements.com', + 'aa.com', + 'aaa.com', + 'abbottlyon.com', + 'abcmouse.com', + 'abebooks.co.uk', + 'abebooks.com', + 'abercrombie.com', + 'abt.com', + 'academy.com', + 'accorhotels.com', + 'accuquilt.com', + 'acehardware.com', + 'acer.com', + 'acmemarkets.com', + 'acmetools.com', + 'acronis.com', + 'adagio.com', + 'adameve.com', + 'adanola.com', + 'addresshotels.com', + 'adenandanais.com', + 'adidas.ca', + 'adidas.co.uk', + 'adidas.com', + 'adidas.fr', + 'adobe.com', + 'adorama.com', + 'adorebeauty.com', + 'adorebeauty.com.au', + 'adoreme.com', + 'adrenaline.com', + 'adriannapapell.com', + 'adultshop.com.au', + 'advanceautoparts.com', + 'ae.com', + 'aerie.com', + 'aerlingus.com', + 'aerogarden.com', + 'aeromexico.com', + 'aeropostale.com', + 'aeroprecisionusa.com', + 'aerosoles.com', + 'aesop.com', + 'afew-store.com', + 'afloral.com', + 'agentprovocateur.com', + 'agoda.com', + 'ahava.com', + 'airalo.com', + 'airbnb.co.uk', + 'airbnb.com', + 'aircanada.com', + 'airfrance.com', + 'airindia.com', + 'airportparkingreservations.com', + 'airvapeusa.com', + 'ajmadison.com', + 'alamy.com', + 'alaskaair.com', + 'albeebaby.com', + 'albertsons.com', + 'aldi.co.uk', + 'aldoshoes.com', + 'alen.com', + 'alencorp.com', + 'alexandani.com', + 'alexisjae.com', + 'alibaba.com', + 'alibris.co.uk', + 'alibris.com', + 'alienware.com', + 'aliexpress.com', + 'all-clad.com', + 'allbeauty.com', + 'allbirds.com', + 'alldatadiy.com', + 'allegiantair.com', + 'allenedmonds.com', + 'allinonepaint.com', + 'allivet.com', + 'allmodern.com', + 'alloyapparel.com', + 'allposters.com', + 'allsaints.co.uk', + 'allsaints.com', + 'allsole.com', + 'allurebeautybox.com', + 'aloyoga.com', + 'alpinestars.com', + 'alpinetrek.co.uk', + 'als.com', + 'alteyaorganics.com', + 'altitude-sports.com', + 'altrarunning.com', + 'amazon.ae', + 'amazon.ca', + 'amazon.co.jp', + 'amazon.co.uk', + 'amazon.com', + 'amazon.com.au', + 'amazon.com.be', + 'amazon.com.br', + 'amazon.com.mx', + 'amazon.com.tr', + 'amazon.de', + 'amazon.eg', + 'amazon.es', + 'amazon.fr', + 'amazon.in', + 'amazon.it', + 'amazon.nl', + 'amazon.pl', + 'amazon.sa', + 'amazon.se', + 'amazon.sg', + 'ambientedirect.com', + 'amenclinics.com', + 'americanblinds.com', + 'americangirl.com', + 'americangolf.co.uk', + 'amiclubwear.com', + 'amirobeauty.com', + 'amtrak.com', + 'analuisa.com', + 'ancestry.co.uk', + 'ancestry.com', + 'andieswim.com', + 'angara.com', + 'animalpak.com', + 'animoto.com', + 'aninebing.com', + 'anker.com', + 'ankersolix.com', + 'annieselke.com', + 'annmariegianni.com', + 'annsummers.com', + 'anntaylor.com', + 'anolon.com', + 'anovaculinary.com', + 'anthropologie.com', + 'anthropologie.eu', + 'antonioli.eu', + 'anycubic.com', + 'anypromo.com', + 'ao.com', + 'aop.com', + 'aosom.co.uk', + 'apexhotels.co.uk', + 'apmex.com', + 'appaman.com', + 'apple.com', + 'applebees.com', + 'appleseeds.com', + 'applevacations.com', + 'appleyardflowers.com', + 'appliancesdirect.co.uk', + 'approvedfood.co.uk', + 'appsumo.com', + 'apricotonline.co.uk', + 'aquarterof.co.uk', + 'aquasana.com', + 'arcteryx.com', + 'ardene.com', + 'argento.com', + 'argos.co.uk', + 'arhaus.com', + 'ariat.com', + 'arlo.com', + 'armani.com', + 'armaniexchange.com', + 'aroma360.com', + 'art.com', + 'artdiscount.co.uk', + 'artifactuprising.com', + 'artistworks.com', + 'artoftea.com', + 'arttoframe.com', + 'asda.com', + 'ashford.com', + 'ashimaryhair.com', + 'ashleyfurniture.com', + 'ashleyhomestore.ca', + 'ashleystewart.com', + 'asics.com', + 'asos.com', + 'aspiga.com', + 'aspinaloflondon.com', + 'assouline.com', + 'astleyclarke.com', + 'astridandmiyu.com', + 'astrogaming.com', + 'asus.com', + 'ataglance.com', + 'athleta.com', + 'athleta.gapcanada.ca', + 'athome.com', + 'atlasformen.co.uk', + 'atncorp.com', + 'atomtickets.com', + 'att.com', + 'attitudeliving.com', + 'au.shein.com', + 'audible.ca', + 'audible.com', + 'audienhearing.com', + 'audiobooks.com', + 'auratenewyork.com', + 'austrian.com', + 'autodesk.co.uk', + 'autodesk.com', + 'autodoc.co.uk', + 'autozone.com', + 'avalonmagicplants.com', + 'avantitravelinsurance.co.uk', + 'avast.com', + 'aveda.com', + 'aveneusa.com', + 'aventon.com', + 'avenue.com', + 'avery.com', + 'avg.com', + 'avianca.com', + 'aviatornation.com', + 'avira.com', + 'avis.co.uk', + 'avis.com', + 'avocadogreenmattress.com', + 'avon.com', + 'awaytravel.com', + 'awd-it.co.uk', + 'aweinspired.com', + 'azazie.com', + 'azunafresh.com', + 'babbel.com', + 'babiators.com', + 'babyboofashion.com', + 'babyjogger.com', + 'babylist.com', + 'babyquip.com', + 'backinthesaddle.com', + 'backmarket.co.uk', + 'backmarket.com', + 'backstage.com', + 'baggu.com', + 'bakedbymelissa.com', + 'bakemeawish.com', + 'ballarddesigns.com', + 'bally.com', + 'baltini.com', + 'bambooclothing.co.uk', + 'bambulab.com', + 'bananarepublic.ca', + 'bananarepublic.com', + 'bananarepublicfactory.gapfactory.com', + 'banggood.com', + 'bannerbuzz.ca', + 'bannerbuzz.co.uk', + 'bannerbuzz.com', + 'bannerbuzz.com.au', + 'banter.com', + 'barcelo.com', + 'bareminerals.co.uk', + 'bareminerals.com', + 'barenecessities.com', + 'bargainmax.co.uk', + 'barkbox.com', + 'barkerandstonehouse.co.uk', + 'barkingheads.co.uk', + 'barnesandnoble.com', + 'bartesian.com', + 'baseballmonkey.com', + 'basepaws.com', + 'basspro.com', + 'bathandbodyworks.com', + 'batteriesplus.com', + 'battlbox.com', + 'battlehawkarmory.com', + 'baublebar.com', + 'bboutique.co', + 'bbqgalore.com', + 'bbqguys.com', + 'bcbg.com', + 'beachbody.com', + 'beachriot.com', + 'beallsflorida.com', + 'bearcreekarsenal.com', + 'beatbot.com', + 'beatsons.co.uk', + 'beautifiedyou.com', + 'beautybay.com', + 'beautybrands.com', + 'beautypie.com', + 'beautyplussalon.com', + 'beautyrest.com', + 'beaverbrooks.co.uk', + 'bebe.com', + 'becausemarket.com', + 'becker.com', + 'beckett.com', + 'bedbathandbeyond.ca', + 'bedbathandbeyond.com', + 'bedinabox.com', + 'beekman1802.com', + 'beerwulf.com', + 'beginningboutique.com', + 'beginningboutique.com.au', + 'beistravel.com', + 'belk.com', + 'belkin.com', + 'bellamihair.com', + 'belletire.com', + 'bellroy.com', + 'beltoutlet.com', + 'bensherman.com', + 'berettausa.com', + 'bergdorfgoodman.com', + 'bergfreunde.de', + 'berries.com', + 'bershka.com', + 'bespokepost.com', + 'bestbullysticks.com', + 'bestbuy.ca', + 'bestbuy.com', + 'bestcanvas.ca', + 'bestchoiceproducts.com', + 'bestcigarprices.com', + 'bestheating.com', + 'bestvetcare.com', + 'bestwestern.com', + 'betabrand.com', + 'betmgm.com', + 'betseyjohnson.com', + 'betterbathrooms.com', + 'betterworldbooks.com', + 'beverlyhillsmd.com', + 'beyondpolish.com', + 'beyondretro.com', + 'beyondyoga.com', + 'bhphotovideo.com', + 'biblio.com', + 'big5sportinggoods.com', + 'bigbathroomshop.co.uk', + 'bigbustours.com', + 'bigdug.co.uk', + 'biggerbooks.com', + 'biggreensmile.com', + 'biglots.com', + 'bigw.com.au', + 'bikeinn.com', + 'billabong.com', + 'billyreid.com', + 'biltmore.com', + 'biossance.com', + 'biotrust.com', + 'biovea.com', + 'birchbox.com', + 'birchlane.com', + 'birkenstock.com', + 'bissell.com', + 'bistromd.com', + 'bitdefender.com', + 'bizchair.com', + 'bjs.com', + 'bk.com', + 'bkstr.com', + 'blackcircles.com', + 'blackriflecoffee.com', + 'blacks.co.uk', + 'blackstoneproducts.com', + 'bladehq.com', + 'blair.com', + 'blenderseyewear.com', + 'blendtec.com', + 'blinds.com', + 'blindsexpress.com', + 'blindsgalore.com', + 'blinkist.com', + 'blnts.com', + 'blockchain-council.org', + 'bloomandwild.com', + 'bloomchic.com', + 'bloomingdales.com', + 'bloomsybox.com', + 'blue-tomato.com', + 'blueair.com', + 'blueapron.com', + 'bluebella.com', + 'bluebottlecoffee.com', + 'bluehost.com', + 'blueland.com', + 'bluemercury.com', + 'bluenile.com', + 'blueskyvitamin.com', + 'bluettipower.com', + 'blurb.com', + 'bobbibrowncosmetics.com', + 'boden.co.uk', + 'boden.com', + 'bodenusa.com', + 'bodum.com', + 'bodybuilding.com', + 'bodybuildingwarehouse.co.uk', + 'bodykind.com', + 'bogsfootwear.com', + 'bohme.com', + 'bokksu.com', + 'bollandbranch.com', + 'bolt.eu', + 'bombas.com', + 'bombshellsportswear.com', + 'bonanza.com', + 'bondara.co.uk', + 'bondiboost.com.au', + 'bondno9.com', + 'bonds.com.au', + 'bonmarche.co.uk', + 'bonobos.com', + 'boohoo.com', + 'boohoo.com.au', + 'boohooman.com', + 'booking.com', + 'bookoutlet.ca', + 'bookoutlet.com', + 'books2door.com', + 'booksamillion.com', + 'booktopia.com.au', + 'boostmobile.com', + 'bootbarn.com', + 'bornshoes.com', + 'boscovs.com', + 'bose.ca', + 'bose.co.uk', + 'bose.com', + 'bostonproper.com', + 'botanicchoice.com', + 'bouqs.com', + 'bouxavenue.com', + 'bowflex.com', + 'bowlero.com', + 'box.co.uk', + 'box.com', + 'boxlunch.com', + 'bradfordexchangechecks.com', + 'brainmd.com', + 'brandalley.co.uk', + 'brandsmartusa.com', + 'brastop.com', + 'braun.com', + 'bravenewlook.com', + 'brentwoodhome.com', + 'brewdog.com', + 'brickhousenutrition.com', + 'briggs-riley.com', + 'brightspeed.com', + 'briogeohair.com', + 'british-supplements.net', + 'britishairways.com', + 'britishnewspaperarchive.co.uk', + 'brixton.com', + 'brlsports.com', + 'brochuwalker.com', + 'bronsonvitamins.com', + 'brooklinen.com', + 'brooklynbedding.com', + 'brooksbrothers.com', + 'brooksrunning.com', + 'brookstone.com', + 'brooktaverner.co.uk', + 'brother.ca', + 'brownells.com', + 'brownsfashion.com', + 'brownsshoes.com', + 'brumate.com', + 'bruntworkwear.com', + 'brusselsairlines.com', + 'brylanehome.com', + 'bstn.com', + 'buckle.com', + 'budget.co.uk', + 'budget.com', + 'budgetpetcare.com', + 'budgettruck.com', + 'buffalojeans.com', + 'buffalowildwings.com', + 'buffy.co', + 'build.com', + 'buildabear.co.uk', + 'buildabear.com', + 'buildasign.com', + 'built.com', + 'builtbar.com', + 'bulbhead.com', + 'bulk.com', + 'bulkapothecary.com', + 'bulkofficesupply.com', + 'bulksupplements.com', + 'bulletproof.com', + 'bumbleandbumble.com', + 'bunches.co.uk', + 'burlingtoncoatfactory.com', + 'burpee.com', + 'burrow.com', + 'burstoralcare.com', + 'burton.co.uk', + 'burton.com', + 'burtsbees.com', + 'burtsbeesbaby.com', + 'buschgardens.com', + 'business.att.com', + 'business.landsend.com', + 'business.tiktok.com', + 'business.verizon.com', + 'butcherbox.com', + 'buyagift.co.uk', + 'buyautoparts.com', + 'buybestgear.com', + 'buycarparts.co.uk', + 'buydig.com', + 'byltbasics.com', + 'byrna.com', + 'ca.coachoutlet.com', + 'ca.fossil.com', + 'ca.hotels.com', + 'ca.motorola.com', + 'ca.shein.com', + 'cabelas.ca', + 'cabelas.com', + 'cables.com', + 'cadburygiftsdirect.co.uk', + 'caddislife.com', + 'cadenlane.com', + 'caesars.com', + 'cafebritt.com', + 'calendars.com', + 'callawayapparel.com', + 'callawaygolf.com', + 'callawaygolfpreowned.com', + 'calpaktravel.com', + 'calphalon.com', + 'calvinklein.com', + 'calvinklein.us', + 'camelbak.com', + 'cameo.com', + 'campchef.com', + 'camper.com', + 'campingworld.com', + 'campmor.com', + 'campsaver.com', + 'canada.michaels.com', + 'canadapetcare.com', + 'canadavetexpress.com', + 'canadiantire.ca', + 'canon.co.uk', + 'canva.com', + 'canvaschamp.com', + 'canvasdiscount.com', + 'canvasondemand.com', + 'canvasonsale.com', + 'canvaspeople.com', + 'canvaspop.com', + 'canvasprints.com', + 'carawayhome.com', + 'carbon38.com', + 'cardboardcutoutstandees.com', + 'cardcash.com', + 'care.com', + 'carhartt.com', + 'cariloha.com', + 'carlsgolfland.com', + 'carolina.com', + 'carolinashoe.com', + 'carolsdaughter.com', + 'carouselchecks.com', + 'carparts.com', + 'carparts4less.co.uk', + 'carphonewarehouse.com', + 'carsondellosa.com', + 'carters.com', + 'cartersoshkosh.ca', + 'cartridgepeople.com', + 'carvertical.com', + 'case-mate.com', + 'casetify.com', + 'caskers.com', + 'casper.com', + 'cassart.co.uk', + 'castinstyle.co.uk', + 'castlegatelights.co.uk', + 'castlery.com', + 'castlery.com.au', + 'castore.com', + 'catalogfavorites.com', + 'catbirdnyc.com', + 'catfootwear.com', + 'cathaypacific.com', + 'catherines.com', + 'catholiccompany.com', + 'caudabe.com', + 'caudalie.com', + 'cavenders.com', + 'cb2.com', + 'cbcrabcakes.com', + 'cbd.co', + 'cbdforlife.us', + 'cbdfx.com', + 'cbdmd.com', + 'ccleaner.com', + 'cdkeys.com', + 'cduniverse.com', + 'cellucor.com', + 'cengagebrain.com', + 'centralvapors.com', + 'centurymartialarts.com', + 'cettire.com', + 'chacos.com', + 'chadwicks.com', + 'champion.com', + 'champssports.com', + 'chanel.com', + 'chapters.indigo.ca', + 'charbroil.com', + 'charlesandcolvard.com', + 'charleskeith.com', + 'charlottesweb.com', + 'charlottetilbury.com', + 'charmingcharlie.com', + 'chatbooks.com', + 'chatters.ca', + 'cheapcaribbean.com', + 'cheapoair.ca', + 'cheapoair.com', + 'cheaptickets.com', + 'checkgallery.com', + 'checksinthemail.com', + 'checksunlimited.com', + 'cheesecake.com', + 'chefsplate.com', + 'chegg.com', + 'chemicalguys.com', + 'chemist-4-u.com', + 'chemistdirect.com.au', + 'cheryls.com', + 'chewy.ca', + 'chewy.com', + 'chicagocanvas.com', + 'chichiclothing.com', + 'chicme.com', + 'chicos.com', + 'childrensplace.com', + 'childsplayclothing.co.uk', + 'chilitechnology.com', + 'chineselaundry.com', + 'chipotle.com', + 'chitaliving.com', + 'choicehotels.com', + 'chomps.com', + 'christianbook.com', + 'christiesdirect.com', + 'christmaslightsetc.com', + 'chromeburner.com', + 'chromeindustries.com', + 'chubbiesshorts.com', + 'chums.co.uk', + 'cigarpage.com', + 'cigars.com', + 'cigarsinternational.com', + 'cinemark.com', + 'circle-fashion.com', + 'circulon.com', + 'citizenm.com', + 'citizenwatch.com', + 'citybeach.com.au', + 'citychiconline.com', + 'claires.co.uk', + 'claires.com', + 'clarins.co.uk', + 'clarinsusa.com', + 'clarks.co.uk', + 'clarksusa.com', + 'classicfootballshirts.co.uk', + 'clearchemist.co.uk', + 'clearly.ca', + 'clearly.com.au', + 'clearme.com', + 'clickandgrow.com', + 'clinique.co.uk', + 'clinique.com', + 'cliphair.co.uk', + 'cloudways.com', + 'clubmonaco.com', + 'coach.com', + 'coachoutlet.com', + 'coalatree.com', + 'coastfashion.com', + 'codecademy.com', + 'coffeebean.com', + 'coinbase.com', + 'cointracking.info', + 'coldwatercreek.com', + 'colehaan.com', + 'coleman.com', + 'colemanfurniture.com', + 'colettehayman.com.au', + 'colibrirealestate.com', + 'collectionsetc.com', + 'colorescience.com', + 'colorfulimages.com', + 'colourpop.com', + 'columbia.com', + 'columbiasportswear.ca', + 'comfrt.com', + 'compandsave.com', + 'compex.com', + 'completecareshop.co.uk', + 'compressionsale.com', + 'condor.com', + 'constantcontact.com', + 'consumercellular.com', + 'contactlensking.com', + 'contactsdirect.com', + 'containerstore.com', + 'contiki.com', + 'converse.com', + 'coofandy.com', + 'cookiesbydesign.com', + 'cookunity.com', + 'coopersofstortford.co.uk', + 'coophomegoods.com', + 'coppercowcoffee.com', + 'cora.life', + 'corel.com', + 'coreldraw.com', + 'corelle.com', + 'corkcicle.com', + 'cornbreadhemp.com', + 'corsair.com', + 'cos.com', + 'cosplayshopper.com', + 'costco.com', + 'costumes.com', + 'costway.com', + 'cotopaxi.com', + 'cotswoldco.com', + 'cottonon.com', + 'cottonon.com.au', + 'cottontraders.com', + 'countrydoor.com', + 'countrystorecatalog.com', + 'coursehero.com', + 'coursera.org', + 'coversandall.com', + 'cowshed.com', + 'coxandcox.co.uk', + 'cozyearth.com', + 'cozywinters.com', + 'cpap.com', + 'cpooutlets.com', + 'craftcompany.co.uk', + 'craftdlondon.com', + 'craftstash.co.uk', + 'crane.com', + 'crateandbarrel.com', + 'cratejoy.com', + 'crazy-factory.com', + 'crazysales.com.au', + 'crazyshirts.com', + 'creality.com', + 'creationwatches.com', + 'creativeirishgifts.com', + 'creativelive.com', + 'credobeauty.com', + 'cremedelamer.com', + 'crewclothing.co.uk', + 'cricketwireless.com', + 'cricut.com', + 'crocs.ca', + 'crocs.co.uk', + 'crocs.com', + 'crocs.eu', + 'crocus.co.uk', + 'crossbreedholsters.com', + 'crowdcow.com', + 'crutchfield.com', + 'crystalplus.com', + 'crystalski.co.uk', + 'csgo-skins.com', + 'ctshirts.com', + 'cubavera.com', + 'cubcadet.com', + 'cuddledown.com', + 'cuisinart.com', + 'cultbeauty.co.uk', + 'culturekings.com', + 'culturekings.com.au', + 'culturelle.com', + 'cupshe.com', + 'curology.com', + 'currentbody.com', + 'currentcatalog.com', + 'currys.co.uk', + 'curtarra.com', + 'curvissa.co.uk', + 'customink.com', + 'cutsclothing.com', + 'cuyana.com', + 'cvs.com', + 'cvsphoto.com', + 'cyberghostvpn.com', + 'cyberpowerpc.com', + 'cyclegear.com', + 'cyclestore.co.uk', + 'cyclingfrog.com', + 'daehair.com', + 'dagnedover.com', + 'dailysale.com', + 'damart.co.uk', + 'dameproducts.com', + 'dandb.com', + 'dangoproducts.com', + 'danielfootwear.com', + 'danielloboutique.it', + 'danielwellington.com', + 'dankstop.com', + 'dansko.com', + 'dapperstreet.co.uk', + 'dare2b.com', + 'darlingsofchelsea.co.uk', + 'darntough.com', + 'dartagnan.com', + 'dashingdiva.com', + 'davidsbridal.com', + 'davidscookies.com', + 'davidstea.com', + 'davincivaporizer.com', + 'davines.com', + 'dayspring.com', + 'daytimer.com', + 'dbrand.com', + 'dcshoes.com', + 'dearfoams.com', + 'debenhams.com', + 'decathlon.co.uk', + 'deepdiscount.com', + 'deliveroo.co.uk', + 'delivery.com', + 'dell.ca', + 'dell.co.uk', + 'dell.com', + 'dell.com.au', + 'dellrefurbished.com', + 'delonghi.com', + 'delta.com', + 'deltaextrax.com', + 'deluxe.com', + 'demarini.com', + 'dennys.com', + 'dentalplans.com', + 'denvermodern.com', + 'depositphotos.com', + 'derek-rose.com', + 'dermacaredirect.co.uk', + 'dermalogica.com', + 'dermstore.com', + 'designerchecks.com', + 'designeroptics.com', + 'designtoscano.com', + 'desigual.com', + 'dfds.com', + 'dfranklincreation.com', + 'dhgate.com', + 'diamondcbd.com', + 'dibruno.com', + 'dickblick.com', + 'dickies.com', + 'dickssportinggoods.com', + 'diecastmodelswholesale.com', + 'diesel.com', + 'dietdirect.com', + 'diffeyewear.com', + 'digitalocean.com', + 'dillards.com', + 'dinnerly.com', + 'dior.com', + 'diptyqueparis.com', + 'directv.com', + 'discount-supplements.co.uk', + 'discountcontacts.com', + 'discountfilters.com', + 'discountfilterstore.com', + 'discountgolfstore.co.uk', + 'discountmags.com', + 'discountmugs.com', + 'discountramps.com', + 'discountschoolsupply.com', + 'discounttire.com', + 'discoveryplus.com', + 'dish.com', + 'disneylandparis.com', + 'disneyplus.com', + 'disneystore.com', + 'displate.com', + 'displays2go.com', + 'dissh.com.au', + 'distacart.com', + 'diy.com', + 'diyanu.com', + 'dji.com', + 'dkny.com', + 'dndbeyond.com', + 'dockers.com', + 'doheny.com', + 'dolcevita.com', + 'dollar.com', + 'dollardays.com', + 'dollargeneral.com', + 'dollartree.com', + 'dollskill.com', + 'domain.com', + 'domestika.org', + 'dominos.ca', + 'dominos.co.uk', + 'dominos.com', + 'dominos.ie', + 'donaldrussell.com', + 'donnakaran.com', + 'dooney.com', + 'doordash.ca', + 'doordash.com', + 'dormify.com', + 'dorothyperkins.com', + 'dossier.co', + 'drberg.com', + 'drdabber.com', + 'dreamcloudsleep.com', + 'dreametech.com', + 'dreams.co.uk', + 'dreo.com', + 'dressbarn.com', + 'dresslily.com', + 'drfuhrman.com', + 'drhonow.com', + 'drinkag1.com', + 'drinkcirkul.com', + 'drinkhint.com', + 'drinktrade.com', + 'drmartens.com', + 'drop.com', + 'dropps.com', + 'drscholls.com', + 'drschollsshoes.com', + 'drsquatch.com', + 'drunkelephant.com', + 'dsw.ca', + 'dsw.com', + 'dtlr.com', + 'duluthtrading.com', + 'dunelm.com', + 'dungarees.com', + 'dunkindonuts.com', + 'durangoboots.com', + 'dusk.com', + 'dvf.com', + 'dwr.com', + 'dxl.com', + 'dylanscandybar.com', + 'dynadot.com', + 'dynamiteclothing.com', + 'dyson.co.uk', + 'dyson.com', + 'e-file.com', + 'ea.com', + 'eaglecreek.com', + 'earthbreeze.com', + 'easeus.com', + 'easton.com', + 'eastwood.com', + 'easycanvasprints.com', + 'easyclosets.com', + 'easyjet.com', + 'easyspirit.com', + 'eatwith.com', + 'eaze.com', + 'ebags.com', + 'ebay.ca', + 'ebay.co.uk', + 'ebay.com', + 'ebay.com.au', + 'ebay.de', + 'ebay.es', + 'ebay.fr', + 'ebay.it', + 'eberjey.com', + 'ebuyer.com', + 'ecampus.com', + 'ecco.com', + 'echt.com.au', + 'ecoflow.com', + 'ecovacs.com', + 'ecreamery.com', + 'eddiebauer.com', + 'eden.co.uk', + 'edenfantasys.com', + 'ediblearrangements.ca', + 'ediblearrangements.com', + 'edreams.net', + 'edx.org', + 'ee.co.uk', + 'eflorist.co.uk', + 'ego.co.uk', + 'egohome.com', + 'egoshoes.com', + 'eharmony.com', + 'ehplabs.com', + 'eightsleep.com', + 'eightvape.com', + 'eileenfisher.com', + 'ejuiceconnect.com', + 'ekster.com', + 'elc.co.uk', + 'electronicexpress.com', + 'elegoo.com', + 'elementor.com', + 'elemis.com', + 'elfcosmetics.com', + 'elietahari.com', + 'elitecme.com', + 'elitelearning.com', + 'elixinol.com', + 'elizabetharden.com', + 'ellamila.com', + 'ellis-brigham.com', + 'ellos.us', + 'eloquii.com', + 'elvie.com', + 'embarkvet.com', + 'emcosmetics.com', + 'emirates.com', + 'emma-sleep.ca', + 'emmabridgewater.co.uk', + 'emp.co.uk', + 'ems.com', + 'enasco.com', + 'endclothing.co.uk', + 'endclothing.com', + 'endoca.com', + 'endy.com', + 'eneba.com', + 'enfamil.com', + 'enginediy.com', + 'english-heritage.org.uk', + 'ensorings.com', + 'enterprise.co.uk', + 'enterprise.com', + 'entertainmentearth.com', + 'entirelypets.com', + 'envato.com', + 'envirofone.com', + 'epson.com', + 'equestriancollections.com', + 'eqvvs.co.uk', + 'ericjavits.com', + 'erincondren.com', + 'ernestjones.co.uk', + 'escentual.com', + 'escortradar.com', + 'eset.com', + 'esteelauder.co.uk', + 'esteelauder.com', + 'esther.com.au', + 'ethelm.com', + 'etihad.com', + 'etnies.com', + 'etoro.com', + 'etrailer.com', + 'etsy.com', + 'ettitude.com', + 'eufy.com', + 'eufylife.com', + 'eukhost.com', + 'eurocarparts.com', + 'euroffice.co.uk', + 'eurooptic.com', + 'europcar.co.uk', + 'europcar.com', + 'europcar.com.au', + 'eurostar.com', + 'evanscycles.com', + 'evenflo.com', + 'eventbrite.com', + 'eventticketscenter.com', + 'ever-pretty.com', + 'evereve.com', + 'everlane.com', + 'everlast.com', + 'everlywell.com', + 'everyplate.com', + 'everythingbutwater.com', + 'evite.com', + 'evo.com', + 'evoshield.com', + 'evryjewels.com', + 'ewinracing.com', + 'exofficio.com', + 'expedia.ca', + 'expedia.co.uk', + 'expedia.com', + 'expedia.com.au', + 'express.com', + 'expressvpn.com', + 'extendedstayamerica.com', + 'extractlabs.com', + 'exuviance.com', + 'eyebuydirect.com', + 'eyeconic.com', + 'eyeglasses.com', + 'eyeslipsface.co.uk', + 'ezcater.com', + 'ezcontacts.com', + 'ezcosplay.com', + 'eztaxreturn.com', + 'ezup.com', + 'f-secure.com', + 'f1autocentres.co.uk', + 'fabfitfun.com', + 'fabkids.com', + 'fabletics.com', + 'fabulacoffee.com', + 'facethefuture.co.uk', + 'facetheory.com', + 'facetory.com', + 'factor75.com', + 'factormeals.ca', + 'factory.jcrew.com', + 'fahertybrand.com', + 'fairmont.com', + 'familydollar.com', + 'familytreedna.com', + 'famous-smoke.com', + 'famousfootwear.ca', + 'famousfootwear.com', + 'fanatical.com', + 'fanatics.com', + 'fandango.com', + 'fanduel.com', + 'fanka.com', + 'fansedge.com', + 'farah.co.uk', + 'farfetch.com', + 'farmandfleet.com', + 'farmrio.com', + 'fashioneyewear.co.uk', + 'fashionfabricsclub.com', + 'fashionnova.com', + 'fast-growing-trees.com', + 'fastbar.com', + 'fastestvpn.com', + 'fatbraintoys.com', + 'fatface.com', + 'fathead.com', + 'favorites.com', + 'fc-moto.de', + 'feature.com', + 'fedex.com', + 'feelgoodcontacts.com', + 'fender.com', + 'fenix-store.com', + 'fentybeauty.com', + 'fenwick.co.uk', + 'fergusonhome.com', + 'ffx.co.uk', + 'fila.co.uk', + 'filson.com', + 'findmeagift.co.uk', + 'findmypast.co.uk', + 'findmypast.com', + 'fineartamerica.com', + 'finishline.com', + 'firebox.com', + 'firestartoys.com', + 'firmoo.com', + 'firstaidbeauty.com', + 'firstchoice.co.uk', + 'firstclasswatches.co.uk', + 'fishusa.com', + 'fitbit.com', + 'fitflop.com', + 'fivecbd.com', + 'fiverr.com', + 'flamingoland.co.uk', + 'flannels.com', + 'flaviar.com', + 'flawlessvapeshop.com', + 'fleetfeet.com', + 'fleshlight.com', + 'flexispot.co.uk', + 'flexispot.com', + 'flipkart.com', + 'flixbus.com', + 'floom.com', + 'florists.com', + 'florsheim.com', + 'flowerstation.co.uk', + 'flowwall.com', + 'flyfrontier.com', + 'flytap.com', + 'fnp.com', + 'focl.com', + 'foco.com', + 'focuscamera.com', + 'foodlion.com', + 'foodsaver.com', + 'fool.com', + 'footasylum.com', + 'footjoy.com', + 'footlocker.ca', + 'footlocker.co.uk', + 'footlocker.com', + 'forcast.com.au', + 'foreo.com', + 'forever21.com', + 'forhers.com', + 'forhims.com', + 'forme.science', + 'forthglade.com', + 'foryourparty.com', + 'fossil.co.uk', + 'fossil.com', + 'fostergrant.com', + 'foxrentacar.com', + 'foxylocks.com', + 'fractureme.com', + 'fragrancedirect.co.uk', + 'fragrancenet.com', + 'fragrancex.com', + 'frame-store.com', + 'framebridge.com', + 'framesdirect.com', + 'francescas.com', + 'francosarto.com', + 'frankandeileen.com', + 'frankandoak.com', + 'frankdarling.com', + 'fraserhart.co.uk', + 'fredericks.com', + 'freedom.to', + 'freeflyapparel.com', + 'freepeople.com', + 'freeprintsapp.com', + 'freeshipping.com', + 'freetaxusa.com', + 'frenchtoast.com', + 'fresh.com', + 'freshdirect.com', + 'frette.com', + 'frigidaire.com', + 'fromourplace.com', + 'fromyouflowers.com', + 'frontgate.com', + 'frontier.com', + 'frostbuddy.com', + 'frostnyc.com', + 'fruit.com', + 'fruitbouquets.com', + 'fsastore.com', + 'ftd.com', + 'fun.com', + 'functionofbeauty.com', + 'funko.com', + 'funkypigeon.com', + 'funnyfuzzy.com', + 'furla.com', + 'furniture123.co.uk', + 'furnitureinfashion.net', + 'furniturevillage.co.uk', + 'fye.com', + 'g-star.com', + 'g2a.com', + 'gaia.com', + 'gallerycollection.com', + 'galls.com', + 'game.co.uk', + 'gamefly.com', + 'gamepass.nfl.com', + 'gamersgate.com', + 'gamestop.com', + 'gametime.co', + 'gamivo.com', + 'gant.co.uk', + 'gap.co.uk', + 'gap.com', + 'gapcanada.ca', + 'gapfactory.com', + 'garageclothing.com', + 'gardenbuildingsdirect.co.uk', + 'gardeners.com', + 'gardenfurniturecentre.co.uk', + 'gardeningexpress.co.uk', + 'gardentrading.co.uk', + 'garmin.com', + 'garnethill.com', + 'garrettwade.com', + 'gate1travel.com', + 'gatorade.com', + 'gatwickairport.com', + 'gazelle.com', + 'gdfstudio.com', + 'geappliances.com', + 'gearx.com', + 'geekbuying.com', + 'gemini.com', + 'george.com', + 'geox.com', + 'gerberchildrenswear.com', + 'getcasely.com', + 'getfussy.com', + 'getnamenecklace.com', + 'getolympus.com', + 'getquip.com', + 'getsmarter.com', + 'getthelabel.com', + 'getyourguide.com', + 'gfore.com', + 'gfuel.com', + 'ghbass.com', + 'ghdhair.com', + 'ghirardelli.com', + 'ghost.co.uk', + 'ghostbed.com', + 'ghostlifestyle.com', + 'giantfood.com', + 'giantfoodstores.com', + 'giftcards.com', + 'giftexpress.com', + 'giftsforyounow.com', + 'gifttree.com', + 'giglio.com', + 'gillette.co.uk', + 'gilt.com', + 'giltcity.com', + 'giorgioarmanibeauty-usa.com', + 'giraffetools.com', + 'girlfriend.com', + 'giuseppezanotti.com', + 'glamnetic.com', + 'glamorise.com', + 'glasses.com', + 'glassesdirect.co.uk', + 'glassesshop.com', + 'glassesusa.com', + 'glassons.com', + 'gldn.com', + 'global.urbanrevivo.com', + 'globalgolf.com', + 'globalindustrial.com', + 'glossier.com', + 'glossybox.co.uk', + 'glow.co.uk', + 'glowrecipe.com', + 'gltc.co.uk', + 'gnc.com', + 'gnoce.com', + 'goaliemonkey.com', + 'goalzero.com', + 'goat.com', + 'gobble.com', + 'gochirp.com', + 'gocity.com', + 'goclove.com', + 'godaddy.com', + 'goddiva.co.uk', + 'godiva.com', + 'goelia1995.com', + 'gog.com', + 'goggles4u.com', + 'goinggoinggone.com', + 'goldbelly.com', + 'goldenmine.com', + 'goldsmiths.co.uk', + 'golfballs.com', + 'golfgalaxy.com', + 'golfgeardirect.co.uk', + 'golfnow.com', + 'golfonline.co.uk', + 'golftown.com', + 'goli.com', + 'goodamerican.com', + 'goodr.com', + 'goodyear.com', + 'goop.com', + 'gooseberryintimates.com', + 'gooutdoors.co.uk', + 'gopro.com', + 'gopuff.com', + 'gorjana.com', + 'gormanshop.com.au', + 'gossby.com', + 'gothamcigars.com', + 'gotprint.com', + 'gourmetgiftbaskets.com', + 'gousto.co.uk', + 'govee.com', + 'gpen.com', + 'grabagun.com', + 'gracobaby.com', + 'grahamandgreen.co.uk', + 'grammarly.com', + 'grandecosmetics.com', + 'grandinroad.com', + 'grapetree.co.uk', + 'gravityforms.com', + 'greatbigcanvas.com', + 'greatcall.com', + 'greatclubs.com', + 'greatergood.com', + 'greatmagazines.co.uk', + 'greatwolf.com', + 'greenchef.com', + 'greenlight.com', + 'greenmangaming.com', + 'greenpan.us', + 'greenpeople.co.uk', + 'greetingcarduniverse.com', + 'grenade.com', + 'greyhound.com', + 'groomers-online.com', + 'groupon.ca', + 'groupon.co.uk', + 'groupon.com', + 'groupon.com.au', + 'grubhub.com', + 'grunt.com', + 'gruntstyle.com', + 'gruum.com', + 'gruv.com', + 'gtech.co.uk', + 'gtracing.com', + 'guess.ca', + 'guess.com', + 'guess.eu', + 'guessfactory.com', + 'guitarcenter.com', + 'gundrymd.com', + 'gunmagwarehouse.com', + 'guns.com', + 'gusto.com', + 'gymboree.com', + 'gymshark.co.uk', + 'gymshark.com', + 'h10hotels.com', + 'habitat.co.uk', + 'haggar.com', + 'hairburst.com', + 'hairmax.com', + 'hairstory.com', + 'halegroves.com', + 'halfords.com', + 'halfpricedrapes.com', + 'hallmark.com', + 'halloweencostumes.com', + 'halloweenexpress.com', + 'halocollar.com', + 'hamiltonbeach.com', + 'hammacher.com', + 'handy.com', + 'hanes.com', + 'hannaandersson.com', + 'happymammoth.com', + 'happypuzzle.co.uk', + 'happysocks.com', + 'harborfreight.com', + 'harley-davidson.com', + 'harmankardon.com', + 'harmonystore.co.uk', + 'harney.com', + 'harperwilde.com', + 'harrods.com', + 'harryanddavid.com', + 'harryrosen.com', + 'harrys.com', + 'harveynichols.com', + 'hatch.co', + 'hatclub.com', + 'hatley.com', + 'hats.com', + 'hauslabs.com', + 'havaianas.com', + 'havenly.com', + 'hawaiianairlines.com', + 'hawesandcurtis.com', + 'haynes.com', + 'hbomax.com', + 'hbx.com', + 'hdis.com', + 'headspace.com', + 'healthexpress.co.uk', + 'healthspan.co.uk', + 'heartlandvetsupply.com', + 'helixsleep.com', + 'hellobello.com', + 'hellofresh.ca', + 'hellofresh.co.uk', + 'hellofresh.com', + 'hellofresh.com.au', + 'hellomolly.com', + 'hellonomad.com', + 'helloseen.com', + 'hellotushy.com', + 'hellowisp.com', + 'hellyhansen.com', + 'helmutlang.com', + 'helzberg.com', + 'hempbombs.com', + 'henrys.com', + 'hepsiburada.com', + 'herbdoc.com', + 'herbspro.com', + 'hermanmiller.com', + 'herroom.com', + 'herschel.com', + 'hertz.co.uk', + 'hertz.com', + 'hexclad.com', + 'heyabby.com', + 'heydudeshoesusa.com', + 'hibbett.com', + 'hibobbie.com', + 'hiboy.com', + 'hickoryfarms.com', + 'higherdose.com', + 'highlights.com', + 'hike-footwear.com', + 'hilton.com', + 'hinomi.co', + 'hinterlandoutfitters.com', + 'hiphopbling.com', + 'hismileteeth.com', + 'hive.co.uk', + 'hiyahealth.com', + 'hm.com', + 'hobbs.com', + 'hobbylobby.com', + 'hobbytron.com', + 'hobobags.com', + 'hockeymonkey.com', + 'hockeyworld.com', + 'hoka.com', + 'holabirdsports.com', + 'holidayextras.co.uk', + 'holidayinn.com', + 'hollandandbarrett.com', + 'hollisterco.com', + 'homage.com', + 'homary.com', + 'homeandcooksales.com', + 'homebase.co.uk', + 'homechef.com', + 'homedepot.com', + 'homegoods.com', + 'hometitlelock.com', + 'honest.com', + 'honeylove.com', + 'hooverdirect.co.uk', + 'hoppa.com', + 'horizonfitness.com', + 'horizonhobby.com', + 'horse.com', + 'horseloverz.com', + 'hostelworld.com', + 'hostgator.com', + 'hostinger.com', + 'hotdiamonds.co.uk', + 'hotel-bb.com', + 'hotelchocolat.co.uk', + 'hotelcollection.com', + 'hotels.com', + 'hoteltonight.com', + 'hothair.co.uk', + 'hotter.com', + 'hottopic.com', + 'hotwire.com', + 'hourglasscosmetics.com', + 'house.com.au', + 'houseofbruar.com', + 'houseoffraser.co.uk', + 'houzz.com', + 'hp.com', + 'hrblock.com', + 'hsamuel.co.uk', + 'hsastore.com', + 'hsn.com', + 'htvront.com', + 'huckberry.com', + 'hudabeauty.com', + 'hudsonjeans.com', + 'huel.com', + 'huffybikes.com', + 'hugoboss.com', + 'hukgear.com', + 'hulalahome.com', + 'hulu.com', + 'humann.com', + 'humblebundle.com', + 'humehealth.com', + 'hungryroot.com', + 'hunterboots.com', + 'huntsmart.com', + 'hurley.com', + 'hurom.com', + 'hush-uk.com', + 'huskyliners.com', + 'hyatt.com', + 'hydroflask.com', + 'hydropeptide.com', + 'hydrow.com', + 'hyperwear.com', + 'iberia.com', + 'iberostar.com', + 'ibuypower.com', + 'iceland.co.uk', + 'ifixit.com', + 'iflyworld.com', + 'igloocoolers.com', + 'iherb.com', + 'ihg.com', + 'ihop.com', + 'ikea.com', + 'ikmultimedia.com', + 'ikrush.com', + 'illy.com', + 'ilovedooney.com', + 'ilovewallpaper.co.uk', + 'imageskincare.com', + 'imemories.com', + 'incase.com', + 'incogni.com', + 'indochino.com', + 'inez.com', + 'informit.com', + 'inkbox.com', + 'inkcartridges.com', + 'innovations.com.au', + 'innovetpet.com', + 'instacart.ca', + 'instacart.com', + 'instantprint.co.uk', + 'insureandgo.com', + 'interiordefine.com', + 'internetandtv.att.com', + 'interserver.net', + 'inthestyle.com', + 'intheswim.com', + 'intimissimi.com', + 'intuit.com', + 'invictastores.com', + 'invideo.io', + 'invoicesimple.com', + 'iolo.com', + 'ipsy.com', + 'ipvanish.com', + 'irobot.com', + 'isdin.com', + 'issaonline.com', + 'istockphoto.com', + 'ita-airways.com', + 'italist.com', + 'italki.com', + 'itcosmetics.com', + 'itead.cc', + 'itluggage.com', + 'ivacy.com', + 'iwantproof.com', + 'izabel.com', + 'jaanuu.com', + 'jabra.com', + 'jacamo.co.uk', + 'jackery.com', + 'jackrogersusa.com', + 'jacksonhewitt.com', + 'jackwills.com', + 'jadedldn.com', + 'jamesallen.com', + 'jamesperse.com', + 'jamplay.com', + 'janieandjack.com', + 'jansport.com', + 'jared.com', + 'jbl.com', + 'jcpenney.com', + 'jcrew.com', + 'jdsports.co.uk', + 'jdsports.com', + 'jdsports.ie', + 'jdwilliams.co.uk', + 'jednorth.com', + 'jegs.com', + 'jensonusa.com', + 'jerrysartarama.com', + 'jerseymikes.com', + 'jessicalondon.com', + 'jet2.com', + 'jet2holidays.com', + 'jetblue.com', + 'jetbluevacations.com', + 'jeulia.com', + 'jewlr.com', + 'jibjab.com', + 'jildorshoes.com', + 'jimmyjohns.com', + 'jjill.com', + 'jjmalibu.com', + 'jjshouse.com', + 'jmclaughlin.com', + 'joanieclothing.com', + 'joann.com', + 'jockey.com', + 'joebrowns.co.uk', + 'joefresh.com', + 'joesnewbalanceoutlet.com', + 'johngreed.com', + 'johnlewis.com', + 'johnnie-o.com', + 'johnnywas.com', + 'johnstonmurphy.com', + 'johnvarvatos.com', + 'jojomamanbebe.co.uk', + 'jolyn.com', + 'jomalone.com', + 'jomashop.com', + 'jonathanadler.com', + 'jonesbootmaker.com', + 'joom.com', + 'josbank.com', + 'jossandmain.com', + 'joules.com', + 'journeys.ca', + 'journeys.com', + 'joylux.com', + 'joyorganics.com', + 'jpcycles.com', + 'jrcigars.com', + 'jtv.com', + 'judaicawebstore.com', + 'juicebeauty.com', + 'julesb.co.uk', + 'julievos.com', + 'jurawatches.co.uk', + 'just-eat.co.uk', + 'justblinds.com', + 'justcbdstore.com', + 'justfab.com', + 'justfly.com', + 'justhype.co.uk', + 'justvitamins.co.uk', + 'juviasplace.com', + 'k18hair.com', + 'kachava.com', + 'kaptest.com', + 'karenkane.com', + 'karenmillen.com', + 'karmaloop.com', + 'kaspersky.ca', + 'kaspersky.co.uk', + 'kaspersky.com', + 'katebackdrop.com', + 'katesomerville.com', + 'katespade.co.uk', + 'katespade.com', + 'katespadeoutlet.com', + 'katom.com', + 'kay.com', + 'keds.com', + 'keenfootwear.com', + 'keepersecurity.com', + 'keeps.com', + 'keetsa.com', + 'keh.com', + 'kelbyone.com', + 'kendrascott.com', + 'kennethcole.com', + 'kerastase-usa.com', + 'kerastase.ca', + 'keurig.ca', + 'keurig.com', + 'kevinmurphy.com.au', + 'kickscrew.com', + 'kiddies-kingdom.com', + 'kidrobot.com', + 'kidsfootlocker.com', + 'kiehls.ca', + 'kiehls.com', + 'kiiroo.com', + 'kikocosmetics.com', + 'killstar.com', + 'kindle.com', + 'kindredbravely.com', + 'kingsize.com', + 'kinguin.net', + 'kipling-usa.com', + 'kipling.com', + 'kirklands.com', + 'kitchenaid.com', + 'kiwico.com', + 'kizik.com', + 'klook.com', + 'kmart.com', + 'knetbooks.com', + 'knix.com', + 'knixwear.com', + 'knockaround.com', + 'kobo.com', + 'kobobooks.com', + 'kogan.com', + 'kohler.com', + 'kohls.com', + 'koicbd.com', + 'koifootwear.com', + 'koleimports.com', + 'kooding.com', + 'koraorganics.com', + 'krispykreme.com', + 'kroger.com', + 'kswiss.com', + 'kuhl.com', + 'kuiu.com', + 'kurtgeiger.com', + 'kurufootwear.com', + 'kutfromthekloth.com', + 'kwik-fit.com', + 'kyliecosmetics.com', + 'la-z-boy.com', + 'lacolombe.com', + 'lacoste.ca', + 'lacoste.com', + 'lafitness.com', + 'laithwaites.co.uk', + 'lakeland.co.uk', + 'lakepajamas.com', + 'lakeshorelearning.com', + 'lampsplus.com', + 'lancome-usa.com', + 'lancome.ca', + 'landsend.co.uk', + 'landsend.com', + 'lanebryant.com', + 'lapolicegear.com', + 'laptopbatteryexpress.com', + 'laredoute.co.uk', + 'laroche-posay.us', + 'lascana.com', + 'lasenza.com', + 'lastminute.com', + 'latestinbeauty.com', + 'laura.ca', + 'laurageller.com', + 'lauramercier.com', + 'laurenmoshi.com', + 'lavieenrose.com', + 'lavishalice.com', + 'laylasleep.com', + 'lazada.co.id', + 'lazada.co.th', + 'lazada.com', + 'lazada.com.my', + 'lazada.com.ph', + 'lazada.sg', + 'lazada.vn', + 'lazarusnaturals.com', + 'lazyone.com', + 'leaderdoors.co.uk', + 'leaffilter.com', + 'learnworlds.com', + 'leatherman.com', + 'lecreuset.com', + 'lectricebikes.com', + 'ledbulbs.co.uk', + 'ledger.com', + 'lee.com', + 'leekes.co.uk', + 'leesa.com', + 'lef.org', + 'legalzoom.com', + 'lego.com', + 'legoland.com', + 'lehmans.com', + 'lelo.com', + 'lenovo.co.uk', + 'lenovo.com', + 'lenox.com', + 'lensabl.com', + 'lenscrafters.com', + 'lenskart.com', + 'lenskart.us', + 'lenstore.co.uk', + 'leonisa.com', + 'lequipeur.com', + 'lesliespool.com', + 'lesmills.com', + 'levenger.com', + 'levi.com', + 'levoit.com', + 'lg.com', + 'lg.uk', + 'liberty.co.uk', + 'libertytax.com', + 'lids.ca', + 'lids.com', + 'lifeboostcoffee.com', + 'lifeextension.com', + 'lifeisgood.com', + 'lifeprofitness.com', + 'lightboxjewelry.com', + 'lightingnewyork.com', + 'lightinthebox.com', + 'lights.co.uk', + 'lights4fun.co.uk', + 'lightsonline.com', + 'lilash.com', + 'lillianvernon.com', + 'lillylashes.com', + 'lillypulitzer.com', + 'lilysilk.com', + 'lilyskitchen.co.uk', + 'lindt.co.uk', + 'lindtusa.com', + 'linenchest.com', + 'linensandhutch.com', + 'lingoda.com', + 'linkedin.com', + 'liquid-iv.com', + 'liquidweb.com', + 'lisaangel.co.uk', + 'litime.com', + 'littleburgundyshoes.com', + 'littlecaesars.com', + 'littlepassports.com', + 'littlesleepies.com', + 'littlespoon.com', + 'littletikes.com', + 'livemomentous.com', + 'livenation.com', + 'livingproof.com', + 'livingsocial.com', + 'lkbennett.com', + 'llbean.ca', + 'llbean.com', + 'loaded.com', + 'localflavor.com', + 'loccitane.com', + 'loefflerrandall.com', + 'loft.com', + 'logitech.com', + 'logitechg.com', + 'logos.com', + 'longhornsteakhouse.com', + 'longtallsally.com', + 'lookfantastic.com', + 'loopearplugs.com', + 'lopesan.com', + 'lorextechnology.com', + 'lorman.com', + 'lornajane.com', + 'lot.com', + 'loungefly.com', + 'loungeunderwear.com', + 'lovable.dev', + 'loveholidays.com', + 'lovehoney.ca', + 'lovehoney.co.uk', + 'lovehoney.com', + 'lovehoney.com.au', + 'lovellsoccer.co.uk', + 'lovelyskin.com', + 'lovepopcards.com', + 'lovesac.com', + 'lovevery.com', + 'lowes.com', + 'luckybrand.com', + 'lufthansa.com', + 'lugless.com', + 'lugz.com', + 'luisaviaroma.com', + 'lullabellz.com', + 'lulu.com', + 'luluandgeorgia.com', + 'lululemon.co.uk', + 'lululemon.com', + 'lulus.com', + 'lumberliquidators.com', + 'lumedeodorant.com', + 'lumens.com', + 'luminskin.com', + 'lunya.co', + 'lush.com', + 'luvmehair.com', + 'luxyhair.com', + 'lvly.com.au', + 'lww.com', + 'lyft.com', + 'lyleandscott.com', + 'lysse.com', + 'maccosmetics.com', + 'macdonaldhotels.co.uk', + 'macduggal.com', + 'machinemart.co.uk', + 'mackeeper.com', + 'mackenzieltd.com', + 'mackweldon.com', + 'macofalltrades.com', + 'macorner.co', + 'macpaw.com', + 'macys.com', + 'madebymary.com', + 'madewell.com', + 'madison-reed.com', + 'magazine.co.uk', + 'magazines.com', + 'magicspoon.com', + 'magix.com', + 'magoosh.com', + 'maidenform.com', + 'mailchimp.com', + 'mainlinemenswear.co.uk', + 'maisonette.com', + 'maisonmargiela.com', + 'majestic.co.uk', + 'major-lutie.com', + 'makeuperaser.com', + 'malwarebytes.com', + 'mamasandpapas.com', + 'mammamiacovers.com', + 'mammotion.com', + 'mancrates.com', + 'mango.com', + 'mangooutlet.com', + 'manomano.co.uk', + 'manscaped.com', + 'mansurgavriel.com', + 'marcjacobs.com', + 'mardel.com', + 'marika.com', + 'marimekko.com', + 'marinelayer.com', + 'markandgraham.com', + 'marks.com', + 'marksandspencer.com', + 'markselectrical.co.uk', + 'marleylilly.com', + 'marmot.com', + 'marriott.com', + 'marshallheadphones.com', + 'marshalls.com', + 'marymaxim.com', + 'massimodutti.com', + 'mastershoe.co.uk', + 'matalan.co.uk', + 'match.com', + 'mattandnat.com', + 'mattecollection.com', + 'mattressfirm.com', + 'mauijim.com', + 'maurices.com', + 'mavi.com', + 'maxandlily.com', + 'maxaroma.com', + 'maximuscle.com', + 'maxwarehouse.com', + 'maytag.com', + 'mayvenn.com', + 'mcafee.com', + 'mcdonalds.com', + 'mcgeeandco.com', + 'mcmworldwide.com', + 'meandem.com', + 'mec.ca', + 'medexpress.co.uk', + 'medexsupply.com', + 'medievaltimes.com', + 'medterracbd.com', + 'megabus.com', + 'megaseats.com', + 'meijer.com', + 'mejuri.com', + 'melissaanddoug.com', + 'menkind.co.uk', + 'menswearhouse.com', + 'mercadolibre.cl', + 'mercadolibre.co.cr', + 'mercadolibre.com.ar', + 'mercadolibre.com.bo', + 'mercadolibre.com.co', + 'mercadolibre.com.do', + 'mercadolibre.com.ec', + 'mercadolibre.com.gt', + 'mercadolibre.com.hn', + 'mercadolibre.com.mx', + 'mercadolibre.com.ni', + 'mercadolibre.com.pa', + 'mercadolibre.com.pe', + 'mercadolibre.com.py', + 'mercadolibre.com.sv', + 'mercadolibre.com.uy', + 'mercadolibre.com.ve', + 'mercadolivre.com.br', + 'meritbeauty.com', + 'merlincycles.com', + 'merrell.com', + 'meshki.us', + 'metrobyt-mobile.com', + 'meundies.com', + 'miabellebaby.com', + 'miansai.com', + 'michaelkors.ca', + 'michaelkors.co.uk', + 'michaelkors.com', + 'michaels.com', + 'michaelstars.com', + 'michele.com', + 'microsoft.com', + 'midinmod.com', + 'midlandusa.com', + 'midwayusa.com', + 'mielleorganics.com', + 'mikasa.com', + 'milanoo.com', + 'mileskimball.com', + 'milkmakeup.com', + 'millenniumhotels.com', + 'millets.co.uk', + 'minervacrafts.com', + 'ministryofsupply.com', + 'mintandlily.com', + 'minted.com', + 'mintmobile.com', + 'mintvelvet.co.uk', + 'mirandafrye.com', + 'misfitsmarket.com', + 'misspap.com', + 'missyempire.com', + 'mixbook.com', + 'mixtiles.com', + 'mizunousa.com', + 'mizzenandmain.com', + 'mlbshop.com', + 'mlsstore.com', + 'mms.com', + 'mnml.la', + 'mobiles.co.uk', + 'mobvoi.com', + 'modainpelle.com', + 'modanisa.com', + 'modaoperandi.com', + 'modcloth.com', + 'modernbathroom.com', + 'modernnursery.com', + 'modlily.com', + 'modloft.com', + 'modularclosets.com', + 'moen.com', + 'molekule.com', + 'moltonbrown.co.uk', + 'moltonbrown.com', + 'momcozy.com', + 'moneygram.com', + 'monicavinader.com', + 'monoprice.com', + 'monsoon.co.uk', + 'montblanc.com', + 'montirex.com', + 'moo.co.uk', + 'moo.com', + 'moonpig.com', + 'morningsave.com', + 'moroccanoil.com', + 'morphe.com', + 'morrisons.com', + 'moss.co.uk', + 'motel6.com', + 'motelrocks.com', + 'motherdenim.com', + 'motoin.de', + 'motorola.com', + 'motosport.com', + 'mottandbow.com', + 'mountainhardwear.com', + 'mountainsteals.com', + 'mountainwarehouse.com', + 'mous.co', + 'movavi.com', + 'mpb.com', + 'mpix.com', + 'mrporter.com', + 'mrsfields.com', + 'msccruises.co.uk', + 'mscdirect.com', + 'mspy.com', + 'muckbootcompany.com', + 'mud-pie.com', + 'mudwtr.com', + 'muglerusa.com', + 'mugsyjeans.com', + 'murad.co.uk', + 'murad.com', + 'murrayscheese.com', + 'muscleandstrength.com', + 'musclefood.com', + 'musclenation.org', + 'musicarts.com', + 'musiciansfriend.com', + 'musicmagpie.co.uk', + 'musicnotes.com', + 'mvmtwatches.com', + 'my-picture.co.uk', + 'mychicagosteak.com', + 'mycorporation.com', + 'mydavinci.com', + 'myer.com.au', + 'myfahlo.com', + 'myfico.com', + 'myfonts.com', + 'myheritage.com', + 'myisense.com', + 'mylabbox.com', + 'mylee.co.uk', + 'mymemory.co.uk', + 'mymms.com', + 'myoddballs.com', + 'myollie.com', + 'mypatriotsupply.com', + 'myphoto.com', + 'mypillow.com', + 'myprotein.com', + 'mytheresa.com', + 'mytrainpal.com', + 'mytyres.co.uk', + 'myvega.com', + 'myvitamins.com', + 'mywoof.com', + 'n11.com', + 'na-kd.com', + 'naadam.co', + 'nailpolishdirect.co.uk', + 'nakedwines.com', + 'name.com', + 'namecheap.com', + 'names.co.uk', + 'namesilo.com', + 'nanit.com', + 'narscosmetics.com', + 'nastygal.com', + 'natchezss.com', + 'nathanjames.com', + 'nationalbusinessfurniture.com', + 'nationalcar.com', + 'nationalexpress.com', + 'nativecos.com', + 'natori.com', + 'naturalizer.ca', + 'naturalizer.com', + 'naturallife.com', + 'nature.com', + 'naturehills.com', + 'naturepedic.com', + 'naturesbest.co.uk', + 'naturisimo.com', + 'naturium.com', + 'nautica.com', + 'ncl.com', + 'nealsyardremedies.com', + 'nearlynatural.com', + 'nectarsleep.co.uk', + 'nectarsleep.com', + 'negativeunderwear.com', + 'neimanmarcus.com', + 'neocell.com', + 'nespresso.com', + 'nestbedding.com', + 'nestedbean.com', + 'nestnewyork.com', + 'net-a-porter.com', + 'netflix.shop', + 'netgear.com', + 'networksolutions.com', + 'neutrogena.com', + 'newair.com', + 'newark.com', + 'newbalance.co.uk', + 'newbalance.com', + 'newchic.com', + 'newegg.ca', + 'newegg.com', + 'neweggbusiness.com', + 'neweracap.co.uk', + 'neweracap.com', + 'newlook.co.uk', + 'newlook.com', + 'newyorkpass.com', + 'nflshop.com', + 'nhc.com', + 'nike.com', + 'nililotan.com', + 'ninewest.com', + 'ninjakitchen.co.uk', + 'ninjakitchen.com', + 'nisbets.co.uk', + 'nisolo.com', + 'nixon.com', + 'noaandnani.co.uk', + 'nobodyschild.com', + 'nobullproject.com', + 'nolahmattress.com', + 'nolo.com', + 'nomnomnow.com', + 'noom.com', + 'noon.com', + 'noracora.com', + 'nordictrack.com', + 'nordpass.com', + 'nordstrom.com', + 'nordstromrack.com', + 'nordvpn.com', + 'northerntool.com', + 'northstyle.com', + 'norton.com', + 'notino.co.uk', + 'notonthehighstreet.com', + 'nourishedlife.com.au', + 'novica.com', + 'nuggetcomfort.com', + 'nurx.com', + 'nutrafol.com', + 'nutribullet.com', + 'nutrisystem.com', + 'nuts.com', + 'nuuly.com', + 'nvidia.com', + 'nyandcompany.com', + 'nydj.com', + 'nykaa.com', + 'nyxcosmetics.com', + 'nzxt.com', + 'o2.co.uk', + 'oakandluna.com', + 'oakandmore.co.uk', + 'oakcha.com', + 'oakfurnitureland.co.uk', + 'oakley.com', + 'oakley.com.au', + 'obagi.com', + 'ocado.com', + 'oculus.com', + 'odeon.co.uk', + 'office.co.uk', + 'officedepot.com', + 'officemax.com', + 'offspring.co.uk', + 'ogio.com', + 'ohpolly.com', + 'olaplex.com', + 'olay.com', + 'oldnavy.com', + 'oldnavy.gapcanada.ca', + 'oldworldchristmas.com', + 'olehenriksen.com', + 'olight.com', + 'olivegarden.com', + 'olly.com', + 'omahasteaks.com', + 'omegajuicers.com', + 'omio.com', + 'omniluxled.com', + 'omorovicza.com', + 'on.com', + 'onehanesplace.com', + 'oneill.com', + 'onekingslane.com', + 'oneplus.com', + 'onestopplus.com', + 'oneteaspoon.com.au', + 'onetravel.com', + 'onlinecarparts.co.uk', + 'onlinehomeshop.com', + 'onlynaturalpet.com', + 'onnit.com', + 'onxmaps.com', + 'oofos.com', + 'opodo.co.uk', + 'opticontacts.com', + 'opticsplanet.com', + 'oralb.com', + 'orbitz.com', + 'ordnancesurvey.co.uk', + 'oreilly.com', + 'orelia.co.uk', + 'orgain.com', + 'organixx.com', + 'orientaltrading.com', + 'originalgrain.com', + 'originalpenguin.com', + 'originpc.com', + 'origins.co.uk', + 'origins.com', + 'orlebarbrown.com', + 'orlybeauty.com', + 'ornamentshop.com', + 'orthofeet.com', + 'orvis.com', + 'osprey.com', + 'ospreylondon.com', + 'otterbox.com', + 'ouidad.com', + 'outback.com', + 'outdoorlook.co.uk', + 'outdoorresearch.com', + 'outdoorvoices.com', + 'outlet.lenovo.com', + 'outlet.us.dell.com', + 'overclockers.co.uk', + 'overnightprints.com', + 'overstock.com', + 'overtons.com', + 'oxo.com', + 'ozhairandbeauty.com', + 'pacsun.com', + 'paintshoppro.com', + 'paintyourlife.com', + 'paireyewear.com', + 'paisie.com', + 'pajamagram.com', + 'paleoonthego.com', + 'palmettostatearmory.com', + 'pampers.com', + 'pandaexpress.com', + 'pandahall.com', + 'panerabread.com', + 'papajohns.co.uk', + 'papajohns.com', + 'papamurphys.com', + 'papermart.com', + 'parachutehome.com', + 'paragon-software.com', + 'paragonsports.com', + 'parallels.com', + 'paramountplus.com', + 'parcel2go.com', + 'parkcameras.com', + 'parksleepfly.com', + 'parts-express.com', + 'partsgeek.com', + 'partycity.com', + 'patagonia.com', + 'patmcgrath.com', + 'patpat.com', + 'paulaschoice.com', + 'paulayoung.com', + 'paulfredrick.com', + 'paulsmith.co.uk', + 'pavers.co.uk', + 'pbteen.com', + 'pcrichard.com', + 'pe-nation.com', + 'peachskinsheets.com', + 'peachyairportparking.com', + 'peacockalley.com', + 'peacocktv.com', + 'peepers.com', + 'peets.com', + 'pelacase.com', + 'pelican.com', + 'pellemoda.us', + 'penhaligons.com', + 'penningtons.com', + 'peoplesjewellers.com', + 'pepboys.com', + 'peppermayo.com', + 'perfectlens.ca', + 'perfectlensworld.com', + 'perfumania.com', + 'perfume-click.co.uk', + 'perfume.com', + 'perigold.com', + 'perriconemd.com', + 'perryellis.com', + 'persol.com', + 'personalabs.com', + 'personalcreations.com', + 'personalizationmall.com', + 'peruvianconnection.com', + 'petalandpup.com', + 'petcarerx.com', + 'petcaresupplies.com', + 'petco.com', + 'petdrugsonline.co.uk', + 'petermillar.com', + 'peterthomasroth.com', + 'petflow.com', + 'petlibro.com', + 'petmate.com', + 'petsafe.net', + 'petsathome.com', + 'petsmart.ca', + 'petsmart.com', + 'petstock.com.au', + 'petsupermarket.com', + 'pfaltzgraff.com', + 'pgatoursuperstore.com', + 'pharmacy2u.co.uk', + 'pharmacyonline.com.au', + 'phase-eight.co.uk', + 'phase-eight.com', + 'philips-hue.com', + 'philips.com', + 'philo.com', + 'philosophy.com', + 'phlur.com', + 'phone.com', + 'photo.walgreens.com', + 'photobookuk.co.uk', + 'photobox.co.uk', + 'photos.walmart.com', + 'pictureframes.com', + 'picturesongold.com', + 'piedmontese.com', + 'pier1.com', + 'pimsleur.com', + 'pinkblushmaternity.com', + 'pinkcherry.ca', + 'pinkcherry.com', + 'pinklily.com', + 'pipingrock.com', + 'pixibeauty.com', + 'pizzahut.co.uk', + 'pizzahut.com', + 'plae.co', + 'plankandbeam.com', + 'planttherapy.com', + 'plaud.ai', + 'playbaseball.com', + 'playfulpromises.com', + 'playstation.com', + 'plowhearth.com', + 'plumpaper.com', + 'pluralsight.com', + 'plus.espn.com', + 'plushbeds.com', + 'pnf.com', + 'pocketmags.com', + 'poferries.com', + 'polaroid.com', + 'pond5.com', + 'pondkeeper.co.uk', + 'poopourri.com', + 'popeyes.com', + 'poplin.co', + 'popmarket.com', + 'popsockets.co.uk', + 'popsockets.com', + 'poshmark.com', + 'poshpeanut.com', + 'positivepromotions.com', + 'postmates.com', + 'potatoparcel.com', + 'potterybarn.com', + 'potterybarnkids.com', + 'power-systems.com', + 'prana.com', + 'premierinn.com', + 'preply.com', + 'prestigeflowers.co.uk', + 'prettylittlething.com', + 'prettylittlething.com.au', + 'prettylittlething.us', + 'prezzybox.com', + 'priceline.com', + 'priceline.com.au', + 'primallypure.com', + 'primary.com', + 'primaryarms.com', + 'primecables.com', + 'primeprometics.com', + 'princess.com', + 'princesshighway.com.au', + 'princesspolly.co.uk', + 'princesspolly.com', + 'princesspolly.com.au', + 'princetonreview.com', + 'print.staples.com', + 'printerpix.co.uk', + 'printerpix.com', + 'printique.com', + 'prioritypass.com', + 'prioritytire.com', + 'privateinternetaccess.com', + 'proactiv.com', + 'proaudiostar.com', + 'prodirectsoccer.com', + 'proflowers.com', + 'prohealth.com', + 'proozy.com', + 'protalus.com', + 'psd.com', + 'psprint.com', + 'psychobunny.com', + 'publicdesire.com', + 'publiclands.com', + 'publicmobile.ca', + 'publicstorage.com', + 'publix.com', + 'puffy.com', + 'pullandbear.com', + 'pulsetto.tech', + 'puma.co.uk', + 'puma.com', + 'pura.com', + 'puravidabracelets.com', + 'purcosmetics.com', + 'purecollection.com', + 'pureelectric.com', + 'pureformulas.com', + 'puregym.com', + 'purehockey.com', + 'pureology.com', + 'purevpn.com', + 'puritan.com', + 'purple.com', + 'purpleleafshop.com', + 'purpleparking.com', + 'puzzlemaster.ca', + 'puzzleyou.com', + 'pyramydair.com', + 'q-park.co.uk', + 'qalo.com', + 'qatarairways.com', + 'qpjewellers.com', + 'quadlockcase.com', + 'quantumfiber.com', + 'quayaustralia.com', + 'questnutrition.com', + 'quickbooks.intuit.com', + 'quicken.com', + 'quicksilverscientific.com', + 'quiksilver.com', + 'quill.com', + 'quizclothing.co.uk', + 'qustodio.com', + 'qvc.com', + 'qvcuk.com', + 'rackroomshoes.com', + 'radisson.com', + 'radissonhotels.com', + 'radley.co.uk', + 'radleylondon.com', + 'radpowerbikes.com', + 'rafaellastyle.com', + 'rag-bone.com', + 'rainbowshops.com', + 'rains.com', + 'raise.com', + 'rakuten.com', + 'rallyhouse.com', + 'ralphlauren.co.uk', + 'ralphlauren.com', + 'rapala.com', + 'rapidradios.com', + 'rawgeneration.com', + 'rawlings.com', + 'ray-ban.com', + 'ray-ban.com.au', + 'rayconglobal.com', + 'raymourflanigan.com', + 'razer.com', + 'rcwilley.com', + 'rdxsports.com', + 'readers.com', + 'realtruck.com', + 'rebeccaminkoff.com', + 'rebelliousfashion.co.uk', + 'rebelsport.com.au', + 'redbarn.com', + 'redbubble.com', + 'redcon1.com', + 'reddressboutique.com', + 'redletterdays.co.uk', + 'redlobster.com', + 'redroof.com', + 'redwingshoes.com', + 'reebelo.com', + 'reebok.co.uk', + 'reebok.com', + 'reeds.com', + 'reef.com', + 'regatta.com', + 'rei.com', + 'reiss.com', + 'reitmans.com', + 'rejuvenation.com', + 'remedymeds.com', + 'remitly.com', + 'renewlife.com', + 'renogy.com', + 'rentreporters.com', + 'renttherunway.com', + 'reolink.com', + 'replacements.com', + 'representclo.com', + 'reservebar.com', + 'resortpass.com', + 'restaurant.com', + 'restockit.com', + 'restorationhardware.com', + 'reverb.com', + 'revitalash.com', + 'revivalanimal.com', + 'revo.com', + 'revolutionbeauty.com', + 'revolve.com', + 'revopoint3d.com', + 'revzilla.com', + 'rhealsuperfoods.com', + 'rhodeskin.com', + 'rhone.com', + 'riamoneytransfer.com', + 'ridgewallet.com', + 'riflepaperco.com', + 'ring.com', + 'ringcentral.com', + 'ripleys.com', + 'rishi-tea.com', + 'riteaid.com', + 'rituals.com', + 'riverisland.com', + 'rmadefense.com', + 'roadrunnersports.com', + 'roamans.com', + 'robertdyas.co.uk', + 'robertgraham.us', + 'rockabilia.com', + 'rockbottomgolf.com', + 'rocketlanguages.com', + 'rocketlawyer.com', + 'rocketrx.com', + 'rockler.com', + 'rockport.com', + 'rockyboots.com', + 'rods.com', + 'rogue-industries.com', + 'roka.com', + 'rokform.com', + 'roku.com', + 'rollerskatenation.com', + 'roman.co.uk', + 'rona.ca', + 'roots.ca', + 'rosegal.com', + 'roselandfurniture.com', + 'rosettastone.co.uk', + 'rosettastone.com', + 'rosewe.com', + 'ross-simons.com', + 'rothys.com', + 'rotita.com', + 'roundtablepizza.com', + 'routledge.com', + 'rover.com', + 'roxy.com', + 'royalcanin.com', + 'royalmint.com', + 'rticoutdoors.com', + 'rubytuesday.com', + 'rue21.com', + 'ruelala.com', + 'ruggable.co.uk', + 'ruggable.com', + 'rugiet.com', + 'rugs-direct.com', + 'rugsusa.com', + 'runjanji.com', + 'runnersneed.com', + 'runningwarehouse.com', + 'russellstover.com', + 'rvca.com', + 'rvshare.com', + 'rw-co.com', + 'rx-safety.com', + 'ry.com.au', + 'ryanair.com', + 'ryderwear.com.au', + 'ryka.com', + 'ryzesuperfoods.com', + 'saatchiart.com', + 'saatva.com', + 'saba.com.au', + 'safelite.com', + 'safeway.com', + 'safishing.com', + 'sage.com', + 'sail.ca', + 'saily.com', + 'saje.com', + 'sakara.com', + 'saksfifthavenue.com', + 'sallybeauty.com', + 'salomon.com', + 'saltandstone.com', + 'saltlife.com', + 'saltrock.com', + 'saltwaterfish.com', + 'samash.com', + 'samedelman.com', + 'samplize.com', + 'samsclub.com', + 'samsonite.com', + 'samsung.com', + 'sandcloud.com', + 'sanuk.com', + 'sarahraven.com', + 'saranoni.com', + 'sassandbide.com', + 'satyajewelry.com', + 'saucey.com', + 'saucony.com', + 'savagex.com', + 'saxxunderwear.com', + 'scarosso.com', + 'scdkey.com', + 'scentbird.com', + 'scentbox.com', + 'scheels.com', + 'scholastic.com', + 'schuh.co.uk', + 'schuh.ie', + 'schutz-shoes.com', + 'scosche.com', + 'scottsdalegolf.co.uk', + 'scrapbook.com', + 'screwfix.com', + 'scrubsandbeyond.com', + 'scufgaming.com', + 'sea-ny.com', + 'sealskincovers.com', + 'seamless.com', + 'sears.com', + 'searspartsdirect.com', + 'seatgeek.com', + 'seaworld.com', + 'secretescapes.com', + 'secretsales.com', + 'seed.com', + 'seedsman.com', + 'sees.com', + 'seetickets.com', + 'selectblinds.com', + 'selfridges.com', + 'sell.worldofbooks.com', + 'sendflowers.com', + 'sennheiser-hearing.com', + 'sephora.co.uk', + 'sephora.com', + 'seraphine.com', + 'serenaandlily.com', + 'serenataflowers.com', + 'serta.com', + 'sesameplace.com', + 'sevilleclassics.com', + 'sewingmachinesplus.com', + 'shadyrays.com', + 'shapellx.com', + 'shapermint.com', + 'sharkclean.co.uk', + 'sharkclean.com', + 'sharperimage.com', + 'shavershop.com.au', + 'shaws.com', + 'sheds.co.uk', + 'sheertex.com', + 'sheetmusicplus.com', + 'shefit.com', + 'shein.co.uk', + 'shein.com', + 'shethinx.com', + 'shiekh.com', + 'shiekhshoes.com', + 'shinesty.com', + 'shipt.com', + 'shirtspace.com', + 'shiseido.com', + 'shoebacca.com', + 'shoecarnival.com', + 'shoedazzle.com', + 'shoemall.com', + 'shoepalace.com', + 'shoesforcrews.com', + 'shoestation.com', + 'shoezone.com', + 'shokz.com', + 'shop.com', + 'shop.franklinplanner.com', + 'shop.nhl.com', + 'shop.puma.ca', + 'shop.simon.com', + 'shop.usa.canon.com', + 'shop.vans.co.uk', + 'shopakira.com', + 'shopbop.com', + 'shopcider.com', + 'shopdisney.co.uk', + 'shopee.cl', + 'shopee.co.id', + 'shopee.co.th', + 'shopee.com', + 'shopee.com.br', + 'shopee.com.co', + 'shopee.com.mx', + 'shopee.com.my', + 'shopee.com.ph', + 'shopee.sg', + 'shopee.tw', + 'shopee.vn', + 'shopeekh.com', + 'shopify.com', + 'shopindoorgolf.com', + 'shopjourney.com', + 'shopjura.com', + 'shopjustice.com', + 'shoplc.com', + 'shoplet.com', + 'shopmando.com', + 'shopmicas.com', + 'shopmissa.com', + 'shoppremiumoutlets.com', + 'shopto.net', + 'shopvida.com', + 'shopwss.com', + 'showmeyourmumu.com', + 'showpo.com', + 'shudder.com', + 'shutterfly.com', + 'shutterstock.com', + 'shuuemura-usa.com', + 'sideshow.com', + 'sierra.com', + 'sierralivingconcepts.com', + 'sigmabeauty.com', + 'signalrelief.com', + 'sigsauer.com', + 'silvergoldbull.com', + 'silverjeans.com', + 'simbasleep.com', + 'simons.ca', + 'simplehuman.com', + 'simplemobile.com', + 'simplemodern.com', + 'simpletire.com', + 'simpli-home.com', + 'simplybe.co.uk', + 'simplymedsonline.co.uk', + 'simplysupplements.co.uk', + 'simplytoimpress.com', + 'singaporeair.com', + 'singer.com', + 'siobeauty.com', + 'siriusxm.com', + 'sittercity.com', + 'sixflags.com', + 'sixity.com', + 'sixthreezero.com', + 'size.co.uk', + 'skechers.com', + 'skillshare.com', + 'skims.com', + 'skinceuticals.com', + 'skinnydiplondon.com', + 'skinnytan.com', + 'skinstore.com', + 'skiphop.com', + 'skipthedishes.com', + 'skis.com', + 'skullcandy.com', + 'skylar.com', + 'skylightframe.com', + 'skylum.com', + 'skyscanner.com', + 'sleefs.com', + 'sleekhair.com', + 'sleeper.com', + 'sleepez.com', + 'sleepnumber.com', + 'slicelife.com', + 'slidebelts.com', + 'sling.com', + 'slipcovershop.com', + 'slugger.com', + 'slumberpod.com', + 'smallable.com', + 'smallflower.com', + 'smallwoodhome.com', + 'smartbox.com', + 'smartbuyglasses.com', + 'smartwingshome.com', + 'smartwool.com', + 'smashbox.com', + 'smkw.com', + 'smokecartel.com', + 'smokonow.com', + 'smoothiebox.com', + 'snagtights.com', + 'snakeriverfarms.com', + 'snapfish.co.uk', + 'snapfish.com', + 'sneakersnstuff.com', + 'snipesusa.com', + 'snowandrock.com', + 'snowinn.com', + 'snowjoe.com', + 'soakandsleep.com', + 'soccer.com', + 'society6.com', + 'sodastream.com', + 'sofaclub.co.uk', + 'sofftshoe.com', + 'sofi.com', + 'softsurroundings.com', + 'sokoglam.com', + 'solawave.co', + 'soldejaneiro.com', + 'soletreadmills.com', + 'solgaard.co', + 'solostove.com', + 'solsticesunglasses.com', + 'soma.com', + 'sonicdrivein.com', + 'sonicelectronix.com', + 'sonos.com', + 'sony.com', + 'soothe.com', + 'sorel.com', + 'sorelfootwear.ca', + 'sourcemore.com', + 'southwest.com', + 'southwestvacations.com', + 'spabreaks.com', + 'spacenk.com', + 'spaceship.com', + 'spafinder.com', + 'spanx.com', + 'spartan.com', + 'spaseekers.com', + 'speckproducts.com', + 'speediance.com', + 'speedo.com', + 'spelabautoparts.com', + 'spencersonline.com', + 'sperry.com', + 'spirit.com', + 'spirithalloween.com', + 'splashwines.com', + 'splendid.com', + 'spongelle.com', + 'spoonflower.com', + 'spoonfulofcomfort.com', + 'sportchek.ca', + 'sportsdirect.com', + 'sportsmans.com', + 'sportsmansguide.com', + 'sportsmanswarehouse.com', + 'sportsmemorabilia.com', + 'sportsshoes.com', + 'spothero.com', + 'spreadshirt.co.uk', + 'springer.com', + 'springwellwater.com', + 'spyder.com', + 'squarespace.com', + 'squareup.com', + 'squattypotty.com', + 'ssense.com', + 'ssww.com', + 'stacksocial.com', + 'stacyadams.com', + 'stadiumgoods.com', + 'stamps.com', + 'stanley1913.com', + 'staples.ca', + 'staples.co.uk', + 'staples.com', + 'staplescopyandprint.ca', + 'staplespromo.com', + 'starmarket.com', + 'startfitness.co.uk', + 'starz.com', + 'stasherbag.com', + 'stateandliberty.com', + 'statelinetack.com', + 'staysure.co.uk', + 'stearnsandfoster.com', + 'steelcase.com', + 'steelseries.com', + 'steinersports.com', + 'stelladot.com', + 'stellamccartney.com', + 'stellarinfo.com', + 'step2.com', + 'stevemadden.ca', + 'stevemadden.com', + 'stickermule.com', + 'stickeryou.com', + 'stilacosmetics.com', + 'stio.com', + 'stirlingkit.com', + 'stitchfix.com', + 'stockx.com', + 'stoneberry.com', + 'stonewallkitchen.com', + 'stopandshop.com', + 'store.kuiu.com', + 'store.liverpoolfc.com', + 'store.metmuseum.org', + 'store.nascar.com', + 'store.nba.com', + 'store.nytimes.com', + 'storyworth.com', + 'stradivarius.com', + 'straighttalk.com', + 'strapsco.com', + 'strawberrynet.com', + 'striderite.com', + 'strivectin.com', + 'stroops.com', + 'stuartslondon.com', + 'stuartweitzman.com', + 'stubhub.com', + 'stuckonyou.com.au', + 'studentbeans.com', + 'studentuniverse.com', + 'studio.co.uk', + 'stuhrling.com', + 'styletread.com.au', + 'stylevana.com', + 'stylewe.com', + 'subway.com', + 'suitdirect.co.uk', + 'sullenclothing.com', + 'sulwhasoo.com', + 'summitracing.com', + 'sunandski.com', + 'sunglasshut.com', + 'sunglasshut.com.au', + 'sungoldpower.com', + 'sunnysports.com', + 'supcase.com', + 'super.com', + 'supercheapsigns.com', + 'superdrug.com', + 'superdry.com', + 'supergoop.com', + 'superjeweler.com', + 'supplementhunt.com', + 'supre.com.au', + 'surfshark.com', + 'surfstitch.com', + 'surlatable.com', + 'surprise.katespade.com', + 'suttons.co.uk', + 'suzannesomers.com', + 'suzyshier.com', + 'svsound.com', + 'swansonvitamins.com', + 'swarovski.com', + 'sweat.com', + 'sweatybetty.com', + 'sweetgreen.com', + 'sweetwater.com', + 'swell.com', + 'swimoutlet.com', + 'swimsuitsforall.com', + 'sylvane.com', + 't-mobile.com', + 'tableclothsfactory.com', + 'tackledirect.com', + 'tactics.com', + 'tailorbrands.com', + 'tails.com', + 'talbots.com', + 'talkspace.com', + 'tanga.com', + 'tantaly.com', + 'taosfootwear.com', + 'target.com', + 'targetoptical.com', + 'targetphoto.com', + 'tartecosmetics.com', + 'taschen.com', + 'tascperformance.com', + 'taskrabbit.co.uk', + 'taskrabbit.com', + 'tatcha.com', + 'taxact.com', + 'taxslayer.com', + 'taylormadegolf.com', + 'taylorstitch.com', + 'teacollection.com', + 'techsmith.com', + 'tecovas.com', + 'tedbaker.com', + 'teeoff.com', + 'teepublic.com', + 'teladoc.com', + 'teleflora.com', + 'tello.com', + 'telus.com', + 'tempo.fit', + 'tempomeals.com', + 'temptu.com', + 'tempurpedic.com', + 'temu.com', + 'tennis-warehouse.com', + 'tennisexpress.com', + 'tenthousand.cc', + 'terminix.com', + 'tervis.com', + 'tesco.com', + 'tescomobile.com', + 'tessabit.com', + 'teva.com', + 'textbooks.com', + 'tgw.com', + 'thatdailydeal.com', + 'the-house.com', + 'theadventurechallenge.com', + 'theartofshaving.com', + 'thebay.com', + 'thecakedecoratingcompany.co.uk', + 'thecbdistillery.com', + 'thecompanystore.com', + 'thecpapshop.com', + 'thedetoxmarket.com', + 'theessencevault.co.uk', + 'thefarmersdog.com', + 'thefragranceshop.co.uk', + 'thefruitcompany.com', + 'thefryecompany.com', + 'thegamecollection.net', + 'thegldshop.com', + 'thegoodguys.com.au', + 'thegreatcourses.com', + 'thegymking.com', + 'thehalara.com', + 'thehipstore.co.uk', + 'thehydrojug.com', + 'theiconic.com.au', + 'theirishstore.com', + 'theknot.com', + 'thelasthunt.com', + 'theluxurycloset.com', + 'themacateam.com', + 'thenorthface.co.uk', + 'thenorthface.com', + 'theordinary.com', + 'theory.com', + 'theoutnet.com', + 'thepaperstore.com', + 'theparkingspot.com', + 'theperfumeshop.com', + 'thepopcornfactory.com', + 'theproteinworks.com', + 'therabody.com', + 'therange.co.uk', + 'therealreal.com', + 'thereformation.com', + 'thermoworks.com', + 'thesak.com', + 'theshadestore.com', + 'thetiebar.com', + 'thetileapp.com', + 'thetoyshop.com', + 'thetrainline.com', + 'thewalkingcompany.com', + 'thewhitecompany.com', + 'theworks.co.uk', + 'thingsremembered.com', + 'thirdlove.com', + 'thisworks.com', + 'thmarinesupplies.com', + 'thompson-morgan.com', + 'thompsoncigar.com', + 'thorne.com', + 'thorntons.co.uk', + 'thortful.com', + 'threadless.com', + 'thredup.com', + 'thriftbooks.com', + 'thrifty.com', + 'thrivecausemetics.com', + 'thrivemarket.com', + 'thuma.co', + 'thymes.com', + 'ticketcity.com', + 'ticketmaster.ca', + 'ticketmaster.co.uk', + 'ticketmaster.com', + 'ticketmaster.com.au', + 'ticketnetwork.com', + 'ticketsmarter.com', + 'ticketweb.com', + 'tickpick.com', + 'tidewe.com', + 'ties.com', + 'tiktok.com', + 'tile.com', + 'tillys.com', + 'timberland.co.uk', + 'timberland.com', + 'timberlandonline.co.uk', + 'timbuk2.com', + 'timex.ca', + 'timex.com', + 'tipsyelves.com', + 'tiptop.ca', + 'tiqets.com', + 'tireagent.com', + 'tirebuyer.com', + 'tiremart.com', + 'tirerack.com', + 'tires-easy.com', + 'titan.fitness', + 'tjc.co.uk', + 'tjmaxx.tjx.com', + 'tkmaxx.com', + 'tmlewin.co.uk', + 'tmlewin.com', + 'tnuck.com', + 'todaytix.com', + 'toddsnyder.com', + 'toffs.com', + 'tog24.com', + 'tomboyx.com', + 'tommy.com', + 'tommybahama.com', + 'tommyjohn.com', + 'toms.com', + 'tonies.com', + 'tonyrobbins.com', + 'toofaced.com', + 'toolstation.com', + 'toolstoday.com', + 'tootimid.com', + 'topgolf.com', + 'topodesigns.com', + 'topps.com', + 'topresume.com', + 'torrid.com', + 'toryburch.co.uk', + 'toryburch.com', + 'totalwine.com', + 'totalwireless.com', + 'totes.co.uk', + 'touchofmodern.com', + 'touchstonehomeproducts.com', + 'tourradar.com', + 'tours4fun.com', + 'tous.com', + 'toynk.com', + 'toysrus.com', + 'tracfone.com', + 'tractive.com', + 'tractorsupply.com', + 'tradeinn.com', + 'trafalgar.com', + 'training.linuxfoundation.org', + 'transavia.com', + 'transparentlabs.com', + 'travelocity.ca', + 'travelocity.com', + 'travelodge.co.uk', + 'travelodge.com', + 'traveloka.com', + 'travelpro.com', + 'traverseon.com', + 'travismathew.com', + 'travisperkins.co.uk', + 'treatwell.co.uk', + 'tredz.co.uk', + 'tree2mydoor.com', + 'trekbikes.com', + 'trekkinn.com', + 'trendmicro.com', + 'trendyol.com', + 'trespass.com', + 'trestique.com', + 'trifectanutrition.com', + 'trinaturk.com', + 'trip.com', + 'tripadvisor.co.uk', + 'tripadvisor.com', + 'trotters.com', + 'troybilt.com', + 'trueclassictees.com', + 'trueleafmarket.com', + 'truenaturemeats.com', + 'truenutrition.com', + 'trueprotein.com.au', + 'truereligion.com', + 'trueshotammo.com', + 'trustedhousesitters.com', + 'trxtraining.com', + 'trycaviar.com', + 'trynood.com', + 'tsc.ca', + 'tubbytodd.com', + 'tuftandneedle.com', + 'tui.co.uk', + 'tula.com', + 'tumi.com', + 'tunnelbear.com', + 'turbotax.intuit.ca', + 'turbotax.intuit.com', + 'turkishairlines.com', + 'turo.com', + 'turtlebeach.com', + 'tv.apple.com', + 'tv.youtube.com', + 'tvc-mall.com', + 'twillory.com', + 'twinings.co.uk', + 'twopagescurtains.com', + 'tyentusa.com', + 'tyr.com', + 'tyre-shopper.co.uk', + 'uber.com', + 'ubereats.co.nz', + 'ubereats.com', + 'ubereats.com.au', + 'udacity.com', + 'udemy.com', + 'ufcstore.com', + 'ugg.com', + 'uggexpress.com.au', + 'uglychristmassweater.com', + 'uk.coach.com', + 'uk.hotels.com', + 'uk.morphe.com', + 'ukstore.hermanmiller.com', + 'ulike.com', + 'uline.com', + 'ullapopken.com', + 'ulta.com', + 'ultimateears.com', + 'unbeatablesale.com', + 'uncommongoods.com', + 'underarmour.com', + 'undercovertourist.com', + 'undergroundshirts.com', + 'underoutfit.com', + 'unice.com', + 'uniformadvantage.com', + 'unineed.com', + 'unionbay.com', + 'uniplaces.com', + 'uniqlo.com', + 'unique-vintage.com', + 'united.com', + 'universalstandard.com', + 'untilgone.com', + 'untuckit.com', + 'upliftdesk.com', + 'ups.com', + 'upside.com', + 'urban-planet.com', + 'urbandecay.com', + 'urbanoutfitters.co.uk', + 'urbanoutfitters.com', + 'urbanstems.com', + 'us.amazfit.com', + 'us.chantelle.com', + 'us.dbjourney.com', + 'us.innisfree.com', + 'us.laneige.com', + 'us.missoma.com', + 'us.pandora.net', + 'us.riverisland.com', + 'us.roborock.com', + 'usa.tommy.com', + 'uscellular.com', + 'uspoloassn.com', + 'vancaro.com', + 'vanheusen.com.au', + 'vans.com', + 'vapesourcing.com', + 'vapordna.com', + 'veed.io', + 'vegamour.com', + 'vegas.com', + 'vegogarden.com', + 'velvet-tees.com', + 'venus.com', + 'verabradley.com', + 'verizon.com', + 'verizonwireless.com', + 'vermontcountrystore.com', + 'veronicabeard.com', + 'versedskin.com', + 'vertbaudet.co.uk', + 'very.co.uk', + 'vessi.com', + 'vestiairecollective.com', + 'vetsupply.com.au', + 'vevor.com', + 'viagogo.com', + 'viator.com', + 'vichy.ca', + 'vichyusa.com', + 'vicicollection.com', + 'victorianplumbing.co.uk', + 'victoriassecret.com', + 'victorinox.com', + 'vidaxl.co.uk', + 'vidaxl.com', + 'videostudiopro.com', + 'viking-direct.co.uk', + 'vikingbags.com', + 'vilebrequin.com', + 'vimeo.com', + 'vince.com', + 'vincecamuto.com', + 'vineyardvines.com', + 'vintagetub.com', + 'vioc.com', + 'vionicshoes.com', + 'viovet.co.uk', + 'virginatlantic.com', + 'virginballoonflights.co.uk', + 'virginexperiencedays.co.uk', + 'virginmedia.com', + 'visible.com', + 'visiondirect.co.uk', + 'visiondirect.com.au', + 'vistaprint.ca', + 'vistaprint.co.uk', + 'vistaprint.com', + 'vistaprint.com.au', + 'vitabiotics.com', + 'vitacost.com', + 'vitalchoice.com', + 'vitalsource.com', + 'vitaminshoppe.com', + 'vitamix.com', + 'vitrazza.com', + 'vivaterra.com', + 'vividracing.com', + 'vividseats.com', + 'viviennewestwood.com', + 'viviscal.com', + 'vivobarefoot.com', + 'vixpaulahermanny.com', + 'vodafone.co.uk', + 'voipsupply.com', + 'volcom.com', + 'volotea.com', + 'vons.com', + 'vrai.com', + 'vrbo.com', + 'vueling.com', + 'vuoriclothing.com', + 'wacoal-america.com', + 'wagjag.com', + 'waitrose.com', + 'waitrosecellar.com', + 'walgreens.com', + 'walkingpad.com', + 'walkinlab.com', + 'wallis.co.uk', + 'wallpaperdirect.com', + 'walmart.ca', + 'walmart.com', + 'wander.com', + 'wanderprints.com', + 'wandrd.com', + 'warbyparker.com', + 'warmies.com', + 'watchco.com', + 'watchgang.com', + 'waterdropfilter.com', + 'waterford.com', + 'waterstones.com', + 'way.com', + 'wayfair.ca', + 'wayfair.co.uk', + 'wayfair.com', + 'wayfairprofessional.com', + 'wayspa.com', + 'we-vibe.com', + 'wearewild.com', + 'wearfigs.com', + 'wearlively.com', + 'wearpact.com', + 'weber.com', + 'webeyecare.com', + 'webnode.com', + 'webroot.com', + 'webstaurantstore.com', + 'wedgwood.com', + 'weekday.com', + 'weekendoffender.com', + 'weightwatchers.com', + 'weirdfish.co.uk', + 'well.ca', + 'wellbots.com', + 'welovefrugi.com', + 'west49.com', + 'westelm.com', + 'westerndigital.com', + 'westernunion.com', + 'westmarine.com', + 'westmorebeauty.com', + 'wetnwildbeauty.com', + 'whirlpool.com', + 'whistle.com', + 'whistlefish.com', + 'whistles.co.uk', + 'whistles.com', + 'whitefoxboutique.co.uk', + 'whitefoxboutique.com', + 'whitefoxboutique.com.au', + 'whitehouseblackmarket.com', + 'whitemountainpuzzles.com', + 'whitestuff.com', + 'whizlabs.com', + 'wholefoodsmarket.com', + 'wickedgoodcupcakes.com', + 'wickes.co.uk', + 'wig.com', + 'wildearth.com', + 'wildone.com', + 'wildzora.com', + 'wilko.com', + 'williams-sonoma.com', + 'willmaker.com', + 'wilson.com', + 'wilsonsleather.com', + 'winc.com', + 'windandweather.com', + 'windsorstore.com', + 'windycitynovelties.com', + 'wine.com', + 'winebasket.com', + 'wineinsiders.com', + 'wineofthemonthclub.com', + 'wingstop.com', + 'winkbeds.com', + 'wisdompanel.com', + 'wish.com', + 'witchery.com.au', + 'wittner.com.au', + 'wix.com', + 'wolfandbadger.com', + 'wolfermans.com', + 'wolverine.com', + 'womanizer.com', + 'womanwithin.com', + 'wonderbly.com', + 'wondershare.com', + 'wood-finishes-direct.com', + 'woodcraft.com', + 'woolovers.com', + 'woolworths.com.au', + 'woot.com', + 'worldmarket.com', + 'worldremit.com', + 'worldsoccershop.com', + 'worldwidegolfshops.com', + 'worldwidestereo.com', + 'worx.com', + 'wowcher.co.uk', + 'wrangler.com', + 'wuka.co.uk', + 'wyndham.com', + 'wyze.com', + 'xbox.com', + 'xcaret.com', + 'xero.com', + 'xeroshoes.com', + 'xfinity.com', + 'xfinitymobile.com', + 'xtool.com', + 'yamibuy.com', + 'yandy.com', + 'yankeecandle.co.uk', + 'yankeecandle.com', + 'yesglasses.com', + 'yesstyle.co.uk', + 'yesstyle.com', + 'yeti.com', + 'yoox.com', + 'youfoodz.com', + 'youngexplorers.com', + 'yourmechanic.com', + 'yoursclothing.co.uk', + 'yourzooki.com', + 'youthtothepeople.com', + 'ysl.com', + 'yslbeautyus.com', + 'yummie.com', + 'yumove.co.uk', + 'yvesrocher.ca', + 'yvesrocherusa.com', + 'zadig-et-voltaire.com', + 'zaful.com', + 'zagg.com', + 'zales.com', + 'zalesoutlet.com', + 'zamathome.com', + 'zappos.com', + 'zara.com', + 'zavvi.com', + 'zazzle.co.uk', + 'zazzle.com', + 'zeelool.com', + 'zenfolio.com', + 'zennioptical.com', + 'zerofoxtrot.com', + 'zgallerie.com', + 'zinus.com', + 'zipcar.co.uk', + 'zipcar.com', + 'ziphealth.co', + 'ziprecruiter.com', + 'zola.com', + 'zoom.us', + 'zooplus.co.uk', + 'zooplus.de', + 'zoro.com', + 'zulily.com', + 'zumba.com', + 'zwilling.com', +]); diff --git a/src/chrome/src/ui/recommended-actions.js b/src/chrome/src/ui/recommended-actions.js index baf3e518c..5530facd2 100644 --- a/src/chrome/src/ui/recommended-actions.js +++ b/src/chrome/src/ui/recommended-actions.js @@ -1,4 +1,5 @@ import { isDirectPublicMediaUrl } from '../agent/public-media-url.js'; +import { COUPON_MERCHANT_DOMAINS } from './coupon-domains.js'; import { t } from './i18n.js'; const SOCIAL_HOST_RE = /(^|\.)(instagram\.com|tiktok\.com|x\.com|twitter\.com|facebook\.com|fb\.com|threads\.net|youtube\.com|youtu\.be|reddit\.com|pinterest\.com|snapchat\.com)$/i; @@ -7,22 +8,6 @@ const MEETING_HOST_RE = /(^|\.)(zoom\.us|meet\.google\.com|teams\.microsoft\.com const DATING_HOST_RE = /(^|\.)(tinder\.com|bumble\.com|hinge\.co|okcupid\.com|match\.com|pof\.com|badoo\.com|happn\.com|coffeemeetsbagel\.com)$/i; const SHOPPING_HOST_RE = /(^|\.)(amazon\.[a-z.]+|ebay\.[a-z.]+|etsy\.com|walmart\.com|target\.com|bestbuy\.com|shopify\.com|aliexpress\.com|mercadolibre\.[a-z.]+|mercadolivre\.com\.br|hepsiburada\.com|trendyol\.com|n11\.com|shopee\.[a-z.]+|shopeekh\.com|lazada\.[a-z.]+)$/i; const PRODUCT_PATH_RE = /\/(dp|gp\/product|itm|p|product|products|prod|item|listing|ilan|urun)\b/i; -const COUPON_SHOPPING_DOMAINS = [ - 'amazon.com', 'amazon.ca', 'amazon.com.mx', 'amazon.com.br', 'amazon.co.uk', 'amazon.de', 'amazon.fr', - 'amazon.it', 'amazon.es', 'amazon.nl', 'amazon.pl', 'amazon.se', 'amazon.com.be', 'amazon.co.jp', - 'amazon.in', 'amazon.com.au', 'amazon.sg', 'amazon.ae', 'amazon.sa', 'amazon.com.tr', 'amazon.eg', - 'ebay.com', 'ebay.ca', 'ebay.co.uk', 'ebay.de', 'ebay.fr', 'ebay.it', 'ebay.es', 'ebay.com.au', - 'etsy.com', 'walmart.com', 'target.com', 'bestbuy.com', 'aliexpress.com', 'mercadolivre.com.br', - 'hepsiburada.com', 'trendyol.com', 'n11.com', 'shopeekh.com', - 'mercadolibre.com.ar', 'mercadolibre.com.mx', 'mercadolibre.com.co', 'mercadolibre.cl', - 'mercadolibre.com.pe', 'mercadolibre.com.uy', 'mercadolibre.com.ve', 'mercadolibre.com.ec', - 'mercadolibre.com.bo', 'mercadolibre.com.py', 'mercadolibre.com.do', 'mercadolibre.com.gt', - 'mercadolibre.com.hn', 'mercadolibre.com.ni', 'mercadolibre.com.pa', 'mercadolibre.com.sv', - 'mercadolibre.co.cr', - 'shopee.com', 'shopee.com.br', 'shopee.com.co', 'shopee.com.mx', 'shopee.cl', 'shopee.co.id', - 'shopee.com.my', 'shopee.com.ph', 'shopee.sg', 'shopee.co.th', 'shopee.vn', 'shopee.tw', - 'lazada.com', 'lazada.co.id', 'lazada.com.my', 'lazada.com.ph', 'lazada.sg', 'lazada.co.th', 'lazada.vn', -]; const COUPON_PRODUCT_PATH_RE = /\/(?:dp|gp\/product|itm|p|product|products|prod|item|listing|ilan|urun|ip|detail)(?:\/|$)/i; const COUPON_BESTBUY_PRODUCT_PATH_RE = /\/site\/[^/]+\/\d+\.p(?:\/|$)/i; const COUPON_CHECKOUT_PATH_RE = /\/(?:cart|basket|bag|checkout|checkouts|shopping-cart|shopping-bag|warenkorb|panier|carrito|carrinho|sacola|sepet|troli|keranjang|gio-hang|koszyk|korzina)(?:\/|$)/i; @@ -228,7 +213,12 @@ function hasCartOrPriceSignal(pageInfo = {}) { } function isKnownCouponShoppingHost(host = '') { - return COUPON_SHOPPING_DOMAINS.some((domain) => host === domain || host.endsWith(`.${domain}`)); + let candidate = host; + while (candidate.includes('.')) { + if (COUPON_MERCHANT_DOMAINS.has(candidate)) return true; + candidate = candidate.slice(candidate.indexOf('.') + 1); + } + return false; } function hasCouponFieldSignal(pageInfo = {}) { diff --git a/src/firefox/src/ui/coupon-domains.js b/src/firefox/src/ui/coupon-domains.js new file mode 100644 index 000000000..e2c016e16 --- /dev/null +++ b/src/firefox/src/ui/coupon-domains.js @@ -0,0 +1,3774 @@ +/** + * Generated by `npm run update:coupon-domains`; do not edit by hand. + * Source: https://couponfollow.com/site/browse/{0,a-z}/all + * Runtime updates are intentionally disabled: this reviewed snapshot ships with the extension. + */ +export const COUPON_MERCHANT_DOMAINS = new Set([ + '100percentpure.com', + '123-reg.co.uk', + '123inkcartridges.ca', + '123inkjets.com', + '177milkstreet.com', + '1800baskets.com', + '1800contacts.com', + '1800flowers.ca', + '1800flowers.com', + '1800gotjunk.com', + '1800gunsandammo.com', + '1800lighting.com', + '1800petmeds.com', + '1ink.com', + '1upnutrition.com', + '23andme.com', + '247blinds.co.uk', + '24hourfitness.com', + '24s.com', + '2modern.com', + '2ndswing.com', + '2xist.com', + '31philliplim.com', + '32degrees.com', + '360training.com', + '365games.co.uk', + '39dollarglasses.com', + '4inkjets.com', + '4wheelparts.com', + '511tactical.com', + '6pm.com', + '7forallmankind.com', + '99designs.com', + 'a1supplements.com', + 'aa.com', + 'aaa.com', + 'abbottlyon.com', + 'abcmouse.com', + 'abebooks.co.uk', + 'abebooks.com', + 'abercrombie.com', + 'abt.com', + 'academy.com', + 'accorhotels.com', + 'accuquilt.com', + 'acehardware.com', + 'acer.com', + 'acmemarkets.com', + 'acmetools.com', + 'acronis.com', + 'adagio.com', + 'adameve.com', + 'adanola.com', + 'addresshotels.com', + 'adenandanais.com', + 'adidas.ca', + 'adidas.co.uk', + 'adidas.com', + 'adidas.fr', + 'adobe.com', + 'adorama.com', + 'adorebeauty.com', + 'adorebeauty.com.au', + 'adoreme.com', + 'adrenaline.com', + 'adriannapapell.com', + 'adultshop.com.au', + 'advanceautoparts.com', + 'ae.com', + 'aerie.com', + 'aerlingus.com', + 'aerogarden.com', + 'aeromexico.com', + 'aeropostale.com', + 'aeroprecisionusa.com', + 'aerosoles.com', + 'aesop.com', + 'afew-store.com', + 'afloral.com', + 'agentprovocateur.com', + 'agoda.com', + 'ahava.com', + 'airalo.com', + 'airbnb.co.uk', + 'airbnb.com', + 'aircanada.com', + 'airfrance.com', + 'airindia.com', + 'airportparkingreservations.com', + 'airvapeusa.com', + 'ajmadison.com', + 'alamy.com', + 'alaskaair.com', + 'albeebaby.com', + 'albertsons.com', + 'aldi.co.uk', + 'aldoshoes.com', + 'alen.com', + 'alencorp.com', + 'alexandani.com', + 'alexisjae.com', + 'alibaba.com', + 'alibris.co.uk', + 'alibris.com', + 'alienware.com', + 'aliexpress.com', + 'all-clad.com', + 'allbeauty.com', + 'allbirds.com', + 'alldatadiy.com', + 'allegiantair.com', + 'allenedmonds.com', + 'allinonepaint.com', + 'allivet.com', + 'allmodern.com', + 'alloyapparel.com', + 'allposters.com', + 'allsaints.co.uk', + 'allsaints.com', + 'allsole.com', + 'allurebeautybox.com', + 'aloyoga.com', + 'alpinestars.com', + 'alpinetrek.co.uk', + 'als.com', + 'alteyaorganics.com', + 'altitude-sports.com', + 'altrarunning.com', + 'amazon.ae', + 'amazon.ca', + 'amazon.co.jp', + 'amazon.co.uk', + 'amazon.com', + 'amazon.com.au', + 'amazon.com.be', + 'amazon.com.br', + 'amazon.com.mx', + 'amazon.com.tr', + 'amazon.de', + 'amazon.eg', + 'amazon.es', + 'amazon.fr', + 'amazon.in', + 'amazon.it', + 'amazon.nl', + 'amazon.pl', + 'amazon.sa', + 'amazon.se', + 'amazon.sg', + 'ambientedirect.com', + 'amenclinics.com', + 'americanblinds.com', + 'americangirl.com', + 'americangolf.co.uk', + 'amiclubwear.com', + 'amirobeauty.com', + 'amtrak.com', + 'analuisa.com', + 'ancestry.co.uk', + 'ancestry.com', + 'andieswim.com', + 'angara.com', + 'animalpak.com', + 'animoto.com', + 'aninebing.com', + 'anker.com', + 'ankersolix.com', + 'annieselke.com', + 'annmariegianni.com', + 'annsummers.com', + 'anntaylor.com', + 'anolon.com', + 'anovaculinary.com', + 'anthropologie.com', + 'anthropologie.eu', + 'antonioli.eu', + 'anycubic.com', + 'anypromo.com', + 'ao.com', + 'aop.com', + 'aosom.co.uk', + 'apexhotels.co.uk', + 'apmex.com', + 'appaman.com', + 'apple.com', + 'applebees.com', + 'appleseeds.com', + 'applevacations.com', + 'appleyardflowers.com', + 'appliancesdirect.co.uk', + 'approvedfood.co.uk', + 'appsumo.com', + 'apricotonline.co.uk', + 'aquarterof.co.uk', + 'aquasana.com', + 'arcteryx.com', + 'ardene.com', + 'argento.com', + 'argos.co.uk', + 'arhaus.com', + 'ariat.com', + 'arlo.com', + 'armani.com', + 'armaniexchange.com', + 'aroma360.com', + 'art.com', + 'artdiscount.co.uk', + 'artifactuprising.com', + 'artistworks.com', + 'artoftea.com', + 'arttoframe.com', + 'asda.com', + 'ashford.com', + 'ashimaryhair.com', + 'ashleyfurniture.com', + 'ashleyhomestore.ca', + 'ashleystewart.com', + 'asics.com', + 'asos.com', + 'aspiga.com', + 'aspinaloflondon.com', + 'assouline.com', + 'astleyclarke.com', + 'astridandmiyu.com', + 'astrogaming.com', + 'asus.com', + 'ataglance.com', + 'athleta.com', + 'athleta.gapcanada.ca', + 'athome.com', + 'atlasformen.co.uk', + 'atncorp.com', + 'atomtickets.com', + 'att.com', + 'attitudeliving.com', + 'au.shein.com', + 'audible.ca', + 'audible.com', + 'audienhearing.com', + 'audiobooks.com', + 'auratenewyork.com', + 'austrian.com', + 'autodesk.co.uk', + 'autodesk.com', + 'autodoc.co.uk', + 'autozone.com', + 'avalonmagicplants.com', + 'avantitravelinsurance.co.uk', + 'avast.com', + 'aveda.com', + 'aveneusa.com', + 'aventon.com', + 'avenue.com', + 'avery.com', + 'avg.com', + 'avianca.com', + 'aviatornation.com', + 'avira.com', + 'avis.co.uk', + 'avis.com', + 'avocadogreenmattress.com', + 'avon.com', + 'awaytravel.com', + 'awd-it.co.uk', + 'aweinspired.com', + 'azazie.com', + 'azunafresh.com', + 'babbel.com', + 'babiators.com', + 'babyboofashion.com', + 'babyjogger.com', + 'babylist.com', + 'babyquip.com', + 'backinthesaddle.com', + 'backmarket.co.uk', + 'backmarket.com', + 'backstage.com', + 'baggu.com', + 'bakedbymelissa.com', + 'bakemeawish.com', + 'ballarddesigns.com', + 'bally.com', + 'baltini.com', + 'bambooclothing.co.uk', + 'bambulab.com', + 'bananarepublic.ca', + 'bananarepublic.com', + 'bananarepublicfactory.gapfactory.com', + 'banggood.com', + 'bannerbuzz.ca', + 'bannerbuzz.co.uk', + 'bannerbuzz.com', + 'bannerbuzz.com.au', + 'banter.com', + 'barcelo.com', + 'bareminerals.co.uk', + 'bareminerals.com', + 'barenecessities.com', + 'bargainmax.co.uk', + 'barkbox.com', + 'barkerandstonehouse.co.uk', + 'barkingheads.co.uk', + 'barnesandnoble.com', + 'bartesian.com', + 'baseballmonkey.com', + 'basepaws.com', + 'basspro.com', + 'bathandbodyworks.com', + 'batteriesplus.com', + 'battlbox.com', + 'battlehawkarmory.com', + 'baublebar.com', + 'bboutique.co', + 'bbqgalore.com', + 'bbqguys.com', + 'bcbg.com', + 'beachbody.com', + 'beachriot.com', + 'beallsflorida.com', + 'bearcreekarsenal.com', + 'beatbot.com', + 'beatsons.co.uk', + 'beautifiedyou.com', + 'beautybay.com', + 'beautybrands.com', + 'beautypie.com', + 'beautyplussalon.com', + 'beautyrest.com', + 'beaverbrooks.co.uk', + 'bebe.com', + 'becausemarket.com', + 'becker.com', + 'beckett.com', + 'bedbathandbeyond.ca', + 'bedbathandbeyond.com', + 'bedinabox.com', + 'beekman1802.com', + 'beerwulf.com', + 'beginningboutique.com', + 'beginningboutique.com.au', + 'beistravel.com', + 'belk.com', + 'belkin.com', + 'bellamihair.com', + 'belletire.com', + 'bellroy.com', + 'beltoutlet.com', + 'bensherman.com', + 'berettausa.com', + 'bergdorfgoodman.com', + 'bergfreunde.de', + 'berries.com', + 'bershka.com', + 'bespokepost.com', + 'bestbullysticks.com', + 'bestbuy.ca', + 'bestbuy.com', + 'bestcanvas.ca', + 'bestchoiceproducts.com', + 'bestcigarprices.com', + 'bestheating.com', + 'bestvetcare.com', + 'bestwestern.com', + 'betabrand.com', + 'betmgm.com', + 'betseyjohnson.com', + 'betterbathrooms.com', + 'betterworldbooks.com', + 'beverlyhillsmd.com', + 'beyondpolish.com', + 'beyondretro.com', + 'beyondyoga.com', + 'bhphotovideo.com', + 'biblio.com', + 'big5sportinggoods.com', + 'bigbathroomshop.co.uk', + 'bigbustours.com', + 'bigdug.co.uk', + 'biggerbooks.com', + 'biggreensmile.com', + 'biglots.com', + 'bigw.com.au', + 'bikeinn.com', + 'billabong.com', + 'billyreid.com', + 'biltmore.com', + 'biossance.com', + 'biotrust.com', + 'biovea.com', + 'birchbox.com', + 'birchlane.com', + 'birkenstock.com', + 'bissell.com', + 'bistromd.com', + 'bitdefender.com', + 'bizchair.com', + 'bjs.com', + 'bk.com', + 'bkstr.com', + 'blackcircles.com', + 'blackriflecoffee.com', + 'blacks.co.uk', + 'blackstoneproducts.com', + 'bladehq.com', + 'blair.com', + 'blenderseyewear.com', + 'blendtec.com', + 'blinds.com', + 'blindsexpress.com', + 'blindsgalore.com', + 'blinkist.com', + 'blnts.com', + 'blockchain-council.org', + 'bloomandwild.com', + 'bloomchic.com', + 'bloomingdales.com', + 'bloomsybox.com', + 'blue-tomato.com', + 'blueair.com', + 'blueapron.com', + 'bluebella.com', + 'bluebottlecoffee.com', + 'bluehost.com', + 'blueland.com', + 'bluemercury.com', + 'bluenile.com', + 'blueskyvitamin.com', + 'bluettipower.com', + 'blurb.com', + 'bobbibrowncosmetics.com', + 'boden.co.uk', + 'boden.com', + 'bodenusa.com', + 'bodum.com', + 'bodybuilding.com', + 'bodybuildingwarehouse.co.uk', + 'bodykind.com', + 'bogsfootwear.com', + 'bohme.com', + 'bokksu.com', + 'bollandbranch.com', + 'bolt.eu', + 'bombas.com', + 'bombshellsportswear.com', + 'bonanza.com', + 'bondara.co.uk', + 'bondiboost.com.au', + 'bondno9.com', + 'bonds.com.au', + 'bonmarche.co.uk', + 'bonobos.com', + 'boohoo.com', + 'boohoo.com.au', + 'boohooman.com', + 'booking.com', + 'bookoutlet.ca', + 'bookoutlet.com', + 'books2door.com', + 'booksamillion.com', + 'booktopia.com.au', + 'boostmobile.com', + 'bootbarn.com', + 'bornshoes.com', + 'boscovs.com', + 'bose.ca', + 'bose.co.uk', + 'bose.com', + 'bostonproper.com', + 'botanicchoice.com', + 'bouqs.com', + 'bouxavenue.com', + 'bowflex.com', + 'bowlero.com', + 'box.co.uk', + 'box.com', + 'boxlunch.com', + 'bradfordexchangechecks.com', + 'brainmd.com', + 'brandalley.co.uk', + 'brandsmartusa.com', + 'brastop.com', + 'braun.com', + 'bravenewlook.com', + 'brentwoodhome.com', + 'brewdog.com', + 'brickhousenutrition.com', + 'briggs-riley.com', + 'brightspeed.com', + 'briogeohair.com', + 'british-supplements.net', + 'britishairways.com', + 'britishnewspaperarchive.co.uk', + 'brixton.com', + 'brlsports.com', + 'brochuwalker.com', + 'bronsonvitamins.com', + 'brooklinen.com', + 'brooklynbedding.com', + 'brooksbrothers.com', + 'brooksrunning.com', + 'brookstone.com', + 'brooktaverner.co.uk', + 'brother.ca', + 'brownells.com', + 'brownsfashion.com', + 'brownsshoes.com', + 'brumate.com', + 'bruntworkwear.com', + 'brusselsairlines.com', + 'brylanehome.com', + 'bstn.com', + 'buckle.com', + 'budget.co.uk', + 'budget.com', + 'budgetpetcare.com', + 'budgettruck.com', + 'buffalojeans.com', + 'buffalowildwings.com', + 'buffy.co', + 'build.com', + 'buildabear.co.uk', + 'buildabear.com', + 'buildasign.com', + 'built.com', + 'builtbar.com', + 'bulbhead.com', + 'bulk.com', + 'bulkapothecary.com', + 'bulkofficesupply.com', + 'bulksupplements.com', + 'bulletproof.com', + 'bumbleandbumble.com', + 'bunches.co.uk', + 'burlingtoncoatfactory.com', + 'burpee.com', + 'burrow.com', + 'burstoralcare.com', + 'burton.co.uk', + 'burton.com', + 'burtsbees.com', + 'burtsbeesbaby.com', + 'buschgardens.com', + 'business.att.com', + 'business.landsend.com', + 'business.tiktok.com', + 'business.verizon.com', + 'butcherbox.com', + 'buyagift.co.uk', + 'buyautoparts.com', + 'buybestgear.com', + 'buycarparts.co.uk', + 'buydig.com', + 'byltbasics.com', + 'byrna.com', + 'ca.coachoutlet.com', + 'ca.fossil.com', + 'ca.hotels.com', + 'ca.motorola.com', + 'ca.shein.com', + 'cabelas.ca', + 'cabelas.com', + 'cables.com', + 'cadburygiftsdirect.co.uk', + 'caddislife.com', + 'cadenlane.com', + 'caesars.com', + 'cafebritt.com', + 'calendars.com', + 'callawayapparel.com', + 'callawaygolf.com', + 'callawaygolfpreowned.com', + 'calpaktravel.com', + 'calphalon.com', + 'calvinklein.com', + 'calvinklein.us', + 'camelbak.com', + 'cameo.com', + 'campchef.com', + 'camper.com', + 'campingworld.com', + 'campmor.com', + 'campsaver.com', + 'canada.michaels.com', + 'canadapetcare.com', + 'canadavetexpress.com', + 'canadiantire.ca', + 'canon.co.uk', + 'canva.com', + 'canvaschamp.com', + 'canvasdiscount.com', + 'canvasondemand.com', + 'canvasonsale.com', + 'canvaspeople.com', + 'canvaspop.com', + 'canvasprints.com', + 'carawayhome.com', + 'carbon38.com', + 'cardboardcutoutstandees.com', + 'cardcash.com', + 'care.com', + 'carhartt.com', + 'cariloha.com', + 'carlsgolfland.com', + 'carolina.com', + 'carolinashoe.com', + 'carolsdaughter.com', + 'carouselchecks.com', + 'carparts.com', + 'carparts4less.co.uk', + 'carphonewarehouse.com', + 'carsondellosa.com', + 'carters.com', + 'cartersoshkosh.ca', + 'cartridgepeople.com', + 'carvertical.com', + 'case-mate.com', + 'casetify.com', + 'caskers.com', + 'casper.com', + 'cassart.co.uk', + 'castinstyle.co.uk', + 'castlegatelights.co.uk', + 'castlery.com', + 'castlery.com.au', + 'castore.com', + 'catalogfavorites.com', + 'catbirdnyc.com', + 'catfootwear.com', + 'cathaypacific.com', + 'catherines.com', + 'catholiccompany.com', + 'caudabe.com', + 'caudalie.com', + 'cavenders.com', + 'cb2.com', + 'cbcrabcakes.com', + 'cbd.co', + 'cbdforlife.us', + 'cbdfx.com', + 'cbdmd.com', + 'ccleaner.com', + 'cdkeys.com', + 'cduniverse.com', + 'cellucor.com', + 'cengagebrain.com', + 'centralvapors.com', + 'centurymartialarts.com', + 'cettire.com', + 'chacos.com', + 'chadwicks.com', + 'champion.com', + 'champssports.com', + 'chanel.com', + 'chapters.indigo.ca', + 'charbroil.com', + 'charlesandcolvard.com', + 'charleskeith.com', + 'charlottesweb.com', + 'charlottetilbury.com', + 'charmingcharlie.com', + 'chatbooks.com', + 'chatters.ca', + 'cheapcaribbean.com', + 'cheapoair.ca', + 'cheapoair.com', + 'cheaptickets.com', + 'checkgallery.com', + 'checksinthemail.com', + 'checksunlimited.com', + 'cheesecake.com', + 'chefsplate.com', + 'chegg.com', + 'chemicalguys.com', + 'chemist-4-u.com', + 'chemistdirect.com.au', + 'cheryls.com', + 'chewy.ca', + 'chewy.com', + 'chicagocanvas.com', + 'chichiclothing.com', + 'chicme.com', + 'chicos.com', + 'childrensplace.com', + 'childsplayclothing.co.uk', + 'chilitechnology.com', + 'chineselaundry.com', + 'chipotle.com', + 'chitaliving.com', + 'choicehotels.com', + 'chomps.com', + 'christianbook.com', + 'christiesdirect.com', + 'christmaslightsetc.com', + 'chromeburner.com', + 'chromeindustries.com', + 'chubbiesshorts.com', + 'chums.co.uk', + 'cigarpage.com', + 'cigars.com', + 'cigarsinternational.com', + 'cinemark.com', + 'circle-fashion.com', + 'circulon.com', + 'citizenm.com', + 'citizenwatch.com', + 'citybeach.com.au', + 'citychiconline.com', + 'claires.co.uk', + 'claires.com', + 'clarins.co.uk', + 'clarinsusa.com', + 'clarks.co.uk', + 'clarksusa.com', + 'classicfootballshirts.co.uk', + 'clearchemist.co.uk', + 'clearly.ca', + 'clearly.com.au', + 'clearme.com', + 'clickandgrow.com', + 'clinique.co.uk', + 'clinique.com', + 'cliphair.co.uk', + 'cloudways.com', + 'clubmonaco.com', + 'coach.com', + 'coachoutlet.com', + 'coalatree.com', + 'coastfashion.com', + 'codecademy.com', + 'coffeebean.com', + 'coinbase.com', + 'cointracking.info', + 'coldwatercreek.com', + 'colehaan.com', + 'coleman.com', + 'colemanfurniture.com', + 'colettehayman.com.au', + 'colibrirealestate.com', + 'collectionsetc.com', + 'colorescience.com', + 'colorfulimages.com', + 'colourpop.com', + 'columbia.com', + 'columbiasportswear.ca', + 'comfrt.com', + 'compandsave.com', + 'compex.com', + 'completecareshop.co.uk', + 'compressionsale.com', + 'condor.com', + 'constantcontact.com', + 'consumercellular.com', + 'contactlensking.com', + 'contactsdirect.com', + 'containerstore.com', + 'contiki.com', + 'converse.com', + 'coofandy.com', + 'cookiesbydesign.com', + 'cookunity.com', + 'coopersofstortford.co.uk', + 'coophomegoods.com', + 'coppercowcoffee.com', + 'cora.life', + 'corel.com', + 'coreldraw.com', + 'corelle.com', + 'corkcicle.com', + 'cornbreadhemp.com', + 'corsair.com', + 'cos.com', + 'cosplayshopper.com', + 'costco.com', + 'costumes.com', + 'costway.com', + 'cotopaxi.com', + 'cotswoldco.com', + 'cottonon.com', + 'cottonon.com.au', + 'cottontraders.com', + 'countrydoor.com', + 'countrystorecatalog.com', + 'coursehero.com', + 'coursera.org', + 'coversandall.com', + 'cowshed.com', + 'coxandcox.co.uk', + 'cozyearth.com', + 'cozywinters.com', + 'cpap.com', + 'cpooutlets.com', + 'craftcompany.co.uk', + 'craftdlondon.com', + 'craftstash.co.uk', + 'crane.com', + 'crateandbarrel.com', + 'cratejoy.com', + 'crazy-factory.com', + 'crazysales.com.au', + 'crazyshirts.com', + 'creality.com', + 'creationwatches.com', + 'creativeirishgifts.com', + 'creativelive.com', + 'credobeauty.com', + 'cremedelamer.com', + 'crewclothing.co.uk', + 'cricketwireless.com', + 'cricut.com', + 'crocs.ca', + 'crocs.co.uk', + 'crocs.com', + 'crocs.eu', + 'crocus.co.uk', + 'crossbreedholsters.com', + 'crowdcow.com', + 'crutchfield.com', + 'crystalplus.com', + 'crystalski.co.uk', + 'csgo-skins.com', + 'ctshirts.com', + 'cubavera.com', + 'cubcadet.com', + 'cuddledown.com', + 'cuisinart.com', + 'cultbeauty.co.uk', + 'culturekings.com', + 'culturekings.com.au', + 'culturelle.com', + 'cupshe.com', + 'curology.com', + 'currentbody.com', + 'currentcatalog.com', + 'currys.co.uk', + 'curtarra.com', + 'curvissa.co.uk', + 'customink.com', + 'cutsclothing.com', + 'cuyana.com', + 'cvs.com', + 'cvsphoto.com', + 'cyberghostvpn.com', + 'cyberpowerpc.com', + 'cyclegear.com', + 'cyclestore.co.uk', + 'cyclingfrog.com', + 'daehair.com', + 'dagnedover.com', + 'dailysale.com', + 'damart.co.uk', + 'dameproducts.com', + 'dandb.com', + 'dangoproducts.com', + 'danielfootwear.com', + 'danielloboutique.it', + 'danielwellington.com', + 'dankstop.com', + 'dansko.com', + 'dapperstreet.co.uk', + 'dare2b.com', + 'darlingsofchelsea.co.uk', + 'darntough.com', + 'dartagnan.com', + 'dashingdiva.com', + 'davidsbridal.com', + 'davidscookies.com', + 'davidstea.com', + 'davincivaporizer.com', + 'davines.com', + 'dayspring.com', + 'daytimer.com', + 'dbrand.com', + 'dcshoes.com', + 'dearfoams.com', + 'debenhams.com', + 'decathlon.co.uk', + 'deepdiscount.com', + 'deliveroo.co.uk', + 'delivery.com', + 'dell.ca', + 'dell.co.uk', + 'dell.com', + 'dell.com.au', + 'dellrefurbished.com', + 'delonghi.com', + 'delta.com', + 'deltaextrax.com', + 'deluxe.com', + 'demarini.com', + 'dennys.com', + 'dentalplans.com', + 'denvermodern.com', + 'depositphotos.com', + 'derek-rose.com', + 'dermacaredirect.co.uk', + 'dermalogica.com', + 'dermstore.com', + 'designerchecks.com', + 'designeroptics.com', + 'designtoscano.com', + 'desigual.com', + 'dfds.com', + 'dfranklincreation.com', + 'dhgate.com', + 'diamondcbd.com', + 'dibruno.com', + 'dickblick.com', + 'dickies.com', + 'dickssportinggoods.com', + 'diecastmodelswholesale.com', + 'diesel.com', + 'dietdirect.com', + 'diffeyewear.com', + 'digitalocean.com', + 'dillards.com', + 'dinnerly.com', + 'dior.com', + 'diptyqueparis.com', + 'directv.com', + 'discount-supplements.co.uk', + 'discountcontacts.com', + 'discountfilters.com', + 'discountfilterstore.com', + 'discountgolfstore.co.uk', + 'discountmags.com', + 'discountmugs.com', + 'discountramps.com', + 'discountschoolsupply.com', + 'discounttire.com', + 'discoveryplus.com', + 'dish.com', + 'disneylandparis.com', + 'disneyplus.com', + 'disneystore.com', + 'displate.com', + 'displays2go.com', + 'dissh.com.au', + 'distacart.com', + 'diy.com', + 'diyanu.com', + 'dji.com', + 'dkny.com', + 'dndbeyond.com', + 'dockers.com', + 'doheny.com', + 'dolcevita.com', + 'dollar.com', + 'dollardays.com', + 'dollargeneral.com', + 'dollartree.com', + 'dollskill.com', + 'domain.com', + 'domestika.org', + 'dominos.ca', + 'dominos.co.uk', + 'dominos.com', + 'dominos.ie', + 'donaldrussell.com', + 'donnakaran.com', + 'dooney.com', + 'doordash.ca', + 'doordash.com', + 'dormify.com', + 'dorothyperkins.com', + 'dossier.co', + 'drberg.com', + 'drdabber.com', + 'dreamcloudsleep.com', + 'dreametech.com', + 'dreams.co.uk', + 'dreo.com', + 'dressbarn.com', + 'dresslily.com', + 'drfuhrman.com', + 'drhonow.com', + 'drinkag1.com', + 'drinkcirkul.com', + 'drinkhint.com', + 'drinktrade.com', + 'drmartens.com', + 'drop.com', + 'dropps.com', + 'drscholls.com', + 'drschollsshoes.com', + 'drsquatch.com', + 'drunkelephant.com', + 'dsw.ca', + 'dsw.com', + 'dtlr.com', + 'duluthtrading.com', + 'dunelm.com', + 'dungarees.com', + 'dunkindonuts.com', + 'durangoboots.com', + 'dusk.com', + 'dvf.com', + 'dwr.com', + 'dxl.com', + 'dylanscandybar.com', + 'dynadot.com', + 'dynamiteclothing.com', + 'dyson.co.uk', + 'dyson.com', + 'e-file.com', + 'ea.com', + 'eaglecreek.com', + 'earthbreeze.com', + 'easeus.com', + 'easton.com', + 'eastwood.com', + 'easycanvasprints.com', + 'easyclosets.com', + 'easyjet.com', + 'easyspirit.com', + 'eatwith.com', + 'eaze.com', + 'ebags.com', + 'ebay.ca', + 'ebay.co.uk', + 'ebay.com', + 'ebay.com.au', + 'ebay.de', + 'ebay.es', + 'ebay.fr', + 'ebay.it', + 'eberjey.com', + 'ebuyer.com', + 'ecampus.com', + 'ecco.com', + 'echt.com.au', + 'ecoflow.com', + 'ecovacs.com', + 'ecreamery.com', + 'eddiebauer.com', + 'eden.co.uk', + 'edenfantasys.com', + 'ediblearrangements.ca', + 'ediblearrangements.com', + 'edreams.net', + 'edx.org', + 'ee.co.uk', + 'eflorist.co.uk', + 'ego.co.uk', + 'egohome.com', + 'egoshoes.com', + 'eharmony.com', + 'ehplabs.com', + 'eightsleep.com', + 'eightvape.com', + 'eileenfisher.com', + 'ejuiceconnect.com', + 'ekster.com', + 'elc.co.uk', + 'electronicexpress.com', + 'elegoo.com', + 'elementor.com', + 'elemis.com', + 'elfcosmetics.com', + 'elietahari.com', + 'elitecme.com', + 'elitelearning.com', + 'elixinol.com', + 'elizabetharden.com', + 'ellamila.com', + 'ellis-brigham.com', + 'ellos.us', + 'eloquii.com', + 'elvie.com', + 'embarkvet.com', + 'emcosmetics.com', + 'emirates.com', + 'emma-sleep.ca', + 'emmabridgewater.co.uk', + 'emp.co.uk', + 'ems.com', + 'enasco.com', + 'endclothing.co.uk', + 'endclothing.com', + 'endoca.com', + 'endy.com', + 'eneba.com', + 'enfamil.com', + 'enginediy.com', + 'english-heritage.org.uk', + 'ensorings.com', + 'enterprise.co.uk', + 'enterprise.com', + 'entertainmentearth.com', + 'entirelypets.com', + 'envato.com', + 'envirofone.com', + 'epson.com', + 'equestriancollections.com', + 'eqvvs.co.uk', + 'ericjavits.com', + 'erincondren.com', + 'ernestjones.co.uk', + 'escentual.com', + 'escortradar.com', + 'eset.com', + 'esteelauder.co.uk', + 'esteelauder.com', + 'esther.com.au', + 'ethelm.com', + 'etihad.com', + 'etnies.com', + 'etoro.com', + 'etrailer.com', + 'etsy.com', + 'ettitude.com', + 'eufy.com', + 'eufylife.com', + 'eukhost.com', + 'eurocarparts.com', + 'euroffice.co.uk', + 'eurooptic.com', + 'europcar.co.uk', + 'europcar.com', + 'europcar.com.au', + 'eurostar.com', + 'evanscycles.com', + 'evenflo.com', + 'eventbrite.com', + 'eventticketscenter.com', + 'ever-pretty.com', + 'evereve.com', + 'everlane.com', + 'everlast.com', + 'everlywell.com', + 'everyplate.com', + 'everythingbutwater.com', + 'evite.com', + 'evo.com', + 'evoshield.com', + 'evryjewels.com', + 'ewinracing.com', + 'exofficio.com', + 'expedia.ca', + 'expedia.co.uk', + 'expedia.com', + 'expedia.com.au', + 'express.com', + 'expressvpn.com', + 'extendedstayamerica.com', + 'extractlabs.com', + 'exuviance.com', + 'eyebuydirect.com', + 'eyeconic.com', + 'eyeglasses.com', + 'eyeslipsface.co.uk', + 'ezcater.com', + 'ezcontacts.com', + 'ezcosplay.com', + 'eztaxreturn.com', + 'ezup.com', + 'f-secure.com', + 'f1autocentres.co.uk', + 'fabfitfun.com', + 'fabkids.com', + 'fabletics.com', + 'fabulacoffee.com', + 'facethefuture.co.uk', + 'facetheory.com', + 'facetory.com', + 'factor75.com', + 'factormeals.ca', + 'factory.jcrew.com', + 'fahertybrand.com', + 'fairmont.com', + 'familydollar.com', + 'familytreedna.com', + 'famous-smoke.com', + 'famousfootwear.ca', + 'famousfootwear.com', + 'fanatical.com', + 'fanatics.com', + 'fandango.com', + 'fanduel.com', + 'fanka.com', + 'fansedge.com', + 'farah.co.uk', + 'farfetch.com', + 'farmandfleet.com', + 'farmrio.com', + 'fashioneyewear.co.uk', + 'fashionfabricsclub.com', + 'fashionnova.com', + 'fast-growing-trees.com', + 'fastbar.com', + 'fastestvpn.com', + 'fatbraintoys.com', + 'fatface.com', + 'fathead.com', + 'favorites.com', + 'fc-moto.de', + 'feature.com', + 'fedex.com', + 'feelgoodcontacts.com', + 'fender.com', + 'fenix-store.com', + 'fentybeauty.com', + 'fenwick.co.uk', + 'fergusonhome.com', + 'ffx.co.uk', + 'fila.co.uk', + 'filson.com', + 'findmeagift.co.uk', + 'findmypast.co.uk', + 'findmypast.com', + 'fineartamerica.com', + 'finishline.com', + 'firebox.com', + 'firestartoys.com', + 'firmoo.com', + 'firstaidbeauty.com', + 'firstchoice.co.uk', + 'firstclasswatches.co.uk', + 'fishusa.com', + 'fitbit.com', + 'fitflop.com', + 'fivecbd.com', + 'fiverr.com', + 'flamingoland.co.uk', + 'flannels.com', + 'flaviar.com', + 'flawlessvapeshop.com', + 'fleetfeet.com', + 'fleshlight.com', + 'flexispot.co.uk', + 'flexispot.com', + 'flipkart.com', + 'flixbus.com', + 'floom.com', + 'florists.com', + 'florsheim.com', + 'flowerstation.co.uk', + 'flowwall.com', + 'flyfrontier.com', + 'flytap.com', + 'fnp.com', + 'focl.com', + 'foco.com', + 'focuscamera.com', + 'foodlion.com', + 'foodsaver.com', + 'fool.com', + 'footasylum.com', + 'footjoy.com', + 'footlocker.ca', + 'footlocker.co.uk', + 'footlocker.com', + 'forcast.com.au', + 'foreo.com', + 'forever21.com', + 'forhers.com', + 'forhims.com', + 'forme.science', + 'forthglade.com', + 'foryourparty.com', + 'fossil.co.uk', + 'fossil.com', + 'fostergrant.com', + 'foxrentacar.com', + 'foxylocks.com', + 'fractureme.com', + 'fragrancedirect.co.uk', + 'fragrancenet.com', + 'fragrancex.com', + 'frame-store.com', + 'framebridge.com', + 'framesdirect.com', + 'francescas.com', + 'francosarto.com', + 'frankandeileen.com', + 'frankandoak.com', + 'frankdarling.com', + 'fraserhart.co.uk', + 'fredericks.com', + 'freedom.to', + 'freeflyapparel.com', + 'freepeople.com', + 'freeprintsapp.com', + 'freeshipping.com', + 'freetaxusa.com', + 'frenchtoast.com', + 'fresh.com', + 'freshdirect.com', + 'frette.com', + 'frigidaire.com', + 'fromourplace.com', + 'fromyouflowers.com', + 'frontgate.com', + 'frontier.com', + 'frostbuddy.com', + 'frostnyc.com', + 'fruit.com', + 'fruitbouquets.com', + 'fsastore.com', + 'ftd.com', + 'fun.com', + 'functionofbeauty.com', + 'funko.com', + 'funkypigeon.com', + 'funnyfuzzy.com', + 'furla.com', + 'furniture123.co.uk', + 'furnitureinfashion.net', + 'furniturevillage.co.uk', + 'fye.com', + 'g-star.com', + 'g2a.com', + 'gaia.com', + 'gallerycollection.com', + 'galls.com', + 'game.co.uk', + 'gamefly.com', + 'gamepass.nfl.com', + 'gamersgate.com', + 'gamestop.com', + 'gametime.co', + 'gamivo.com', + 'gant.co.uk', + 'gap.co.uk', + 'gap.com', + 'gapcanada.ca', + 'gapfactory.com', + 'garageclothing.com', + 'gardenbuildingsdirect.co.uk', + 'gardeners.com', + 'gardenfurniturecentre.co.uk', + 'gardeningexpress.co.uk', + 'gardentrading.co.uk', + 'garmin.com', + 'garnethill.com', + 'garrettwade.com', + 'gate1travel.com', + 'gatorade.com', + 'gatwickairport.com', + 'gazelle.com', + 'gdfstudio.com', + 'geappliances.com', + 'gearx.com', + 'geekbuying.com', + 'gemini.com', + 'george.com', + 'geox.com', + 'gerberchildrenswear.com', + 'getcasely.com', + 'getfussy.com', + 'getnamenecklace.com', + 'getolympus.com', + 'getquip.com', + 'getsmarter.com', + 'getthelabel.com', + 'getyourguide.com', + 'gfore.com', + 'gfuel.com', + 'ghbass.com', + 'ghdhair.com', + 'ghirardelli.com', + 'ghost.co.uk', + 'ghostbed.com', + 'ghostlifestyle.com', + 'giantfood.com', + 'giantfoodstores.com', + 'giftcards.com', + 'giftexpress.com', + 'giftsforyounow.com', + 'gifttree.com', + 'giglio.com', + 'gillette.co.uk', + 'gilt.com', + 'giltcity.com', + 'giorgioarmanibeauty-usa.com', + 'giraffetools.com', + 'girlfriend.com', + 'giuseppezanotti.com', + 'glamnetic.com', + 'glamorise.com', + 'glasses.com', + 'glassesdirect.co.uk', + 'glassesshop.com', + 'glassesusa.com', + 'glassons.com', + 'gldn.com', + 'global.urbanrevivo.com', + 'globalgolf.com', + 'globalindustrial.com', + 'glossier.com', + 'glossybox.co.uk', + 'glow.co.uk', + 'glowrecipe.com', + 'gltc.co.uk', + 'gnc.com', + 'gnoce.com', + 'goaliemonkey.com', + 'goalzero.com', + 'goat.com', + 'gobble.com', + 'gochirp.com', + 'gocity.com', + 'goclove.com', + 'godaddy.com', + 'goddiva.co.uk', + 'godiva.com', + 'goelia1995.com', + 'gog.com', + 'goggles4u.com', + 'goinggoinggone.com', + 'goldbelly.com', + 'goldenmine.com', + 'goldsmiths.co.uk', + 'golfballs.com', + 'golfgalaxy.com', + 'golfgeardirect.co.uk', + 'golfnow.com', + 'golfonline.co.uk', + 'golftown.com', + 'goli.com', + 'goodamerican.com', + 'goodr.com', + 'goodyear.com', + 'goop.com', + 'gooseberryintimates.com', + 'gooutdoors.co.uk', + 'gopro.com', + 'gopuff.com', + 'gorjana.com', + 'gormanshop.com.au', + 'gossby.com', + 'gothamcigars.com', + 'gotprint.com', + 'gourmetgiftbaskets.com', + 'gousto.co.uk', + 'govee.com', + 'gpen.com', + 'grabagun.com', + 'gracobaby.com', + 'grahamandgreen.co.uk', + 'grammarly.com', + 'grandecosmetics.com', + 'grandinroad.com', + 'grapetree.co.uk', + 'gravityforms.com', + 'greatbigcanvas.com', + 'greatcall.com', + 'greatclubs.com', + 'greatergood.com', + 'greatmagazines.co.uk', + 'greatwolf.com', + 'greenchef.com', + 'greenlight.com', + 'greenmangaming.com', + 'greenpan.us', + 'greenpeople.co.uk', + 'greetingcarduniverse.com', + 'grenade.com', + 'greyhound.com', + 'groomers-online.com', + 'groupon.ca', + 'groupon.co.uk', + 'groupon.com', + 'groupon.com.au', + 'grubhub.com', + 'grunt.com', + 'gruntstyle.com', + 'gruum.com', + 'gruv.com', + 'gtech.co.uk', + 'gtracing.com', + 'guess.ca', + 'guess.com', + 'guess.eu', + 'guessfactory.com', + 'guitarcenter.com', + 'gundrymd.com', + 'gunmagwarehouse.com', + 'guns.com', + 'gusto.com', + 'gymboree.com', + 'gymshark.co.uk', + 'gymshark.com', + 'h10hotels.com', + 'habitat.co.uk', + 'haggar.com', + 'hairburst.com', + 'hairmax.com', + 'hairstory.com', + 'halegroves.com', + 'halfords.com', + 'halfpricedrapes.com', + 'hallmark.com', + 'halloweencostumes.com', + 'halloweenexpress.com', + 'halocollar.com', + 'hamiltonbeach.com', + 'hammacher.com', + 'handy.com', + 'hanes.com', + 'hannaandersson.com', + 'happymammoth.com', + 'happypuzzle.co.uk', + 'happysocks.com', + 'harborfreight.com', + 'harley-davidson.com', + 'harmankardon.com', + 'harmonystore.co.uk', + 'harney.com', + 'harperwilde.com', + 'harrods.com', + 'harryanddavid.com', + 'harryrosen.com', + 'harrys.com', + 'harveynichols.com', + 'hatch.co', + 'hatclub.com', + 'hatley.com', + 'hats.com', + 'hauslabs.com', + 'havaianas.com', + 'havenly.com', + 'hawaiianairlines.com', + 'hawesandcurtis.com', + 'haynes.com', + 'hbomax.com', + 'hbx.com', + 'hdis.com', + 'headspace.com', + 'healthexpress.co.uk', + 'healthspan.co.uk', + 'heartlandvetsupply.com', + 'helixsleep.com', + 'hellobello.com', + 'hellofresh.ca', + 'hellofresh.co.uk', + 'hellofresh.com', + 'hellofresh.com.au', + 'hellomolly.com', + 'hellonomad.com', + 'helloseen.com', + 'hellotushy.com', + 'hellowisp.com', + 'hellyhansen.com', + 'helmutlang.com', + 'helzberg.com', + 'hempbombs.com', + 'henrys.com', + 'hepsiburada.com', + 'herbdoc.com', + 'herbspro.com', + 'hermanmiller.com', + 'herroom.com', + 'herschel.com', + 'hertz.co.uk', + 'hertz.com', + 'hexclad.com', + 'heyabby.com', + 'heydudeshoesusa.com', + 'hibbett.com', + 'hibobbie.com', + 'hiboy.com', + 'hickoryfarms.com', + 'higherdose.com', + 'highlights.com', + 'hike-footwear.com', + 'hilton.com', + 'hinomi.co', + 'hinterlandoutfitters.com', + 'hiphopbling.com', + 'hismileteeth.com', + 'hive.co.uk', + 'hiyahealth.com', + 'hm.com', + 'hobbs.com', + 'hobbylobby.com', + 'hobbytron.com', + 'hobobags.com', + 'hockeymonkey.com', + 'hockeyworld.com', + 'hoka.com', + 'holabirdsports.com', + 'holidayextras.co.uk', + 'holidayinn.com', + 'hollandandbarrett.com', + 'hollisterco.com', + 'homage.com', + 'homary.com', + 'homeandcooksales.com', + 'homebase.co.uk', + 'homechef.com', + 'homedepot.com', + 'homegoods.com', + 'hometitlelock.com', + 'honest.com', + 'honeylove.com', + 'hooverdirect.co.uk', + 'hoppa.com', + 'horizonfitness.com', + 'horizonhobby.com', + 'horse.com', + 'horseloverz.com', + 'hostelworld.com', + 'hostgator.com', + 'hostinger.com', + 'hotdiamonds.co.uk', + 'hotel-bb.com', + 'hotelchocolat.co.uk', + 'hotelcollection.com', + 'hotels.com', + 'hoteltonight.com', + 'hothair.co.uk', + 'hotter.com', + 'hottopic.com', + 'hotwire.com', + 'hourglasscosmetics.com', + 'house.com.au', + 'houseofbruar.com', + 'houseoffraser.co.uk', + 'houzz.com', + 'hp.com', + 'hrblock.com', + 'hsamuel.co.uk', + 'hsastore.com', + 'hsn.com', + 'htvront.com', + 'huckberry.com', + 'hudabeauty.com', + 'hudsonjeans.com', + 'huel.com', + 'huffybikes.com', + 'hugoboss.com', + 'hukgear.com', + 'hulalahome.com', + 'hulu.com', + 'humann.com', + 'humblebundle.com', + 'humehealth.com', + 'hungryroot.com', + 'hunterboots.com', + 'huntsmart.com', + 'hurley.com', + 'hurom.com', + 'hush-uk.com', + 'huskyliners.com', + 'hyatt.com', + 'hydroflask.com', + 'hydropeptide.com', + 'hydrow.com', + 'hyperwear.com', + 'iberia.com', + 'iberostar.com', + 'ibuypower.com', + 'iceland.co.uk', + 'ifixit.com', + 'iflyworld.com', + 'igloocoolers.com', + 'iherb.com', + 'ihg.com', + 'ihop.com', + 'ikea.com', + 'ikmultimedia.com', + 'ikrush.com', + 'illy.com', + 'ilovedooney.com', + 'ilovewallpaper.co.uk', + 'imageskincare.com', + 'imemories.com', + 'incase.com', + 'incogni.com', + 'indochino.com', + 'inez.com', + 'informit.com', + 'inkbox.com', + 'inkcartridges.com', + 'innovations.com.au', + 'innovetpet.com', + 'instacart.ca', + 'instacart.com', + 'instantprint.co.uk', + 'insureandgo.com', + 'interiordefine.com', + 'internetandtv.att.com', + 'interserver.net', + 'inthestyle.com', + 'intheswim.com', + 'intimissimi.com', + 'intuit.com', + 'invictastores.com', + 'invideo.io', + 'invoicesimple.com', + 'iolo.com', + 'ipsy.com', + 'ipvanish.com', + 'irobot.com', + 'isdin.com', + 'issaonline.com', + 'istockphoto.com', + 'ita-airways.com', + 'italist.com', + 'italki.com', + 'itcosmetics.com', + 'itead.cc', + 'itluggage.com', + 'ivacy.com', + 'iwantproof.com', + 'izabel.com', + 'jaanuu.com', + 'jabra.com', + 'jacamo.co.uk', + 'jackery.com', + 'jackrogersusa.com', + 'jacksonhewitt.com', + 'jackwills.com', + 'jadedldn.com', + 'jamesallen.com', + 'jamesperse.com', + 'jamplay.com', + 'janieandjack.com', + 'jansport.com', + 'jared.com', + 'jbl.com', + 'jcpenney.com', + 'jcrew.com', + 'jdsports.co.uk', + 'jdsports.com', + 'jdsports.ie', + 'jdwilliams.co.uk', + 'jednorth.com', + 'jegs.com', + 'jensonusa.com', + 'jerrysartarama.com', + 'jerseymikes.com', + 'jessicalondon.com', + 'jet2.com', + 'jet2holidays.com', + 'jetblue.com', + 'jetbluevacations.com', + 'jeulia.com', + 'jewlr.com', + 'jibjab.com', + 'jildorshoes.com', + 'jimmyjohns.com', + 'jjill.com', + 'jjmalibu.com', + 'jjshouse.com', + 'jmclaughlin.com', + 'joanieclothing.com', + 'joann.com', + 'jockey.com', + 'joebrowns.co.uk', + 'joefresh.com', + 'joesnewbalanceoutlet.com', + 'johngreed.com', + 'johnlewis.com', + 'johnnie-o.com', + 'johnnywas.com', + 'johnstonmurphy.com', + 'johnvarvatos.com', + 'jojomamanbebe.co.uk', + 'jolyn.com', + 'jomalone.com', + 'jomashop.com', + 'jonathanadler.com', + 'jonesbootmaker.com', + 'joom.com', + 'josbank.com', + 'jossandmain.com', + 'joules.com', + 'journeys.ca', + 'journeys.com', + 'joylux.com', + 'joyorganics.com', + 'jpcycles.com', + 'jrcigars.com', + 'jtv.com', + 'judaicawebstore.com', + 'juicebeauty.com', + 'julesb.co.uk', + 'julievos.com', + 'jurawatches.co.uk', + 'just-eat.co.uk', + 'justblinds.com', + 'justcbdstore.com', + 'justfab.com', + 'justfly.com', + 'justhype.co.uk', + 'justvitamins.co.uk', + 'juviasplace.com', + 'k18hair.com', + 'kachava.com', + 'kaptest.com', + 'karenkane.com', + 'karenmillen.com', + 'karmaloop.com', + 'kaspersky.ca', + 'kaspersky.co.uk', + 'kaspersky.com', + 'katebackdrop.com', + 'katesomerville.com', + 'katespade.co.uk', + 'katespade.com', + 'katespadeoutlet.com', + 'katom.com', + 'kay.com', + 'keds.com', + 'keenfootwear.com', + 'keepersecurity.com', + 'keeps.com', + 'keetsa.com', + 'keh.com', + 'kelbyone.com', + 'kendrascott.com', + 'kennethcole.com', + 'kerastase-usa.com', + 'kerastase.ca', + 'keurig.ca', + 'keurig.com', + 'kevinmurphy.com.au', + 'kickscrew.com', + 'kiddies-kingdom.com', + 'kidrobot.com', + 'kidsfootlocker.com', + 'kiehls.ca', + 'kiehls.com', + 'kiiroo.com', + 'kikocosmetics.com', + 'killstar.com', + 'kindle.com', + 'kindredbravely.com', + 'kingsize.com', + 'kinguin.net', + 'kipling-usa.com', + 'kipling.com', + 'kirklands.com', + 'kitchenaid.com', + 'kiwico.com', + 'kizik.com', + 'klook.com', + 'kmart.com', + 'knetbooks.com', + 'knix.com', + 'knixwear.com', + 'knockaround.com', + 'kobo.com', + 'kobobooks.com', + 'kogan.com', + 'kohler.com', + 'kohls.com', + 'koicbd.com', + 'koifootwear.com', + 'koleimports.com', + 'kooding.com', + 'koraorganics.com', + 'krispykreme.com', + 'kroger.com', + 'kswiss.com', + 'kuhl.com', + 'kuiu.com', + 'kurtgeiger.com', + 'kurufootwear.com', + 'kutfromthekloth.com', + 'kwik-fit.com', + 'kyliecosmetics.com', + 'la-z-boy.com', + 'lacolombe.com', + 'lacoste.ca', + 'lacoste.com', + 'lafitness.com', + 'laithwaites.co.uk', + 'lakeland.co.uk', + 'lakepajamas.com', + 'lakeshorelearning.com', + 'lampsplus.com', + 'lancome-usa.com', + 'lancome.ca', + 'landsend.co.uk', + 'landsend.com', + 'lanebryant.com', + 'lapolicegear.com', + 'laptopbatteryexpress.com', + 'laredoute.co.uk', + 'laroche-posay.us', + 'lascana.com', + 'lasenza.com', + 'lastminute.com', + 'latestinbeauty.com', + 'laura.ca', + 'laurageller.com', + 'lauramercier.com', + 'laurenmoshi.com', + 'lavieenrose.com', + 'lavishalice.com', + 'laylasleep.com', + 'lazada.co.id', + 'lazada.co.th', + 'lazada.com', + 'lazada.com.my', + 'lazada.com.ph', + 'lazada.sg', + 'lazada.vn', + 'lazarusnaturals.com', + 'lazyone.com', + 'leaderdoors.co.uk', + 'leaffilter.com', + 'learnworlds.com', + 'leatherman.com', + 'lecreuset.com', + 'lectricebikes.com', + 'ledbulbs.co.uk', + 'ledger.com', + 'lee.com', + 'leekes.co.uk', + 'leesa.com', + 'lef.org', + 'legalzoom.com', + 'lego.com', + 'legoland.com', + 'lehmans.com', + 'lelo.com', + 'lenovo.co.uk', + 'lenovo.com', + 'lenox.com', + 'lensabl.com', + 'lenscrafters.com', + 'lenskart.com', + 'lenskart.us', + 'lenstore.co.uk', + 'leonisa.com', + 'lequipeur.com', + 'lesliespool.com', + 'lesmills.com', + 'levenger.com', + 'levi.com', + 'levoit.com', + 'lg.com', + 'lg.uk', + 'liberty.co.uk', + 'libertytax.com', + 'lids.ca', + 'lids.com', + 'lifeboostcoffee.com', + 'lifeextension.com', + 'lifeisgood.com', + 'lifeprofitness.com', + 'lightboxjewelry.com', + 'lightingnewyork.com', + 'lightinthebox.com', + 'lights.co.uk', + 'lights4fun.co.uk', + 'lightsonline.com', + 'lilash.com', + 'lillianvernon.com', + 'lillylashes.com', + 'lillypulitzer.com', + 'lilysilk.com', + 'lilyskitchen.co.uk', + 'lindt.co.uk', + 'lindtusa.com', + 'linenchest.com', + 'linensandhutch.com', + 'lingoda.com', + 'linkedin.com', + 'liquid-iv.com', + 'liquidweb.com', + 'lisaangel.co.uk', + 'litime.com', + 'littleburgundyshoes.com', + 'littlecaesars.com', + 'littlepassports.com', + 'littlesleepies.com', + 'littlespoon.com', + 'littletikes.com', + 'livemomentous.com', + 'livenation.com', + 'livingproof.com', + 'livingsocial.com', + 'lkbennett.com', + 'llbean.ca', + 'llbean.com', + 'loaded.com', + 'localflavor.com', + 'loccitane.com', + 'loefflerrandall.com', + 'loft.com', + 'logitech.com', + 'logitechg.com', + 'logos.com', + 'longhornsteakhouse.com', + 'longtallsally.com', + 'lookfantastic.com', + 'loopearplugs.com', + 'lopesan.com', + 'lorextechnology.com', + 'lorman.com', + 'lornajane.com', + 'lot.com', + 'loungefly.com', + 'loungeunderwear.com', + 'lovable.dev', + 'loveholidays.com', + 'lovehoney.ca', + 'lovehoney.co.uk', + 'lovehoney.com', + 'lovehoney.com.au', + 'lovellsoccer.co.uk', + 'lovelyskin.com', + 'lovepopcards.com', + 'lovesac.com', + 'lovevery.com', + 'lowes.com', + 'luckybrand.com', + 'lufthansa.com', + 'lugless.com', + 'lugz.com', + 'luisaviaroma.com', + 'lullabellz.com', + 'lulu.com', + 'luluandgeorgia.com', + 'lululemon.co.uk', + 'lululemon.com', + 'lulus.com', + 'lumberliquidators.com', + 'lumedeodorant.com', + 'lumens.com', + 'luminskin.com', + 'lunya.co', + 'lush.com', + 'luvmehair.com', + 'luxyhair.com', + 'lvly.com.au', + 'lww.com', + 'lyft.com', + 'lyleandscott.com', + 'lysse.com', + 'maccosmetics.com', + 'macdonaldhotels.co.uk', + 'macduggal.com', + 'machinemart.co.uk', + 'mackeeper.com', + 'mackenzieltd.com', + 'mackweldon.com', + 'macofalltrades.com', + 'macorner.co', + 'macpaw.com', + 'macys.com', + 'madebymary.com', + 'madewell.com', + 'madison-reed.com', + 'magazine.co.uk', + 'magazines.com', + 'magicspoon.com', + 'magix.com', + 'magoosh.com', + 'maidenform.com', + 'mailchimp.com', + 'mainlinemenswear.co.uk', + 'maisonette.com', + 'maisonmargiela.com', + 'majestic.co.uk', + 'major-lutie.com', + 'makeuperaser.com', + 'malwarebytes.com', + 'mamasandpapas.com', + 'mammamiacovers.com', + 'mammotion.com', + 'mancrates.com', + 'mango.com', + 'mangooutlet.com', + 'manomano.co.uk', + 'manscaped.com', + 'mansurgavriel.com', + 'marcjacobs.com', + 'mardel.com', + 'marika.com', + 'marimekko.com', + 'marinelayer.com', + 'markandgraham.com', + 'marks.com', + 'marksandspencer.com', + 'markselectrical.co.uk', + 'marleylilly.com', + 'marmot.com', + 'marriott.com', + 'marshallheadphones.com', + 'marshalls.com', + 'marymaxim.com', + 'massimodutti.com', + 'mastershoe.co.uk', + 'matalan.co.uk', + 'match.com', + 'mattandnat.com', + 'mattecollection.com', + 'mattressfirm.com', + 'mauijim.com', + 'maurices.com', + 'mavi.com', + 'maxandlily.com', + 'maxaroma.com', + 'maximuscle.com', + 'maxwarehouse.com', + 'maytag.com', + 'mayvenn.com', + 'mcafee.com', + 'mcdonalds.com', + 'mcgeeandco.com', + 'mcmworldwide.com', + 'meandem.com', + 'mec.ca', + 'medexpress.co.uk', + 'medexsupply.com', + 'medievaltimes.com', + 'medterracbd.com', + 'megabus.com', + 'megaseats.com', + 'meijer.com', + 'mejuri.com', + 'melissaanddoug.com', + 'menkind.co.uk', + 'menswearhouse.com', + 'mercadolibre.cl', + 'mercadolibre.co.cr', + 'mercadolibre.com.ar', + 'mercadolibre.com.bo', + 'mercadolibre.com.co', + 'mercadolibre.com.do', + 'mercadolibre.com.ec', + 'mercadolibre.com.gt', + 'mercadolibre.com.hn', + 'mercadolibre.com.mx', + 'mercadolibre.com.ni', + 'mercadolibre.com.pa', + 'mercadolibre.com.pe', + 'mercadolibre.com.py', + 'mercadolibre.com.sv', + 'mercadolibre.com.uy', + 'mercadolibre.com.ve', + 'mercadolivre.com.br', + 'meritbeauty.com', + 'merlincycles.com', + 'merrell.com', + 'meshki.us', + 'metrobyt-mobile.com', + 'meundies.com', + 'miabellebaby.com', + 'miansai.com', + 'michaelkors.ca', + 'michaelkors.co.uk', + 'michaelkors.com', + 'michaels.com', + 'michaelstars.com', + 'michele.com', + 'microsoft.com', + 'midinmod.com', + 'midlandusa.com', + 'midwayusa.com', + 'mielleorganics.com', + 'mikasa.com', + 'milanoo.com', + 'mileskimball.com', + 'milkmakeup.com', + 'millenniumhotels.com', + 'millets.co.uk', + 'minervacrafts.com', + 'ministryofsupply.com', + 'mintandlily.com', + 'minted.com', + 'mintmobile.com', + 'mintvelvet.co.uk', + 'mirandafrye.com', + 'misfitsmarket.com', + 'misspap.com', + 'missyempire.com', + 'mixbook.com', + 'mixtiles.com', + 'mizunousa.com', + 'mizzenandmain.com', + 'mlbshop.com', + 'mlsstore.com', + 'mms.com', + 'mnml.la', + 'mobiles.co.uk', + 'mobvoi.com', + 'modainpelle.com', + 'modanisa.com', + 'modaoperandi.com', + 'modcloth.com', + 'modernbathroom.com', + 'modernnursery.com', + 'modlily.com', + 'modloft.com', + 'modularclosets.com', + 'moen.com', + 'molekule.com', + 'moltonbrown.co.uk', + 'moltonbrown.com', + 'momcozy.com', + 'moneygram.com', + 'monicavinader.com', + 'monoprice.com', + 'monsoon.co.uk', + 'montblanc.com', + 'montirex.com', + 'moo.co.uk', + 'moo.com', + 'moonpig.com', + 'morningsave.com', + 'moroccanoil.com', + 'morphe.com', + 'morrisons.com', + 'moss.co.uk', + 'motel6.com', + 'motelrocks.com', + 'motherdenim.com', + 'motoin.de', + 'motorola.com', + 'motosport.com', + 'mottandbow.com', + 'mountainhardwear.com', + 'mountainsteals.com', + 'mountainwarehouse.com', + 'mous.co', + 'movavi.com', + 'mpb.com', + 'mpix.com', + 'mrporter.com', + 'mrsfields.com', + 'msccruises.co.uk', + 'mscdirect.com', + 'mspy.com', + 'muckbootcompany.com', + 'mud-pie.com', + 'mudwtr.com', + 'muglerusa.com', + 'mugsyjeans.com', + 'murad.co.uk', + 'murad.com', + 'murrayscheese.com', + 'muscleandstrength.com', + 'musclefood.com', + 'musclenation.org', + 'musicarts.com', + 'musiciansfriend.com', + 'musicmagpie.co.uk', + 'musicnotes.com', + 'mvmtwatches.com', + 'my-picture.co.uk', + 'mychicagosteak.com', + 'mycorporation.com', + 'mydavinci.com', + 'myer.com.au', + 'myfahlo.com', + 'myfico.com', + 'myfonts.com', + 'myheritage.com', + 'myisense.com', + 'mylabbox.com', + 'mylee.co.uk', + 'mymemory.co.uk', + 'mymms.com', + 'myoddballs.com', + 'myollie.com', + 'mypatriotsupply.com', + 'myphoto.com', + 'mypillow.com', + 'myprotein.com', + 'mytheresa.com', + 'mytrainpal.com', + 'mytyres.co.uk', + 'myvega.com', + 'myvitamins.com', + 'mywoof.com', + 'n11.com', + 'na-kd.com', + 'naadam.co', + 'nailpolishdirect.co.uk', + 'nakedwines.com', + 'name.com', + 'namecheap.com', + 'names.co.uk', + 'namesilo.com', + 'nanit.com', + 'narscosmetics.com', + 'nastygal.com', + 'natchezss.com', + 'nathanjames.com', + 'nationalbusinessfurniture.com', + 'nationalcar.com', + 'nationalexpress.com', + 'nativecos.com', + 'natori.com', + 'naturalizer.ca', + 'naturalizer.com', + 'naturallife.com', + 'nature.com', + 'naturehills.com', + 'naturepedic.com', + 'naturesbest.co.uk', + 'naturisimo.com', + 'naturium.com', + 'nautica.com', + 'ncl.com', + 'nealsyardremedies.com', + 'nearlynatural.com', + 'nectarsleep.co.uk', + 'nectarsleep.com', + 'negativeunderwear.com', + 'neimanmarcus.com', + 'neocell.com', + 'nespresso.com', + 'nestbedding.com', + 'nestedbean.com', + 'nestnewyork.com', + 'net-a-porter.com', + 'netflix.shop', + 'netgear.com', + 'networksolutions.com', + 'neutrogena.com', + 'newair.com', + 'newark.com', + 'newbalance.co.uk', + 'newbalance.com', + 'newchic.com', + 'newegg.ca', + 'newegg.com', + 'neweggbusiness.com', + 'neweracap.co.uk', + 'neweracap.com', + 'newlook.co.uk', + 'newlook.com', + 'newyorkpass.com', + 'nflshop.com', + 'nhc.com', + 'nike.com', + 'nililotan.com', + 'ninewest.com', + 'ninjakitchen.co.uk', + 'ninjakitchen.com', + 'nisbets.co.uk', + 'nisolo.com', + 'nixon.com', + 'noaandnani.co.uk', + 'nobodyschild.com', + 'nobullproject.com', + 'nolahmattress.com', + 'nolo.com', + 'nomnomnow.com', + 'noom.com', + 'noon.com', + 'noracora.com', + 'nordictrack.com', + 'nordpass.com', + 'nordstrom.com', + 'nordstromrack.com', + 'nordvpn.com', + 'northerntool.com', + 'northstyle.com', + 'norton.com', + 'notino.co.uk', + 'notonthehighstreet.com', + 'nourishedlife.com.au', + 'novica.com', + 'nuggetcomfort.com', + 'nurx.com', + 'nutrafol.com', + 'nutribullet.com', + 'nutrisystem.com', + 'nuts.com', + 'nuuly.com', + 'nvidia.com', + 'nyandcompany.com', + 'nydj.com', + 'nykaa.com', + 'nyxcosmetics.com', + 'nzxt.com', + 'o2.co.uk', + 'oakandluna.com', + 'oakandmore.co.uk', + 'oakcha.com', + 'oakfurnitureland.co.uk', + 'oakley.com', + 'oakley.com.au', + 'obagi.com', + 'ocado.com', + 'oculus.com', + 'odeon.co.uk', + 'office.co.uk', + 'officedepot.com', + 'officemax.com', + 'offspring.co.uk', + 'ogio.com', + 'ohpolly.com', + 'olaplex.com', + 'olay.com', + 'oldnavy.com', + 'oldnavy.gapcanada.ca', + 'oldworldchristmas.com', + 'olehenriksen.com', + 'olight.com', + 'olivegarden.com', + 'olly.com', + 'omahasteaks.com', + 'omegajuicers.com', + 'omio.com', + 'omniluxled.com', + 'omorovicza.com', + 'on.com', + 'onehanesplace.com', + 'oneill.com', + 'onekingslane.com', + 'oneplus.com', + 'onestopplus.com', + 'oneteaspoon.com.au', + 'onetravel.com', + 'onlinecarparts.co.uk', + 'onlinehomeshop.com', + 'onlynaturalpet.com', + 'onnit.com', + 'onxmaps.com', + 'oofos.com', + 'opodo.co.uk', + 'opticontacts.com', + 'opticsplanet.com', + 'oralb.com', + 'orbitz.com', + 'ordnancesurvey.co.uk', + 'oreilly.com', + 'orelia.co.uk', + 'orgain.com', + 'organixx.com', + 'orientaltrading.com', + 'originalgrain.com', + 'originalpenguin.com', + 'originpc.com', + 'origins.co.uk', + 'origins.com', + 'orlebarbrown.com', + 'orlybeauty.com', + 'ornamentshop.com', + 'orthofeet.com', + 'orvis.com', + 'osprey.com', + 'ospreylondon.com', + 'otterbox.com', + 'ouidad.com', + 'outback.com', + 'outdoorlook.co.uk', + 'outdoorresearch.com', + 'outdoorvoices.com', + 'outlet.lenovo.com', + 'outlet.us.dell.com', + 'overclockers.co.uk', + 'overnightprints.com', + 'overstock.com', + 'overtons.com', + 'oxo.com', + 'ozhairandbeauty.com', + 'pacsun.com', + 'paintshoppro.com', + 'paintyourlife.com', + 'paireyewear.com', + 'paisie.com', + 'pajamagram.com', + 'paleoonthego.com', + 'palmettostatearmory.com', + 'pampers.com', + 'pandaexpress.com', + 'pandahall.com', + 'panerabread.com', + 'papajohns.co.uk', + 'papajohns.com', + 'papamurphys.com', + 'papermart.com', + 'parachutehome.com', + 'paragon-software.com', + 'paragonsports.com', + 'parallels.com', + 'paramountplus.com', + 'parcel2go.com', + 'parkcameras.com', + 'parksleepfly.com', + 'parts-express.com', + 'partsgeek.com', + 'partycity.com', + 'patagonia.com', + 'patmcgrath.com', + 'patpat.com', + 'paulaschoice.com', + 'paulayoung.com', + 'paulfredrick.com', + 'paulsmith.co.uk', + 'pavers.co.uk', + 'pbteen.com', + 'pcrichard.com', + 'pe-nation.com', + 'peachskinsheets.com', + 'peachyairportparking.com', + 'peacockalley.com', + 'peacocktv.com', + 'peepers.com', + 'peets.com', + 'pelacase.com', + 'pelican.com', + 'pellemoda.us', + 'penhaligons.com', + 'penningtons.com', + 'peoplesjewellers.com', + 'pepboys.com', + 'peppermayo.com', + 'perfectlens.ca', + 'perfectlensworld.com', + 'perfumania.com', + 'perfume-click.co.uk', + 'perfume.com', + 'perigold.com', + 'perriconemd.com', + 'perryellis.com', + 'persol.com', + 'personalabs.com', + 'personalcreations.com', + 'personalizationmall.com', + 'peruvianconnection.com', + 'petalandpup.com', + 'petcarerx.com', + 'petcaresupplies.com', + 'petco.com', + 'petdrugsonline.co.uk', + 'petermillar.com', + 'peterthomasroth.com', + 'petflow.com', + 'petlibro.com', + 'petmate.com', + 'petsafe.net', + 'petsathome.com', + 'petsmart.ca', + 'petsmart.com', + 'petstock.com.au', + 'petsupermarket.com', + 'pfaltzgraff.com', + 'pgatoursuperstore.com', + 'pharmacy2u.co.uk', + 'pharmacyonline.com.au', + 'phase-eight.co.uk', + 'phase-eight.com', + 'philips-hue.com', + 'philips.com', + 'philo.com', + 'philosophy.com', + 'phlur.com', + 'phone.com', + 'photo.walgreens.com', + 'photobookuk.co.uk', + 'photobox.co.uk', + 'photos.walmart.com', + 'pictureframes.com', + 'picturesongold.com', + 'piedmontese.com', + 'pier1.com', + 'pimsleur.com', + 'pinkblushmaternity.com', + 'pinkcherry.ca', + 'pinkcherry.com', + 'pinklily.com', + 'pipingrock.com', + 'pixibeauty.com', + 'pizzahut.co.uk', + 'pizzahut.com', + 'plae.co', + 'plankandbeam.com', + 'planttherapy.com', + 'plaud.ai', + 'playbaseball.com', + 'playfulpromises.com', + 'playstation.com', + 'plowhearth.com', + 'plumpaper.com', + 'pluralsight.com', + 'plus.espn.com', + 'plushbeds.com', + 'pnf.com', + 'pocketmags.com', + 'poferries.com', + 'polaroid.com', + 'pond5.com', + 'pondkeeper.co.uk', + 'poopourri.com', + 'popeyes.com', + 'poplin.co', + 'popmarket.com', + 'popsockets.co.uk', + 'popsockets.com', + 'poshmark.com', + 'poshpeanut.com', + 'positivepromotions.com', + 'postmates.com', + 'potatoparcel.com', + 'potterybarn.com', + 'potterybarnkids.com', + 'power-systems.com', + 'prana.com', + 'premierinn.com', + 'preply.com', + 'prestigeflowers.co.uk', + 'prettylittlething.com', + 'prettylittlething.com.au', + 'prettylittlething.us', + 'prezzybox.com', + 'priceline.com', + 'priceline.com.au', + 'primallypure.com', + 'primary.com', + 'primaryarms.com', + 'primecables.com', + 'primeprometics.com', + 'princess.com', + 'princesshighway.com.au', + 'princesspolly.co.uk', + 'princesspolly.com', + 'princesspolly.com.au', + 'princetonreview.com', + 'print.staples.com', + 'printerpix.co.uk', + 'printerpix.com', + 'printique.com', + 'prioritypass.com', + 'prioritytire.com', + 'privateinternetaccess.com', + 'proactiv.com', + 'proaudiostar.com', + 'prodirectsoccer.com', + 'proflowers.com', + 'prohealth.com', + 'proozy.com', + 'protalus.com', + 'psd.com', + 'psprint.com', + 'psychobunny.com', + 'publicdesire.com', + 'publiclands.com', + 'publicmobile.ca', + 'publicstorage.com', + 'publix.com', + 'puffy.com', + 'pullandbear.com', + 'pulsetto.tech', + 'puma.co.uk', + 'puma.com', + 'pura.com', + 'puravidabracelets.com', + 'purcosmetics.com', + 'purecollection.com', + 'pureelectric.com', + 'pureformulas.com', + 'puregym.com', + 'purehockey.com', + 'pureology.com', + 'purevpn.com', + 'puritan.com', + 'purple.com', + 'purpleleafshop.com', + 'purpleparking.com', + 'puzzlemaster.ca', + 'puzzleyou.com', + 'pyramydair.com', + 'q-park.co.uk', + 'qalo.com', + 'qatarairways.com', + 'qpjewellers.com', + 'quadlockcase.com', + 'quantumfiber.com', + 'quayaustralia.com', + 'questnutrition.com', + 'quickbooks.intuit.com', + 'quicken.com', + 'quicksilverscientific.com', + 'quiksilver.com', + 'quill.com', + 'quizclothing.co.uk', + 'qustodio.com', + 'qvc.com', + 'qvcuk.com', + 'rackroomshoes.com', + 'radisson.com', + 'radissonhotels.com', + 'radley.co.uk', + 'radleylondon.com', + 'radpowerbikes.com', + 'rafaellastyle.com', + 'rag-bone.com', + 'rainbowshops.com', + 'rains.com', + 'raise.com', + 'rakuten.com', + 'rallyhouse.com', + 'ralphlauren.co.uk', + 'ralphlauren.com', + 'rapala.com', + 'rapidradios.com', + 'rawgeneration.com', + 'rawlings.com', + 'ray-ban.com', + 'ray-ban.com.au', + 'rayconglobal.com', + 'raymourflanigan.com', + 'razer.com', + 'rcwilley.com', + 'rdxsports.com', + 'readers.com', + 'realtruck.com', + 'rebeccaminkoff.com', + 'rebelliousfashion.co.uk', + 'rebelsport.com.au', + 'redbarn.com', + 'redbubble.com', + 'redcon1.com', + 'reddressboutique.com', + 'redletterdays.co.uk', + 'redlobster.com', + 'redroof.com', + 'redwingshoes.com', + 'reebelo.com', + 'reebok.co.uk', + 'reebok.com', + 'reeds.com', + 'reef.com', + 'regatta.com', + 'rei.com', + 'reiss.com', + 'reitmans.com', + 'rejuvenation.com', + 'remedymeds.com', + 'remitly.com', + 'renewlife.com', + 'renogy.com', + 'rentreporters.com', + 'renttherunway.com', + 'reolink.com', + 'replacements.com', + 'representclo.com', + 'reservebar.com', + 'resortpass.com', + 'restaurant.com', + 'restockit.com', + 'restorationhardware.com', + 'reverb.com', + 'revitalash.com', + 'revivalanimal.com', + 'revo.com', + 'revolutionbeauty.com', + 'revolve.com', + 'revopoint3d.com', + 'revzilla.com', + 'rhealsuperfoods.com', + 'rhodeskin.com', + 'rhone.com', + 'riamoneytransfer.com', + 'ridgewallet.com', + 'riflepaperco.com', + 'ring.com', + 'ringcentral.com', + 'ripleys.com', + 'rishi-tea.com', + 'riteaid.com', + 'rituals.com', + 'riverisland.com', + 'rmadefense.com', + 'roadrunnersports.com', + 'roamans.com', + 'robertdyas.co.uk', + 'robertgraham.us', + 'rockabilia.com', + 'rockbottomgolf.com', + 'rocketlanguages.com', + 'rocketlawyer.com', + 'rocketrx.com', + 'rockler.com', + 'rockport.com', + 'rockyboots.com', + 'rods.com', + 'rogue-industries.com', + 'roka.com', + 'rokform.com', + 'roku.com', + 'rollerskatenation.com', + 'roman.co.uk', + 'rona.ca', + 'roots.ca', + 'rosegal.com', + 'roselandfurniture.com', + 'rosettastone.co.uk', + 'rosettastone.com', + 'rosewe.com', + 'ross-simons.com', + 'rothys.com', + 'rotita.com', + 'roundtablepizza.com', + 'routledge.com', + 'rover.com', + 'roxy.com', + 'royalcanin.com', + 'royalmint.com', + 'rticoutdoors.com', + 'rubytuesday.com', + 'rue21.com', + 'ruelala.com', + 'ruggable.co.uk', + 'ruggable.com', + 'rugiet.com', + 'rugs-direct.com', + 'rugsusa.com', + 'runjanji.com', + 'runnersneed.com', + 'runningwarehouse.com', + 'russellstover.com', + 'rvca.com', + 'rvshare.com', + 'rw-co.com', + 'rx-safety.com', + 'ry.com.au', + 'ryanair.com', + 'ryderwear.com.au', + 'ryka.com', + 'ryzesuperfoods.com', + 'saatchiart.com', + 'saatva.com', + 'saba.com.au', + 'safelite.com', + 'safeway.com', + 'safishing.com', + 'sage.com', + 'sail.ca', + 'saily.com', + 'saje.com', + 'sakara.com', + 'saksfifthavenue.com', + 'sallybeauty.com', + 'salomon.com', + 'saltandstone.com', + 'saltlife.com', + 'saltrock.com', + 'saltwaterfish.com', + 'samash.com', + 'samedelman.com', + 'samplize.com', + 'samsclub.com', + 'samsonite.com', + 'samsung.com', + 'sandcloud.com', + 'sanuk.com', + 'sarahraven.com', + 'saranoni.com', + 'sassandbide.com', + 'satyajewelry.com', + 'saucey.com', + 'saucony.com', + 'savagex.com', + 'saxxunderwear.com', + 'scarosso.com', + 'scdkey.com', + 'scentbird.com', + 'scentbox.com', + 'scheels.com', + 'scholastic.com', + 'schuh.co.uk', + 'schuh.ie', + 'schutz-shoes.com', + 'scosche.com', + 'scottsdalegolf.co.uk', + 'scrapbook.com', + 'screwfix.com', + 'scrubsandbeyond.com', + 'scufgaming.com', + 'sea-ny.com', + 'sealskincovers.com', + 'seamless.com', + 'sears.com', + 'searspartsdirect.com', + 'seatgeek.com', + 'seaworld.com', + 'secretescapes.com', + 'secretsales.com', + 'seed.com', + 'seedsman.com', + 'sees.com', + 'seetickets.com', + 'selectblinds.com', + 'selfridges.com', + 'sell.worldofbooks.com', + 'sendflowers.com', + 'sennheiser-hearing.com', + 'sephora.co.uk', + 'sephora.com', + 'seraphine.com', + 'serenaandlily.com', + 'serenataflowers.com', + 'serta.com', + 'sesameplace.com', + 'sevilleclassics.com', + 'sewingmachinesplus.com', + 'shadyrays.com', + 'shapellx.com', + 'shapermint.com', + 'sharkclean.co.uk', + 'sharkclean.com', + 'sharperimage.com', + 'shavershop.com.au', + 'shaws.com', + 'sheds.co.uk', + 'sheertex.com', + 'sheetmusicplus.com', + 'shefit.com', + 'shein.co.uk', + 'shein.com', + 'shethinx.com', + 'shiekh.com', + 'shiekhshoes.com', + 'shinesty.com', + 'shipt.com', + 'shirtspace.com', + 'shiseido.com', + 'shoebacca.com', + 'shoecarnival.com', + 'shoedazzle.com', + 'shoemall.com', + 'shoepalace.com', + 'shoesforcrews.com', + 'shoestation.com', + 'shoezone.com', + 'shokz.com', + 'shop.com', + 'shop.franklinplanner.com', + 'shop.nhl.com', + 'shop.puma.ca', + 'shop.simon.com', + 'shop.usa.canon.com', + 'shop.vans.co.uk', + 'shopakira.com', + 'shopbop.com', + 'shopcider.com', + 'shopdisney.co.uk', + 'shopee.cl', + 'shopee.co.id', + 'shopee.co.th', + 'shopee.com', + 'shopee.com.br', + 'shopee.com.co', + 'shopee.com.mx', + 'shopee.com.my', + 'shopee.com.ph', + 'shopee.sg', + 'shopee.tw', + 'shopee.vn', + 'shopeekh.com', + 'shopify.com', + 'shopindoorgolf.com', + 'shopjourney.com', + 'shopjura.com', + 'shopjustice.com', + 'shoplc.com', + 'shoplet.com', + 'shopmando.com', + 'shopmicas.com', + 'shopmissa.com', + 'shoppremiumoutlets.com', + 'shopto.net', + 'shopvida.com', + 'shopwss.com', + 'showmeyourmumu.com', + 'showpo.com', + 'shudder.com', + 'shutterfly.com', + 'shutterstock.com', + 'shuuemura-usa.com', + 'sideshow.com', + 'sierra.com', + 'sierralivingconcepts.com', + 'sigmabeauty.com', + 'signalrelief.com', + 'sigsauer.com', + 'silvergoldbull.com', + 'silverjeans.com', + 'simbasleep.com', + 'simons.ca', + 'simplehuman.com', + 'simplemobile.com', + 'simplemodern.com', + 'simpletire.com', + 'simpli-home.com', + 'simplybe.co.uk', + 'simplymedsonline.co.uk', + 'simplysupplements.co.uk', + 'simplytoimpress.com', + 'singaporeair.com', + 'singer.com', + 'siobeauty.com', + 'siriusxm.com', + 'sittercity.com', + 'sixflags.com', + 'sixity.com', + 'sixthreezero.com', + 'size.co.uk', + 'skechers.com', + 'skillshare.com', + 'skims.com', + 'skinceuticals.com', + 'skinnydiplondon.com', + 'skinnytan.com', + 'skinstore.com', + 'skiphop.com', + 'skipthedishes.com', + 'skis.com', + 'skullcandy.com', + 'skylar.com', + 'skylightframe.com', + 'skylum.com', + 'skyscanner.com', + 'sleefs.com', + 'sleekhair.com', + 'sleeper.com', + 'sleepez.com', + 'sleepnumber.com', + 'slicelife.com', + 'slidebelts.com', + 'sling.com', + 'slipcovershop.com', + 'slugger.com', + 'slumberpod.com', + 'smallable.com', + 'smallflower.com', + 'smallwoodhome.com', + 'smartbox.com', + 'smartbuyglasses.com', + 'smartwingshome.com', + 'smartwool.com', + 'smashbox.com', + 'smkw.com', + 'smokecartel.com', + 'smokonow.com', + 'smoothiebox.com', + 'snagtights.com', + 'snakeriverfarms.com', + 'snapfish.co.uk', + 'snapfish.com', + 'sneakersnstuff.com', + 'snipesusa.com', + 'snowandrock.com', + 'snowinn.com', + 'snowjoe.com', + 'soakandsleep.com', + 'soccer.com', + 'society6.com', + 'sodastream.com', + 'sofaclub.co.uk', + 'sofftshoe.com', + 'sofi.com', + 'softsurroundings.com', + 'sokoglam.com', + 'solawave.co', + 'soldejaneiro.com', + 'soletreadmills.com', + 'solgaard.co', + 'solostove.com', + 'solsticesunglasses.com', + 'soma.com', + 'sonicdrivein.com', + 'sonicelectronix.com', + 'sonos.com', + 'sony.com', + 'soothe.com', + 'sorel.com', + 'sorelfootwear.ca', + 'sourcemore.com', + 'southwest.com', + 'southwestvacations.com', + 'spabreaks.com', + 'spacenk.com', + 'spaceship.com', + 'spafinder.com', + 'spanx.com', + 'spartan.com', + 'spaseekers.com', + 'speckproducts.com', + 'speediance.com', + 'speedo.com', + 'spelabautoparts.com', + 'spencersonline.com', + 'sperry.com', + 'spirit.com', + 'spirithalloween.com', + 'splashwines.com', + 'splendid.com', + 'spongelle.com', + 'spoonflower.com', + 'spoonfulofcomfort.com', + 'sportchek.ca', + 'sportsdirect.com', + 'sportsmans.com', + 'sportsmansguide.com', + 'sportsmanswarehouse.com', + 'sportsmemorabilia.com', + 'sportsshoes.com', + 'spothero.com', + 'spreadshirt.co.uk', + 'springer.com', + 'springwellwater.com', + 'spyder.com', + 'squarespace.com', + 'squareup.com', + 'squattypotty.com', + 'ssense.com', + 'ssww.com', + 'stacksocial.com', + 'stacyadams.com', + 'stadiumgoods.com', + 'stamps.com', + 'stanley1913.com', + 'staples.ca', + 'staples.co.uk', + 'staples.com', + 'staplescopyandprint.ca', + 'staplespromo.com', + 'starmarket.com', + 'startfitness.co.uk', + 'starz.com', + 'stasherbag.com', + 'stateandliberty.com', + 'statelinetack.com', + 'staysure.co.uk', + 'stearnsandfoster.com', + 'steelcase.com', + 'steelseries.com', + 'steinersports.com', + 'stelladot.com', + 'stellamccartney.com', + 'stellarinfo.com', + 'step2.com', + 'stevemadden.ca', + 'stevemadden.com', + 'stickermule.com', + 'stickeryou.com', + 'stilacosmetics.com', + 'stio.com', + 'stirlingkit.com', + 'stitchfix.com', + 'stockx.com', + 'stoneberry.com', + 'stonewallkitchen.com', + 'stopandshop.com', + 'store.kuiu.com', + 'store.liverpoolfc.com', + 'store.metmuseum.org', + 'store.nascar.com', + 'store.nba.com', + 'store.nytimes.com', + 'storyworth.com', + 'stradivarius.com', + 'straighttalk.com', + 'strapsco.com', + 'strawberrynet.com', + 'striderite.com', + 'strivectin.com', + 'stroops.com', + 'stuartslondon.com', + 'stuartweitzman.com', + 'stubhub.com', + 'stuckonyou.com.au', + 'studentbeans.com', + 'studentuniverse.com', + 'studio.co.uk', + 'stuhrling.com', + 'styletread.com.au', + 'stylevana.com', + 'stylewe.com', + 'subway.com', + 'suitdirect.co.uk', + 'sullenclothing.com', + 'sulwhasoo.com', + 'summitracing.com', + 'sunandski.com', + 'sunglasshut.com', + 'sunglasshut.com.au', + 'sungoldpower.com', + 'sunnysports.com', + 'supcase.com', + 'super.com', + 'supercheapsigns.com', + 'superdrug.com', + 'superdry.com', + 'supergoop.com', + 'superjeweler.com', + 'supplementhunt.com', + 'supre.com.au', + 'surfshark.com', + 'surfstitch.com', + 'surlatable.com', + 'surprise.katespade.com', + 'suttons.co.uk', + 'suzannesomers.com', + 'suzyshier.com', + 'svsound.com', + 'swansonvitamins.com', + 'swarovski.com', + 'sweat.com', + 'sweatybetty.com', + 'sweetgreen.com', + 'sweetwater.com', + 'swell.com', + 'swimoutlet.com', + 'swimsuitsforall.com', + 'sylvane.com', + 't-mobile.com', + 'tableclothsfactory.com', + 'tackledirect.com', + 'tactics.com', + 'tailorbrands.com', + 'tails.com', + 'talbots.com', + 'talkspace.com', + 'tanga.com', + 'tantaly.com', + 'taosfootwear.com', + 'target.com', + 'targetoptical.com', + 'targetphoto.com', + 'tartecosmetics.com', + 'taschen.com', + 'tascperformance.com', + 'taskrabbit.co.uk', + 'taskrabbit.com', + 'tatcha.com', + 'taxact.com', + 'taxslayer.com', + 'taylormadegolf.com', + 'taylorstitch.com', + 'teacollection.com', + 'techsmith.com', + 'tecovas.com', + 'tedbaker.com', + 'teeoff.com', + 'teepublic.com', + 'teladoc.com', + 'teleflora.com', + 'tello.com', + 'telus.com', + 'tempo.fit', + 'tempomeals.com', + 'temptu.com', + 'tempurpedic.com', + 'temu.com', + 'tennis-warehouse.com', + 'tennisexpress.com', + 'tenthousand.cc', + 'terminix.com', + 'tervis.com', + 'tesco.com', + 'tescomobile.com', + 'tessabit.com', + 'teva.com', + 'textbooks.com', + 'tgw.com', + 'thatdailydeal.com', + 'the-house.com', + 'theadventurechallenge.com', + 'theartofshaving.com', + 'thebay.com', + 'thecakedecoratingcompany.co.uk', + 'thecbdistillery.com', + 'thecompanystore.com', + 'thecpapshop.com', + 'thedetoxmarket.com', + 'theessencevault.co.uk', + 'thefarmersdog.com', + 'thefragranceshop.co.uk', + 'thefruitcompany.com', + 'thefryecompany.com', + 'thegamecollection.net', + 'thegldshop.com', + 'thegoodguys.com.au', + 'thegreatcourses.com', + 'thegymking.com', + 'thehalara.com', + 'thehipstore.co.uk', + 'thehydrojug.com', + 'theiconic.com.au', + 'theirishstore.com', + 'theknot.com', + 'thelasthunt.com', + 'theluxurycloset.com', + 'themacateam.com', + 'thenorthface.co.uk', + 'thenorthface.com', + 'theordinary.com', + 'theory.com', + 'theoutnet.com', + 'thepaperstore.com', + 'theparkingspot.com', + 'theperfumeshop.com', + 'thepopcornfactory.com', + 'theproteinworks.com', + 'therabody.com', + 'therange.co.uk', + 'therealreal.com', + 'thereformation.com', + 'thermoworks.com', + 'thesak.com', + 'theshadestore.com', + 'thetiebar.com', + 'thetileapp.com', + 'thetoyshop.com', + 'thetrainline.com', + 'thewalkingcompany.com', + 'thewhitecompany.com', + 'theworks.co.uk', + 'thingsremembered.com', + 'thirdlove.com', + 'thisworks.com', + 'thmarinesupplies.com', + 'thompson-morgan.com', + 'thompsoncigar.com', + 'thorne.com', + 'thorntons.co.uk', + 'thortful.com', + 'threadless.com', + 'thredup.com', + 'thriftbooks.com', + 'thrifty.com', + 'thrivecausemetics.com', + 'thrivemarket.com', + 'thuma.co', + 'thymes.com', + 'ticketcity.com', + 'ticketmaster.ca', + 'ticketmaster.co.uk', + 'ticketmaster.com', + 'ticketmaster.com.au', + 'ticketnetwork.com', + 'ticketsmarter.com', + 'ticketweb.com', + 'tickpick.com', + 'tidewe.com', + 'ties.com', + 'tiktok.com', + 'tile.com', + 'tillys.com', + 'timberland.co.uk', + 'timberland.com', + 'timberlandonline.co.uk', + 'timbuk2.com', + 'timex.ca', + 'timex.com', + 'tipsyelves.com', + 'tiptop.ca', + 'tiqets.com', + 'tireagent.com', + 'tirebuyer.com', + 'tiremart.com', + 'tirerack.com', + 'tires-easy.com', + 'titan.fitness', + 'tjc.co.uk', + 'tjmaxx.tjx.com', + 'tkmaxx.com', + 'tmlewin.co.uk', + 'tmlewin.com', + 'tnuck.com', + 'todaytix.com', + 'toddsnyder.com', + 'toffs.com', + 'tog24.com', + 'tomboyx.com', + 'tommy.com', + 'tommybahama.com', + 'tommyjohn.com', + 'toms.com', + 'tonies.com', + 'tonyrobbins.com', + 'toofaced.com', + 'toolstation.com', + 'toolstoday.com', + 'tootimid.com', + 'topgolf.com', + 'topodesigns.com', + 'topps.com', + 'topresume.com', + 'torrid.com', + 'toryburch.co.uk', + 'toryburch.com', + 'totalwine.com', + 'totalwireless.com', + 'totes.co.uk', + 'touchofmodern.com', + 'touchstonehomeproducts.com', + 'tourradar.com', + 'tours4fun.com', + 'tous.com', + 'toynk.com', + 'toysrus.com', + 'tracfone.com', + 'tractive.com', + 'tractorsupply.com', + 'tradeinn.com', + 'trafalgar.com', + 'training.linuxfoundation.org', + 'transavia.com', + 'transparentlabs.com', + 'travelocity.ca', + 'travelocity.com', + 'travelodge.co.uk', + 'travelodge.com', + 'traveloka.com', + 'travelpro.com', + 'traverseon.com', + 'travismathew.com', + 'travisperkins.co.uk', + 'treatwell.co.uk', + 'tredz.co.uk', + 'tree2mydoor.com', + 'trekbikes.com', + 'trekkinn.com', + 'trendmicro.com', + 'trendyol.com', + 'trespass.com', + 'trestique.com', + 'trifectanutrition.com', + 'trinaturk.com', + 'trip.com', + 'tripadvisor.co.uk', + 'tripadvisor.com', + 'trotters.com', + 'troybilt.com', + 'trueclassictees.com', + 'trueleafmarket.com', + 'truenaturemeats.com', + 'truenutrition.com', + 'trueprotein.com.au', + 'truereligion.com', + 'trueshotammo.com', + 'trustedhousesitters.com', + 'trxtraining.com', + 'trycaviar.com', + 'trynood.com', + 'tsc.ca', + 'tubbytodd.com', + 'tuftandneedle.com', + 'tui.co.uk', + 'tula.com', + 'tumi.com', + 'tunnelbear.com', + 'turbotax.intuit.ca', + 'turbotax.intuit.com', + 'turkishairlines.com', + 'turo.com', + 'turtlebeach.com', + 'tv.apple.com', + 'tv.youtube.com', + 'tvc-mall.com', + 'twillory.com', + 'twinings.co.uk', + 'twopagescurtains.com', + 'tyentusa.com', + 'tyr.com', + 'tyre-shopper.co.uk', + 'uber.com', + 'ubereats.co.nz', + 'ubereats.com', + 'ubereats.com.au', + 'udacity.com', + 'udemy.com', + 'ufcstore.com', + 'ugg.com', + 'uggexpress.com.au', + 'uglychristmassweater.com', + 'uk.coach.com', + 'uk.hotels.com', + 'uk.morphe.com', + 'ukstore.hermanmiller.com', + 'ulike.com', + 'uline.com', + 'ullapopken.com', + 'ulta.com', + 'ultimateears.com', + 'unbeatablesale.com', + 'uncommongoods.com', + 'underarmour.com', + 'undercovertourist.com', + 'undergroundshirts.com', + 'underoutfit.com', + 'unice.com', + 'uniformadvantage.com', + 'unineed.com', + 'unionbay.com', + 'uniplaces.com', + 'uniqlo.com', + 'unique-vintage.com', + 'united.com', + 'universalstandard.com', + 'untilgone.com', + 'untuckit.com', + 'upliftdesk.com', + 'ups.com', + 'upside.com', + 'urban-planet.com', + 'urbandecay.com', + 'urbanoutfitters.co.uk', + 'urbanoutfitters.com', + 'urbanstems.com', + 'us.amazfit.com', + 'us.chantelle.com', + 'us.dbjourney.com', + 'us.innisfree.com', + 'us.laneige.com', + 'us.missoma.com', + 'us.pandora.net', + 'us.riverisland.com', + 'us.roborock.com', + 'usa.tommy.com', + 'uscellular.com', + 'uspoloassn.com', + 'vancaro.com', + 'vanheusen.com.au', + 'vans.com', + 'vapesourcing.com', + 'vapordna.com', + 'veed.io', + 'vegamour.com', + 'vegas.com', + 'vegogarden.com', + 'velvet-tees.com', + 'venus.com', + 'verabradley.com', + 'verizon.com', + 'verizonwireless.com', + 'vermontcountrystore.com', + 'veronicabeard.com', + 'versedskin.com', + 'vertbaudet.co.uk', + 'very.co.uk', + 'vessi.com', + 'vestiairecollective.com', + 'vetsupply.com.au', + 'vevor.com', + 'viagogo.com', + 'viator.com', + 'vichy.ca', + 'vichyusa.com', + 'vicicollection.com', + 'victorianplumbing.co.uk', + 'victoriassecret.com', + 'victorinox.com', + 'vidaxl.co.uk', + 'vidaxl.com', + 'videostudiopro.com', + 'viking-direct.co.uk', + 'vikingbags.com', + 'vilebrequin.com', + 'vimeo.com', + 'vince.com', + 'vincecamuto.com', + 'vineyardvines.com', + 'vintagetub.com', + 'vioc.com', + 'vionicshoes.com', + 'viovet.co.uk', + 'virginatlantic.com', + 'virginballoonflights.co.uk', + 'virginexperiencedays.co.uk', + 'virginmedia.com', + 'visible.com', + 'visiondirect.co.uk', + 'visiondirect.com.au', + 'vistaprint.ca', + 'vistaprint.co.uk', + 'vistaprint.com', + 'vistaprint.com.au', + 'vitabiotics.com', + 'vitacost.com', + 'vitalchoice.com', + 'vitalsource.com', + 'vitaminshoppe.com', + 'vitamix.com', + 'vitrazza.com', + 'vivaterra.com', + 'vividracing.com', + 'vividseats.com', + 'viviennewestwood.com', + 'viviscal.com', + 'vivobarefoot.com', + 'vixpaulahermanny.com', + 'vodafone.co.uk', + 'voipsupply.com', + 'volcom.com', + 'volotea.com', + 'vons.com', + 'vrai.com', + 'vrbo.com', + 'vueling.com', + 'vuoriclothing.com', + 'wacoal-america.com', + 'wagjag.com', + 'waitrose.com', + 'waitrosecellar.com', + 'walgreens.com', + 'walkingpad.com', + 'walkinlab.com', + 'wallis.co.uk', + 'wallpaperdirect.com', + 'walmart.ca', + 'walmart.com', + 'wander.com', + 'wanderprints.com', + 'wandrd.com', + 'warbyparker.com', + 'warmies.com', + 'watchco.com', + 'watchgang.com', + 'waterdropfilter.com', + 'waterford.com', + 'waterstones.com', + 'way.com', + 'wayfair.ca', + 'wayfair.co.uk', + 'wayfair.com', + 'wayfairprofessional.com', + 'wayspa.com', + 'we-vibe.com', + 'wearewild.com', + 'wearfigs.com', + 'wearlively.com', + 'wearpact.com', + 'weber.com', + 'webeyecare.com', + 'webnode.com', + 'webroot.com', + 'webstaurantstore.com', + 'wedgwood.com', + 'weekday.com', + 'weekendoffender.com', + 'weightwatchers.com', + 'weirdfish.co.uk', + 'well.ca', + 'wellbots.com', + 'welovefrugi.com', + 'west49.com', + 'westelm.com', + 'westerndigital.com', + 'westernunion.com', + 'westmarine.com', + 'westmorebeauty.com', + 'wetnwildbeauty.com', + 'whirlpool.com', + 'whistle.com', + 'whistlefish.com', + 'whistles.co.uk', + 'whistles.com', + 'whitefoxboutique.co.uk', + 'whitefoxboutique.com', + 'whitefoxboutique.com.au', + 'whitehouseblackmarket.com', + 'whitemountainpuzzles.com', + 'whitestuff.com', + 'whizlabs.com', + 'wholefoodsmarket.com', + 'wickedgoodcupcakes.com', + 'wickes.co.uk', + 'wig.com', + 'wildearth.com', + 'wildone.com', + 'wildzora.com', + 'wilko.com', + 'williams-sonoma.com', + 'willmaker.com', + 'wilson.com', + 'wilsonsleather.com', + 'winc.com', + 'windandweather.com', + 'windsorstore.com', + 'windycitynovelties.com', + 'wine.com', + 'winebasket.com', + 'wineinsiders.com', + 'wineofthemonthclub.com', + 'wingstop.com', + 'winkbeds.com', + 'wisdompanel.com', + 'wish.com', + 'witchery.com.au', + 'wittner.com.au', + 'wix.com', + 'wolfandbadger.com', + 'wolfermans.com', + 'wolverine.com', + 'womanizer.com', + 'womanwithin.com', + 'wonderbly.com', + 'wondershare.com', + 'wood-finishes-direct.com', + 'woodcraft.com', + 'woolovers.com', + 'woolworths.com.au', + 'woot.com', + 'worldmarket.com', + 'worldremit.com', + 'worldsoccershop.com', + 'worldwidegolfshops.com', + 'worldwidestereo.com', + 'worx.com', + 'wowcher.co.uk', + 'wrangler.com', + 'wuka.co.uk', + 'wyndham.com', + 'wyze.com', + 'xbox.com', + 'xcaret.com', + 'xero.com', + 'xeroshoes.com', + 'xfinity.com', + 'xfinitymobile.com', + 'xtool.com', + 'yamibuy.com', + 'yandy.com', + 'yankeecandle.co.uk', + 'yankeecandle.com', + 'yesglasses.com', + 'yesstyle.co.uk', + 'yesstyle.com', + 'yeti.com', + 'yoox.com', + 'youfoodz.com', + 'youngexplorers.com', + 'yourmechanic.com', + 'yoursclothing.co.uk', + 'yourzooki.com', + 'youthtothepeople.com', + 'ysl.com', + 'yslbeautyus.com', + 'yummie.com', + 'yumove.co.uk', + 'yvesrocher.ca', + 'yvesrocherusa.com', + 'zadig-et-voltaire.com', + 'zaful.com', + 'zagg.com', + 'zales.com', + 'zalesoutlet.com', + 'zamathome.com', + 'zappos.com', + 'zara.com', + 'zavvi.com', + 'zazzle.co.uk', + 'zazzle.com', + 'zeelool.com', + 'zenfolio.com', + 'zennioptical.com', + 'zerofoxtrot.com', + 'zgallerie.com', + 'zinus.com', + 'zipcar.co.uk', + 'zipcar.com', + 'ziphealth.co', + 'ziprecruiter.com', + 'zola.com', + 'zoom.us', + 'zooplus.co.uk', + 'zooplus.de', + 'zoro.com', + 'zulily.com', + 'zumba.com', + 'zwilling.com', +]); diff --git a/src/firefox/src/ui/recommended-actions.js b/src/firefox/src/ui/recommended-actions.js index 43cb9afc9..2fecbc3bb 100644 --- a/src/firefox/src/ui/recommended-actions.js +++ b/src/firefox/src/ui/recommended-actions.js @@ -1,4 +1,5 @@ import { isDirectPublicMediaUrl } from '../agent/public-media-url.js'; +import { COUPON_MERCHANT_DOMAINS } from './coupon-domains.js'; import { t } from './i18n.js'; const SOCIAL_HOST_RE = /(^|\.)(instagram\.com|tiktok\.com|x\.com|twitter\.com|facebook\.com|fb\.com|threads\.net|youtube\.com|youtu\.be|reddit\.com|pinterest\.com|snapchat\.com)$/i; @@ -6,22 +7,6 @@ const PUBLIC_MEDIA_HOST_RE = /(^|\.)(youtube\.com|youtu\.be|tiktok\.com|instagra const DATING_HOST_RE = /(^|\.)(tinder\.com|bumble\.com|hinge\.co|okcupid\.com|match\.com|pof\.com|badoo\.com|happn\.com|coffeemeetsbagel\.com)$/i; const SHOPPING_HOST_RE = /(^|\.)(amazon\.[a-z.]+|ebay\.[a-z.]+|etsy\.com|walmart\.com|target\.com|bestbuy\.com|shopify\.com|aliexpress\.com|mercadolibre\.[a-z.]+|mercadolivre\.com\.br|hepsiburada\.com|trendyol\.com|n11\.com|shopee\.[a-z.]+|shopeekh\.com|lazada\.[a-z.]+)$/i; const PRODUCT_PATH_RE = /\/(dp|gp\/product|itm|p|product|products|prod|item|listing|ilan|urun)\b/i; -const COUPON_SHOPPING_DOMAINS = [ - 'amazon.com', 'amazon.ca', 'amazon.com.mx', 'amazon.com.br', 'amazon.co.uk', 'amazon.de', 'amazon.fr', - 'amazon.it', 'amazon.es', 'amazon.nl', 'amazon.pl', 'amazon.se', 'amazon.com.be', 'amazon.co.jp', - 'amazon.in', 'amazon.com.au', 'amazon.sg', 'amazon.ae', 'amazon.sa', 'amazon.com.tr', 'amazon.eg', - 'ebay.com', 'ebay.ca', 'ebay.co.uk', 'ebay.de', 'ebay.fr', 'ebay.it', 'ebay.es', 'ebay.com.au', - 'etsy.com', 'walmart.com', 'target.com', 'bestbuy.com', 'aliexpress.com', 'mercadolivre.com.br', - 'hepsiburada.com', 'trendyol.com', 'n11.com', 'shopeekh.com', - 'mercadolibre.com.ar', 'mercadolibre.com.mx', 'mercadolibre.com.co', 'mercadolibre.cl', - 'mercadolibre.com.pe', 'mercadolibre.com.uy', 'mercadolibre.com.ve', 'mercadolibre.com.ec', - 'mercadolibre.com.bo', 'mercadolibre.com.py', 'mercadolibre.com.do', 'mercadolibre.com.gt', - 'mercadolibre.com.hn', 'mercadolibre.com.ni', 'mercadolibre.com.pa', 'mercadolibre.com.sv', - 'mercadolibre.co.cr', - 'shopee.com', 'shopee.com.br', 'shopee.com.co', 'shopee.com.mx', 'shopee.cl', 'shopee.co.id', - 'shopee.com.my', 'shopee.com.ph', 'shopee.sg', 'shopee.co.th', 'shopee.vn', 'shopee.tw', - 'lazada.com', 'lazada.co.id', 'lazada.com.my', 'lazada.com.ph', 'lazada.sg', 'lazada.co.th', 'lazada.vn', -]; const COUPON_PRODUCT_PATH_RE = /\/(?:dp|gp\/product|itm|p|product|products|prod|item|listing|ilan|urun|ip|detail)(?:\/|$)/i; const COUPON_BESTBUY_PRODUCT_PATH_RE = /\/site\/[^/]+\/\d+\.p(?:\/|$)/i; const COUPON_CHECKOUT_PATH_RE = /\/(?:cart|basket|bag|checkout|checkouts|shopping-cart|shopping-bag|warenkorb|panier|carrito|carrinho|sacola|sepet|troli|keranjang|gio-hang|koszyk|korzina)(?:\/|$)/i; @@ -227,7 +212,12 @@ function hasCartOrPriceSignal(pageInfo = {}) { } function isKnownCouponShoppingHost(host = '') { - return COUPON_SHOPPING_DOMAINS.some((domain) => host === domain || host.endsWith(`.${domain}`)); + let candidate = host; + while (candidate.includes('.')) { + if (COUPON_MERCHANT_DOMAINS.has(candidate)) return true; + candidate = candidate.slice(candidate.indexOf('.') + 1); + } + return false; } function hasCouponFieldSignal(pageInfo = {}) { diff --git a/test/run.js b/test/run.js index a0ef95b8b..bd8435c49 100644 --- a/test/run.js +++ b/test/run.js @@ -672,6 +672,14 @@ const { bumpSemver, rewriteVersionInJsonText, rewriteVersionByAnchor, isReleaseB const { normalizeChangelogBody, buildChangelogSection, insertChangelogEntry } = await import( 'file://' + path.join(ROOT, 'scripts/update-changelog.mjs').replace(/\\/g, '/') ); +const { + collectCouponFollowDomains, + extractCouponFollowDomains, + normalizeCouponDomain, + renderCouponDomainModule, +} = await import( + 'file://' + path.join(ROOT, 'scripts/update-coupon-domains.mjs').replace(/\\/g, '/') +); const { assertMatchingArchiveVersion, assertStoreSafeFlagLicenseEntries, @@ -10659,6 +10667,14 @@ for (const [label, buildRecommendedActions] of [['chrome', buildRecommendedActio description: 'US$20.00', }, }, + { + name: 'generated coupon-directory merchant subdomain', + pageInfo: { + url: 'https://shop.academy.com/product/running-shoes', + title: 'Running shoes', + description: 'In stock - $79.99', + }, + }, ]; for (const { name, pageInfo } of positiveCases) { @@ -10795,6 +10811,60 @@ for (const [label, buildRecommendedActions] of [['chrome', buildRecommendedActio }); } +test('coupon-domain generator extracts only normalized CouponFollow merchant routes', () => { + const html = ` + Example + UK shop + duplicate + directory + invalid + lookalike + `; + assert.deepEqual(extractCouponFollowDomains(html), ['example.com', 'shop.example.co.uk']); + assert.equal(normalizeCouponDomain('HTTPS://WWW.Example.COM/path'), 'example.com'); + assert.equal(normalizeCouponDomain('localhost'), null); + assert.equal(normalizeCouponDomain('co.uk'), null); +}); + +test('coupon-domain generator renders deterministic mirrored extension data', () => { + const generated = renderCouponDomainModule(['z.example', 'a.example', 'z.example'], { + sources: ['https://couponfollow.com/site/browse/a/all'], + }); + assert.ok(generated.indexOf("'a.example'") < generated.indexOf("'z.example'")); + assert.equal((generated.match(/'z\.example'/g) || []).length, 1); + assert.match(generated, /Generated by `npm run update:coupon-domains`/); + + const chromeData = fs.readFileSync(path.join(ROOT, 'src/chrome/src/ui/coupon-domains.js'), 'utf8'); + const firefoxData = fs.readFileSync(path.join(ROOT, 'src/firefox/src/ui/coupon-domains.js'), 'utf8'); + assert.equal(chromeData, firefoxData); + assert.match(chromeData, /export const COUPON_MERCHANT_DOMAINS = new Set/); + assert.ok((chromeData.match(/^ '[^']+',$/gm) || []).length >= 3700); +}); + +test('coupon-domain generator bounds its fixed source set and fails closed on empty indexes', async () => { + const requested = []; + const domains = await collectCouponFollowDomains({ + concurrency: 3, + fetchImpl: async (url) => { + requested.push(url); + const index = new URL(url).pathname.split('/').at(-2); + return new Response(`merchant`, { + headers: { 'content-type': 'text/html' }, + }); + }, + }); + assert.equal(requested.length, 27); + assert.equal(new Set(requested).size, 27); + assert.ok(domains.includes('shop-a.example')); + + await assert.rejects( + collectCouponFollowDomains({ + fetchImpl: async () => new Response('No merchant links'), + }), + /contained no merchant domains/, + ); +}); + test('WebBrain promotion has localized X and LinkedIn variants with ready-to-go plans', () => { const expectedTweetSteps = (exactPost) => [ 'Open https://x.com/compose/post in the current tab through the visible browser UI.',