diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 84d80f99..be43d704 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,7 +1,7 @@ 'name': 'build' 'env': - 'GO_VERSION': '1.19.6' + 'GO_VERSION': '1.19.7' 'NODE_VERSION': '14' 'on': diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index cf94cb26..8313cfa8 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,7 +1,7 @@ 'name': 'lint' 'env': - 'GO_VERSION': '1.19.6' + 'GO_VERSION': '1.19.7' 'on': 'push': diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a6c20fb..e77938b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,20 +14,90 @@ and this project adheres to + + +## [v0.107.26] - 2023-03-09 + +See also the [v0.107.26 GitHub milestone][ms-v0.107.26]. + +### Security + +- Go version has been updated to prevent the possibility of exploiting the + CVE-2023-24532 Go vulnerability fixed in [Go 1.19.7][go-1.19.7]. + +### Added + +- The ability to set custom IP for EDNS Client Subnet by using the new + `dns.edns_client_subnet.use_custom` and `dns.edns_client_subnet.custom_ip` + fields ([#1472]). The UI changes are coming in the upcoming releases. +- The ability to use `dnstype` rules in the disallowed domains list ([#5468]). + This allows dropping requests based on their question types. + +### Changed + +#### Configuration Changes + +In this release, the schema version has changed from 16 to 17. + +- Property `edns_client_subnet`, which in schema versions 16 and earlier used + to be a part of the `dns` object, is now part of the `dns.edns_client_subnet` + object: + + ```yaml + # BEFORE: + 'dns': + # … + 'edns_client_subnet': false + + # AFTER: + 'dns': + # … + 'edns_client_subnet': + 'enabled': false + 'use_custom': false + 'custom_ip': '' + ``` + + To rollback this change, move the value of `dns.edns_client_subnet.enabled` + into the `dns.edns_client_subnet`, remove the fields + `dns.edns_client_subnet.enabled`, `dns.edns_client_subnet.use_custom`, + `dns.edns_client_subnet.custom_ip`, and change the `schema_version` back to + `16`. + ### Fixed +- Obsolete value of the Interface MTU DHCP option is now omitted ([#5281]). +- Various dark theme bugs ([#5439], [#5441], [#5442], [#5515]). +- Automatic update on MIPS64 and little-endian 32-bit MIPS architectures + ([#5270], [#5373]). +- Requirements to domain names in domain-specific upstream configurations have + been relaxed to meet those from [RFC 3696][rfc3696] ([#4884]). - Failing service installation via script on FreeBSD ([#5431]). +[#1472]: https://github.com/AdguardTeam/AdGuardHome/issues/1472 +[#4884]: https://github.com/AdguardTeam/AdGuardHome/issues/4884 +[#5270]: https://github.com/AdguardTeam/AdGuardHome/issues/5270 +[#5281]: https://github.com/AdguardTeam/AdGuardHome/issues/5281 +[#5373]: https://github.com/AdguardTeam/AdGuardHome/issues/5373 [#5431]: https://github.com/AdguardTeam/AdGuardHome/issues/5431 +[#5439]: https://github.com/AdguardTeam/AdGuardHome/issues/5439 +[#5441]: https://github.com/AdguardTeam/AdGuardHome/issues/5441 +[#5442]: https://github.com/AdguardTeam/AdGuardHome/issues/5442 +[#5468]: https://github.com/AdguardTeam/AdGuardHome/issues/5468 +[#5515]: https://github.com/AdguardTeam/AdGuardHome/issues/5515 + +[go-1.19.7]: https://groups.google.com/g/golang-announce/c/3-TpUx48iQY +[ms-v0.107.26]: https://github.com/AdguardTeam/AdGuardHome/milestone/62?closed=1 +[rfc3696]: https://datatracker.ietf.org/doc/html/rfc3696 -[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.25...HEAD +[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.26...HEAD +[v0.107.26]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.25...v0.107.26 [v0.107.25]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.24...v0.107.25 [v0.107.24]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.23...v0.107.24 [v0.107.23]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.22...v0.107.23 diff --git a/Makefile b/Makefile index f4e3a6f4..0f68acb6 100644 --- a/Makefile +++ b/Makefile @@ -4,17 +4,26 @@ # See https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html. .POSIX: +# This comment is used to simplify checking local copies of the +# Makefile. Bump this number every time a significant change is made to +# this Makefile. +# +# AdGuard-Project-Version: 2 + +# Don't name these macros "GO" etc., because GNU Make apparently makes +# them exported environment variables with the literal value of +# "${GO:-go}" and so on, which is not what we need. Use a dot in the +# name to make sure that users don't have an environment variable with +# the same name. +# +# See https://unix.stackexchange.com/q/646255/105635. +GO.MACRO = $${GO:-go} +VERBOSE.MACRO = $${VERBOSE:-0} + CHANNEL = development CLIENT_DIR = client COMMIT = $$( git rev-parse --short HEAD ) DIST_DIR = dist -# Don't name this macro "GO", because GNU Make apparenly makes it an -# exported environment variable with the literal value of "${GO:-go}", -# which is not what we need. Use a dot in the name to make sure that -# users don't have an environment variable with the same name. -# -# See https://unix.stackexchange.com/q/646255/105635. -GO.MACRO = $${GO:-go} GOPROXY = https://goproxy.cn|https://proxy.golang.org|direct GOSUMDB = sum.golang.google.cn GPG_KEY = devteam@adguard.com @@ -25,7 +34,6 @@ NPM_INSTALL_FLAGS = $(NPM_FLAGS) --quiet --no-progress --ignore-engines\ --ignore-optional --ignore-platform --ignore-scripts RACE = 0 SIGN = 1 -VERBOSE = 0 VERSION = v0.0.0 YARN = yarn @@ -56,13 +64,13 @@ ENV = env\ PATH="$${PWD}/bin:$$( "$(GO.MACRO)" env GOPATH )/bin:$${PATH}"\ RACE='$(RACE)'\ SIGN='$(SIGN)'\ - VERBOSE='$(VERBOSE)'\ + VERBOSE="$(VERBOSE.MACRO)"\ VERSION='$(VERSION)'\ # Keep the line above blank. -# Keep this target first, so that a naked make invocation triggers -# a full build. +# Keep this target first, so that a naked make invocation triggers a +# full build. build: deps quick-build quick-build: js-build go-build @@ -116,4 +124,4 @@ go-os-check: openapi-lint: ; cd ./openapi/ && $(YARN) test openapi-show: ; cd ./openapi/ && $(YARN) start -txt-lint: ; $(ENV) "$(SHELL)" ./scripts/make/txt-lint.sh +txt-lint: ; $(ENV) "$(SHELL)" ./scripts/make/txt-lint.sh diff --git a/bamboo-specs/release.yaml b/bamboo-specs/release.yaml index f02431e0..0dce84b7 100644 --- a/bamboo-specs/release.yaml +++ b/bamboo-specs/release.yaml @@ -7,7 +7,7 @@ # Make sure to sync any changes with the branch overrides below. 'variables': 'channel': 'edge' - 'dockerGo': 'adguard/golang-ubuntu:6.1' + 'dockerGo': 'adguard/golang-ubuntu:6.2' 'stages': - 'Build frontend': @@ -331,7 +331,7 @@ # need to build a few of these. 'variables': 'channel': 'beta' - 'dockerGo': 'adguard/golang-ubuntu:6.1' + 'dockerGo': 'adguard/golang-ubuntu:6.2' # release-vX.Y.Z branches are the branches from which the actual final release # is built. - '^release-v[0-9]+\.[0-9]+\.[0-9]+': @@ -346,4 +346,4 @@ # are the ones that actually get released. 'variables': 'channel': 'release' - 'dockerGo': 'adguard/golang-ubuntu:6.1' + 'dockerGo': 'adguard/golang-ubuntu:6.2' diff --git a/bamboo-specs/test.yaml b/bamboo-specs/test.yaml index 4708bcc7..38579455 100644 --- a/bamboo-specs/test.yaml +++ b/bamboo-specs/test.yaml @@ -5,7 +5,7 @@ 'key': 'AHBRTSPECS' 'name': 'AdGuard Home - Build and run tests' 'variables': - 'dockerGo': 'adguard/golang-ubuntu:6.1' + 'dockerGo': 'adguard/golang-ubuntu:6.2' 'stages': - 'Tests': diff --git a/client/src/__locales/fi.json b/client/src/__locales/fi.json index c60508b9..b04ad021 100644 --- a/client/src/__locales/fi.json +++ b/client/src/__locales/fi.json @@ -297,7 +297,7 @@ "blocking_mode_refused": "REFUSED: Vastaa REFUSED-koodilla", "blocking_mode_nxdomain": "NXDOMAIN: Vastaa NXDOMAIN-koodilla", "blocking_mode_null_ip": "Tyhjä IP: Vastaa IP-nollaosoitteella (0.0.0.0 korvaa A; :: korvaa AAAA)", - "blocking_mode_custom_ip": "Mukautettu IP: Vastaa itse määritetyllä IP-osoitteella", + "blocking_mode_custom_ip": "Mukautettu IP: Vastaa manuaalisesti määritetyllä IP-osoitteella", "theme_auto": "Automaattinen", "theme_light": "Vaalea", "theme_dark": "Tumma", diff --git a/client/src/__locales/no.json b/client/src/__locales/no.json index 9756f88a..ca218d07 100644 --- a/client/src/__locales/no.json +++ b/client/src/__locales/no.json @@ -281,6 +281,7 @@ "blocking_mode_nxdomain": "NXDOMAIN: Svar med NXDOMAIN-koden", "blocking_mode_null_ip": "Null IP: Svar med en 0-IP-adresse (0.0.0.0 for A; :: for AAAA)", "blocking_mode_custom_ip": "Tilpasset IP: Svar med en manuelt valgt IP-adresse", + "theme_auto": "Auto", "upstream_dns_client_desc": "Hvis dette feltet holdes tomt, vil AdGuard Home bruke tjenerne som er satt opp i <0>DNS-innstillingene.", "tracker_source": "Sporerkilde", "source_label": "Kilde", diff --git a/client/src/__locales/tr.json b/client/src/__locales/tr.json index 72acb887..d4e3b172 100644 --- a/client/src/__locales/tr.json +++ b/client/src/__locales/tr.json @@ -449,7 +449,7 @@ "access_disallowed_title": "İzin verilmeyen istemciler", "access_disallowed_desc": "CIDR'lerin, IP adreslerinin veya İstemci Kimliklerin listesi. Bu listede girişler varsa, AdGuard Home bu istemcilerden gelen istekleri keser. İzin verilen istemcilerde girişler varsa, bu alan yok sayılır.", "access_blocked_title": "İzin verilmeyen alan adları", - "access_blocked_desc": "Bu işlem filtrelerle ilgili değildir. AdGuard Home, bu alan adlarından gelen DNS sorgularını yanıtsız bırakır ve bu sorgular sorgu günlüğünde görünmez. Tam alan adlarını, joker karakterleri veya URL filtre kurallarını belirtebilirsiniz, ör. \"example.org\", \"*.example.org\" veya \"||example.org^\".", + "access_blocked_desc": "Bu işlem filtrelerle ilgili değildir. AdGuard Home, bu alan adlarından gelen DNS sorgularını yanıtsız bırakır ve bu sorgular sorgu günlüğünde görünmez. Tam alan adlarını, joker karakterleri veya URL filtre kurallarını belirtebilirsiniz, örn. \"example.org\", \"*.example.org\" veya \"||example.org^\".", "access_settings_saved": "Erişim ayarları başarıyla kaydedildi!", "updates_checked": "AdGuard Home'un yeni bir sürümü mevcut", "updates_version_equal": "AdGuard Home yazılımı güncel durumda", diff --git a/client/src/__locales/zh-cn.json b/client/src/__locales/zh-cn.json index 27d2fcbd..3d417844 100644 --- a/client/src/__locales/zh-cn.json +++ b/client/src/__locales/zh-cn.json @@ -172,7 +172,7 @@ "list_url_table_header": "清单网址", "rules_count_table_header": "规则数", "last_time_updated_table_header": "上次更新时间", - "actions_table_header": "活跃状态", + "actions_table_header": "操作", "request_table_header": "请求", "edit_table_action": "编辑", "delete_table_action": "删除", diff --git a/client/src/components/App/index.css b/client/src/components/App/index.css index b20bd424..e11400b9 100644 --- a/client/src/components/App/index.css +++ b/client/src/components/App/index.css @@ -30,6 +30,11 @@ --loading-bg: rgba(255, 255, 255, 0.48); --font-family-monospace: Monaco, Menlo, "Ubuntu Mono", Consolas, source-code-pro, monospace; --font-size-disable-autozoom: 1rem; + --alert-message-color: #24426c; + --alert-message-border: #cbdbf2; + --alert-message-bg: #dae5f5; + --checkbox-bg: #e2e2e2; + --radio-bg: #ffffff; } [data-theme="dark"] { @@ -59,6 +64,11 @@ --detailed-info-color: #fff; --gray300: #f3f3f3; --loading-bg: #131313; + --alert-message-color: #e6e6e6; + --alert-message-border: #363648; + --alert-message-bg: #363648; + --checkbox-bg: #a4a4a4; + --radio-bg: #a4a4a4; } body { diff --git a/client/src/components/Dashboard/index.js b/client/src/components/Dashboard/index.js index 9bde0ea7..ff66820e 100644 --- a/client/src/components/Dashboard/index.js +++ b/client/src/components/Dashboard/index.js @@ -60,7 +60,7 @@ const Dashboard = ({ title={t('refresh_btn')} onClick={() => getAllStats()} > - + ; diff --git a/client/src/components/Filters/Table.js b/client/src/components/Filters/Table.js index 045d4be4..7a3c0e0b 100644 --- a/client/src/components/Filters/Table.js +++ b/client/src/components/Filters/Table.js @@ -100,7 +100,7 @@ class Table extends Component { }) } > - + @@ -110,7 +110,7 @@ class Table extends Component { onClick={() => handleDelete(url)} title={t('delete_table_action')} > - + diff --git a/client/src/components/Logs/Cells/ClientCell.js b/client/src/components/Logs/Cells/ClientCell.js index 9467f14e..3590df48 100644 --- a/client/src/components/Logs/Cells/ClientCell.js +++ b/client/src/components/Logs/Cells/ClientCell.js @@ -162,7 +162,7 @@ const ClientCell = ({ {content && ( @@ -301,7 +301,7 @@ const ClientsTable = ({ disabled={processingDeleting} title={t('delete_table_action')} > - + diff --git a/client/src/components/Settings/Clients/Service.css b/client/src/components/Settings/Clients/Service.css index 6cfcf40a..c4ca9d8c 100644 --- a/client/src/components/Settings/Clients/Service.css +++ b/client/src/components/Settings/Clients/Service.css @@ -54,6 +54,12 @@ color: #495057; } +.service__icon svg { + width: 20px; + height: 20px; + fill: #495057; +} + .service--global .service__icon { display: none; } diff --git a/client/src/components/ui/Checkbox.css b/client/src/components/ui/Checkbox.css index 2a556fb0..111f0af0 100644 --- a/client/src/components/ui/Checkbox.css +++ b/client/src/components/ui/Checkbox.css @@ -48,7 +48,7 @@ height: 20px; min-width: 20px; margin-right: 10px; - background-color: #e2e2e2; + background-color: var(--checkbox-bg); background-repeat: no-repeat; background-position: center center; background-size: 12px 10px; diff --git a/client/src/components/ui/Icons.js b/client/src/components/ui/Icons.js index 38eff1be..bc725419 100644 --- a/client/src/components/ui/Icons.js +++ b/client/src/components/ui/Icons.js @@ -86,10 +86,10 @@ const Icons = () => ( d="m19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1 -2.83 0l-.06-.06a1.65 1.65 0 0 0 -1.82-.33 1.65 1.65 0 0 0 -1 1.51v.17a2 2 0 0 1 -2 2 2 2 0 0 1 -2-2v-.09a1.65 1.65 0 0 0 -1.08-1.51 1.65 1.65 0 0 0 -1.82.33l-.06.06a2 2 0 0 1 -2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0 -1.51-1h-.17a2 2 0 0 1 -2-2 2 2 0 0 1 2-2h.09a1.65 1.65 0 0 0 1.51-1.08 1.65 1.65 0 0 0 -.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33h.08a1.65 1.65 0 0 0 1-1.51v-.17a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0 -.33 1.82v.08a1.65 1.65 0 0 0 1.51 1h.17a2 2 0 0 1 2 2 2 2 0 0 1 -2 2h-.09a1.65 1.65 0 0 0 -1.51 1z" /> - - - + + + + ( - + { disabled={processingVersion} title={t('check_updates_now')} > - + } diff --git a/client/src/helpers/filters/filters.js b/client/src/helpers/filters/filters.js index 6f4af9e5..68b3dd9c 100644 --- a/client/src/helpers/filters/filters.js +++ b/client/src/helpers/filters/filters.js @@ -101,7 +101,7 @@ export default { "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_13.txt" }, "POL_polish_filters_for_pi_hole": { - "name": "POL: Polish filters for Pi hole", + "name": "POL: Polish filters for Pi-hole", "categoryId": "regional", "homepage": "https://www.certyficate.it/", "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_14.txt" @@ -235,7 +235,7 @@ export default { "urlhaus_filter_online": { "name": "Malicious URL Blocklist (URLHaus)", "categoryId": "security", - "homepage": "https://gitlab.com/malware-filter/urlhaus-filter", + "homepage": "https://urlhaus.abuse.ch/", "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_11.txt" }, "windowsspyblocker_hosts_spy_rules": { diff --git a/client/src/helpers/trackers/adguard.json b/client/src/helpers/trackers/adguard.json deleted file mode 100644 index 1e3bda05..00000000 --- a/client/src/helpers/trackers/adguard.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "timeUpdated": "2021-12-15", - "categories": { - "0": "audio_video_player", - "1": "comments", - "2": "customer_interaction", - "3": "pornvertising", - "4": "advertising", - "5": "essential", - "6": "site_analytics", - "7": "social_media", - "8": "misc", - "9": "cdn", - "10": "hosting", - "11": "unknown", - "12": "extensions", - "13": "email", - "14": "consent", - "15": "telemetry", - "101": "mobile_analytics" - }, - "trackers": { - "akamai_technologies": { - "name": "Akamai Technologies", - "categoryId": 9, - "url": "https://www.akamai.com/", - "companyId": "akamai" - }, - "apple": { - "name": "Apple", - "categoryId": 8, - "url": "https://www.apple.com/", - "companyId": "apple" - }, - "apple_ads": { - "name": "Apple Search Ads", - "categoryId": 4, - "url": "https://searchads.apple.com/", - "companyId": "apple" - }, - "facebook_audience": { - "name": "Facebook Audience Network", - "categoryId": 4, - "url": "https://www.facebook.com/business/products/audience-network", - "companyId": "facebook" - }, - "crashlytics": { - "name": "Crashlytics", - "categoryId": 101, - "url": "https://crashlytics.com/", - "companyId": null - }, - "flurry": { - "name": "Flurry", - "categoryId": 101, - "url": "http://www.flurry.com/", - "companyId": "verizon" - }, - "hockeyapp": { - "name": "HockeyApp", - "categoryId": 101, - "url": "https://hockeyapp.net/", - "companyId": null - }, - "firebase": { - "name": "Firebase", - "categoryId": 101, - "url": "https://firebase.google.com/", - "companyId": "google" - }, - "appsflyer": { - "name": "AppsFlyer", - "categoryId": 101, - "url": "https://www.appsflyer.com/", - "companyId": "appsflyer" - }, - "yandex_appmetrica": { - "name": "Yandex AppMetrica", - "categoryId": 101, - "url": "https://appmetrica.yandex.com/", - "companyId": "yandex" - }, - "adjust": { - "name": "Adjust", - "categoryId": 101, - "url": "https://www.adjust.com/", - "companyId": "adjust" - }, - "branch": { - "name": "Branch.io", - "categoryId": 101, - "url": "https://branch.io/", - "companyId": "branch_metrics_inc" - }, - "markmonitor": { - "name": "MarkMonitor", - "categoryId": 4, - "url": "https://www.markmonitor.com/", - "companyId": "markmonitor" - }, - "appcenter": { - "name": "Microsoft App Center", - "categoryId": 5, - "url": "https://appcenter.ms/", - "companyId": null - }, - "unity_ads": { - "name": "Unity Ads", - "categoryId": 4, - "url": "https://unity.com/solutions/mobile-business/monetize-your-game", - "companyId": null - }, - "azure": { - "name": "Microsoft Azure", - "categoryId": 10, - "url": "https://azure.microsoft.com/", - "companyId": "microsoft" - }, - "button": { - "name": "Button", - "categoryId": 4, - "url": "https://www.usebutton.com/", - "companyId": null - }, - "netflix": { - "name": "Netflix", - "categoryId": 8, - "url": "https://www.netflix.com/", - "companyId": null - }, - "mail.ru_banner": { - "name": "Mail.Ru Banner Network", - "categoryId": 4, - "url": "http://mail.ru/", - "companyId": "vk" - }, - "mail.ru_counter": { - "name": "Mail.Ru Counter", - "categoryId": 2, - "url": "http://mail.ru/", - "companyId": "vk" - }, - "mail.ru_group": { - "name": "Mail.Ru Group", - "categoryId": 7, - "url": "http://mail.ru/", - "companyId": "vk" - } - }, - "trackerDomains": { - "akadns.net": "akamai_technologies", - "akamaiedge.net": "akamai_technologies", - "apple.com": "apple", - "apple.news": "apple", - "apple-dns.net": "apple", - "aaplimg.com": "apple", - "icloud.com": "apple", - "mzstatic.com": "apple", - "iadsdk.apple.com": "apple_ads", - "graph.facebook.com": "facebook_audience", - "crashlytics.com": "crashlytics", - "flurry.com": "flurry", - "hockeyapp.net": "hockeyapp", - "app-measurement.com": "firebase", - "appsflyer.com": "appsflyer", - "appmetrica.yandex.com": "yandex_appmetrica", - "adjust.com": "adjust", - "mobileapptracking.com": "branch", - "edgecastcdn.net": "markmonitor", - "appcenter.ms": "appcenter", - "unityads.unity3d.com": "unity_ads", - "azure.com": "azure", - "bttn.io": "button" - } -} diff --git a/client/src/helpers/trackers/trackers.json b/client/src/helpers/trackers/trackers.json index 485b759e..8afb5aeb 100644 --- a/client/src/helpers/trackers/trackers.json +++ b/client/src/helpers/trackers/trackers.json @@ -1,5 +1,5 @@ { - "timeUpdated": "2023-02-09T12:31:34.007Z", + "timeUpdated": "2023-03-08T00:09:48.692Z", "categories": { "0": "audio_video_player", "1": "comments", @@ -6772,55 +6772,64 @@ "name": "Facebook", "categoryId": 4, "url": "https://www.facebook.com", - "companyId": "facebook" + "companyId": "meta", + "source": "AdGuard" }, "facebook_beacon": { "name": "Facebook Beacon", "categoryId": 7, "url": "http://www.facebook.com/beacon/faq.php", - "companyId": "facebook" + "companyId": "meta", + "source": "AdGuard" }, "facebook_cdn": { "name": "Facebook CDN", "categoryId": 9, "url": "https://www.facebook.com", - "companyId": "facebook" + "companyId": "meta", + "source": "AdGuard" }, "facebook_connect": { "name": "Facebook Connect", "categoryId": 6, "url": "https://developers.facebook.com/connect.php", - "companyId": "facebook" + "companyId": "meta", + "source": "AdGuard" }, "facebook_conversion_tracking": { "name": "Facebook Conversion Tracking", "categoryId": 4, "url": "http://www.facebook.com/", - "companyId": "facebook" + "companyId": "meta", + "source": "AdGuard" }, "facebook_custom_audience": { "name": "Facebook Custom Audience", "categoryId": 4, "url": "https://www.facebook.com", - "companyId": "facebook" + "companyId": "meta", + "source": "AdGuard" }, "facebook_graph": { "name": "Facebook Social Graph", "categoryId": 7, "url": "https://developers.facebook.com/docs/reference/api/", - "companyId": "facebook" + "companyId": "meta", + "source": "AdGuard" }, "facebook_impressions": { "name": "Facebook Impressions", "categoryId": 4, "url": "https://www.facebook.com/", - "companyId": "facebook" + "companyId": "meta", + "source": "AdGuard" }, "facebook_social_plugins": { "name": "Facebook Social Plugins", "categoryId": 7, "url": "https://developers.facebook.com/plugins", - "companyId": "facebook" + "companyId": "meta", + "source": "AdGuard" }, "facetz.dca": { "name": "Facetz.DCA", @@ -8909,7 +8918,8 @@ "name": "Instagram", "categoryId": 8, "url": "https://www.facebook.com/", - "companyId": "facebook" + "companyId": "meta", + "source": "AdGuard" }, "instant_check_mate": { "name": "Instant Check Mate", @@ -19215,11 +19225,39 @@ "url": "http://www.zypmedia.com/", "companyId": "zypmedia" }, - "slack": { - "name": "Slack", + "adguard_dns": { + "name": "AdGuard DNS", "categoryId": 8, - "url": "https://www.slack.com/", - "companyId": "salesforce", + "url": "https://adguard-dns.io/", + "companyId": "adguard", + "source": "AdGuard" + }, + "adguard_vpn": { + "name": "AdGuard VPN", + "categoryId": 8, + "url": "https://adguard-vpn.com/", + "companyId": "adguard", + "source": "AdGuard" + }, + "appcenter": { + "name": "Microsoft App Center", + "categoryId": 5, + "url": "https://appcenter.ms/", + "companyId": null, + "source": "AdGuard" + }, + "alibaba_cloud": { + "name": "Alibaba Cloud", + "categoryId": 10, + "url": "https://www.alibabacloud.com/", + "companyId": "alibaba", + "source": "AdGuard" + }, + "alibaba_ucbrowser": { + "name": "UC Browser", + "categoryId": 8, + "url": "https://ucweb.com/", + "companyId": "alibaba", "source": "AdGuard" }, "apple": { @@ -19236,53 +19274,25 @@ "companyId": "apple", "source": "AdGuard" }, - "facebook_audience": { - "name": "Facebook Audience Network", - "categoryId": 4, - "url": "https://www.facebook.com/business/products/audience-network", - "companyId": "facebook", + "azure": { + "name": "Microsoft Azure", + "categoryId": 10, + "url": "https://azure.microsoft.com/", + "companyId": "microsoft", "source": "AdGuard" }, - "crashlytics": { - "name": "Crashlytics", - "categoryId": 101, - "url": "https://crashlytics.com/", - "companyId": null, - "source": "AdGuard" - }, - "showrss": { - "name": "showRSS", + "azure_blob_storage": { + "name": "Azure Blob Storage", "categoryId": 8, - "url": "https://showrss.info/", - "companyId": "showrss", + "url": "https://azure.microsoft.com/en-us/products/storage/blobs", + "companyId": "microsoft", "source": "AdGuard" }, - "hockeyapp": { - "name": "HockeyApp", - "categoryId": 101, - "url": "https://hockeyapp.net/", - "companyId": null, - "source": "AdGuard" - }, - "google_trust_services": { - "name": "Google Trust Services", - "categoryId": 5, - "url": "https://pki.goog/", - "companyId": "google", - "source": "AdGuard" - }, - "firebase": { - "name": "Firebase", - "categoryId": 101, - "url": "https://firebase.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "yandex_appmetrica": { - "name": "Yandex AppMetrica", - "categoryId": 101, - "url": "https://appmetrica.yandex.com/", - "companyId": "yandex", + "bitwarden": { + "name": "Bitwarden", + "categoryId": 8, + "url": "https://bitwarden.com/", + "companyId": "bitwarden", "source": "AdGuard" }, "branch": { @@ -19292,18 +19302,25 @@ "companyId": "branch_metrics_inc", "source": "AdGuard" }, - "qualcomm": { - "name": "Qualcomm", - "categoryId": 8, - "url": "https://www.qualcomm.com/", - "companyId": "qualcomm", + "button": { + "name": "Button", + "categoryId": 4, + "url": "https://www.usebutton.com/", + "companyId": null, "source": "AdGuard" }, - "solaredge": { - "name": "SolarEdge Technologies, Inc.", - "categoryId": 8, - "url": "https://www.solaredge.com/", - "companyId": "solaredge", + "crashlytics": { + "name": "Crashlytics", + "categoryId": 101, + "url": "https://crashlytics.com/", + "companyId": null, + "source": "AdGuard" + }, + "edgio": { + "name": "Edgio", + "categoryId": 9, + "url": "https://edg.io/", + "companyId": "edgio", "source": "AdGuard" }, "element": { @@ -19313,39 +19330,46 @@ "companyId": "element", "source": "AdGuard" }, - "outlook": { - "name": "Microsoft Outlook", + "facebook_audience": { + "name": "Facebook Audience Network", + "categoryId": 4, + "url": "https://www.facebook.com/business/products/audience-network", + "companyId": "meta", + "source": "AdGuard" + }, + "firebase": { + "name": "Firebase", + "categoryId": 101, + "url": "https://firebase.google.com/", + "companyId": "google", + "source": "AdGuard" + }, + "gmail": { + "name": "Gmail", "categoryId": 13, - "url": "https://outlook.live.com/", - "companyId": "microsoft", + "url": "https://mail.google.com/", + "companyId": "google", "source": "AdGuard" }, - "appcenter": { - "name": "Microsoft App Center", + "google_trust_services": { + "name": "Google Trust Services", "categoryId": 5, - "url": "https://appcenter.ms/", + "url": "https://pki.goog/", + "companyId": "google", + "source": "AdGuard" + }, + "hockeyapp": { + "name": "HockeyApp", + "categoryId": 101, + "url": "https://hockeyapp.net/", "companyId": null, "source": "AdGuard" }, - "unity_ads": { - "name": "Unity Ads", - "categoryId": 4, - "url": "https://unity.com/solutions/mobile-business/monetize-your-game", - "companyId": null, - "source": "AdGuard" - }, - "azure": { - "name": "Microsoft Azure", - "categoryId": 10, - "url": "https://azure.microsoft.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "button": { - "name": "Button", - "categoryId": 4, - "url": "https://www.usebutton.com/", - "companyId": null, + "kik": { + "name": "Kik", + "categoryId": 7, + "url": "https://kik.com/", + "companyId": "kik", "source": "AdGuard" }, "lets_encrypt": { @@ -19355,11 +19379,11 @@ "companyId": "lets_encrypt", "source": "AdGuard" }, - "plex": { - "name": "Plex", - "categoryId": 0, - "url": "https://www.plex.tv/", - "companyId": "plex", + "lgtv": { + "name": "LG TV", + "categoryId": 8, + "url": "https://www.lg.com/", + "companyId": "lgcorp", "source": "AdGuard" }, "matrix": { @@ -19368,6 +19392,195 @@ "url": "https://matrix.org/", "companyId": "matrix", "source": "AdGuard" + }, + "medialab": { + "name": "MediaLab.AI Inc.", + "categoryId": 8, + "url": "https://medialab.la/", + "companyId": "medialab", + "source": "AdGuard" + }, + "meganz": { + "name": "Mega Ltd.", + "categoryId": 8, + "url": "https://mega.io/", + "companyId": "meganz", + "source": "AdGuard" + }, + "msedge": { + "name": "Microsoft Edge", + "categoryId": 8, + "url": "https://www.microsoft.com/en-us/edge", + "companyId": "microsoft", + "source": "AdGuard" + }, + "mozilla": { + "name": "Mozilla Foundation", + "categoryId": 8, + "url": "https://www.mozilla.org/", + "companyId": "mozilla", + "source": "AdGuard" + }, + "nab": { + "name": "National Australia Bank", + "categoryId": 8, + "url": "https://www.nab.com.au/", + "companyId": "nab", + "source": "AdGuard" + }, + "notion": { + "name": "Notion", + "categoryId": 8, + "url": "https://www.notion.so/", + "companyId": "notion", + "source": "AdGuard" + }, + "ntppool": { + "name": "Network Time Protocol", + "categoryId": 5, + "url": "https://ntp.org/", + "companyId": "ntppool", + "source": "AdGuard" + }, + "oppo": { + "name": "OPPO", + "categoryId": 101, + "url": "https://www.oppo.com/", + "companyId": "oppo", + "source": "AdGuard" + }, + "outlook": { + "name": "Microsoft Outlook", + "categoryId": 13, + "url": "https://outlook.live.com/", + "companyId": "microsoft", + "source": "AdGuard" + }, + "oztam": { + "name": "OzTAM", + "categoryId": 8, + "url": "https://oztam.com.au/", + "companyId": "oztam", + "source": "AdGuard" + }, + "plex": { + "name": "Plex", + "categoryId": 0, + "url": "https://www.plex.tv/", + "companyId": "plex", + "source": "AdGuard" + }, + "qualcomm": { + "name": "Qualcomm", + "categoryId": 8, + "url": "https://www.qualcomm.com/", + "companyId": "qualcomm", + "source": "AdGuard" + }, + "recaptcha": { + "name": "reCAPTCHA", + "categoryId": 8, + "url": "https://www.google.com/recaptcha/about/", + "companyId": "google", + "source": "AdGuard" + }, + "sectigo": { + "name": "Sectigo Limited", + "categoryId": 5, + "url": "https://www.solaredge.com/", + "companyId": "sectigo", + "source": "AdGuard" + }, + "showrss": { + "name": "showRSS", + "categoryId": 8, + "url": "https://showrss.info/", + "companyId": "showrss", + "source": "AdGuard" + }, + "similarweb": { + "name": "SimilarWeb", + "categoryId": 6, + "url": "https://www.similarweb.com/", + "companyId": "similarweb", + "source": "AdGuard" + }, + "slack": { + "name": "Slack", + "categoryId": 8, + "url": "https://www.slack.com/", + "companyId": "salesforce", + "source": "AdGuard" + }, + "solaredge": { + "name": "SolarEdge Technologies, Inc.", + "categoryId": 8, + "url": "https://www.solaredge.com/", + "companyId": "solaredge", + "source": "AdGuard" + }, + "telstra": { + "name": "Telstra", + "categoryId": 8, + "url": "https://www.telstra.com.au/", + "companyId": "telstra", + "source": "AdGuard" + }, + "unity_ads": { + "name": "Unity Ads", + "categoryId": 4, + "url": "https://unity.com/solutions/mobile-business/monetize-your-game", + "companyId": null, + "source": "AdGuard" + }, + "vscode": { + "name": "Visual Studio Code", + "categoryId": 8, + "url": "https://code.visualstudio.com/", + "companyId": "microsoft", + "source": "AdGuard" + }, + "whatsapp": { + "name": "WhatsApp", + "categoryId": 8, + "url": "https://www.whatsapp.com/", + "companyId": "meta", + "source": "AdGuard" + }, + "windows_maps": { + "name": "Windows Maps", + "categoryId": 8, + "url": "https://www.microsoft.com/store/apps/9wzdncrdtbvb", + "companyId": "microsoft", + "source": "AdGuard" + }, + "windows_notifications": { + "name": "The Windows Push Notification Services", + "categoryId": 8, + "url": "https://learn.microsoft.com/en-us/windows/apps/design/shell/tiles-and-notifications/windows-push-notification-services--wns--overview", + "companyId": "microsoft", + "source": "AdGuard" + }, + "windows_time": { + "name": "Windows Time Service", + "categoryId": 8, + "url": "https://learn.microsoft.com/en-us/windows-server/networking/windows-time-service/how-the-windows-time-service-works", + "companyId": "microsoft", + "source": "AdGuard" + }, + "windowsupdate": { + "name": "Windows Update", + "categoryId": 9, + "url": "https://support.microsoft.com/en-us/windows/windows-update-faq-8a903416-6f45-0718-f5c7-375e92dddeb2", + "companyId": "microsoft", + "source": "AdGuard" + }, + "yandex_appmetrica": { + "name": "Yandex AppMetrica", + "categoryId": 101, + "url": "https://appmetrica.yandex.com/", + "companyId": "yandex", + "source": "AdGuard" } }, "trackerDomains": { @@ -23698,53 +23911,190 @@ "zwaar.net": "zwaar", "zwaar.org": "zwaar", "extend.tv": "zypmedia", - "slack.com": "slack", - "slackb.com": "slack", - "slack-edge.com": "slack", - "slack-imgs.com": "slack", + "adtidy.org": "adguard", + "agrd.io": "adguard", "adguard.app": "adguard", "adguard.io": "adguard", "adguard.org": "adguard", - "adguard-dns.com": "adguard", - "adguard-dns.io": "adguard", - "adguard-vpn.com": "adguard", - "adguardvpn.com": "adguard", - "adguard-vpn.online": "adguard", - "nflximg.com": "netflix", - "element.io": "element", - "riot.im": "element", + "adguard-dns.com": "adguard_dns", + "adguard-dns.io": "adguard_dns", + "adguardvpn.com": "adguard_vpn", + "adguard-vpn.com": "adguard_vpn", + "adguard-vpn.online": "adguard_vpn", + "adjust.net.in": "adjust", + "adj.st": "adjust", + "adjust.io": "adjust", + "adjust.world": "adjust", + "apptrace.com": "adjust", "akadns.net": "akamai_technologies", "akamaiedge.net": "akamai_technologies", + "akaquill.net": "akamai_technologies", + "aliapp.org": "alibaba.com", + "alibabachengdun.com": "alibaba.com", + "alibabausercontent.com": "alibaba.com", + "aliexpress.com": "alibaba.com", + "alikunlun.com": "alibaba.com", + "aliyuncs.com": "alibaba.com", + "alibabacloud.com": "alibaba_cloud", + "alibabadns.com": "alibaba_cloud", + "aliyun.com": "alibaba_cloud", + "ucweb.com": "alibaba_ucbrowser", + "alipayobjects.com": "alipay.com", + "amazoncrl.com": "amazon", + "aamazoncognito.com": "amazon", + "amazonbrowserapp.es": "amazon", + "amazonbrowserapp.co.uk": "amazon", + "amazon.sa": "amazon", + "amazon.nl": "amazon", + "amazon.in": "amazon", + "amazon.com.mx": "amazon", + "amazon.com.au": "amazon", + "amazon-corp.com": "amazon", + "a2z.com": "amazon", + "amazontrust.com": "amazon_cdn", + "associates-amazon.com": "amazon_cdn", + "amazonpay.in": "amazon_payments", + "amazonvideo.com": "amazon_video", + "taobao.com": "taobao", + "appcenter.ms": "appcenter", + "iadsdk.apple.com": "apple_ads", + "me.com": "apple", "apple.news": "apple", "apple-dns.net": "apple", "aaplimg.com": "apple", "icloud.com": "apple", + "itunes.com": "apple", "icloud-content.com": "apple", "mzstatic.com": "apple", - "matrix.org": "matrix", - "l-msedge.net": "microsoft", - "iadsdk.apple.com": "apple_ads", - "showrss.info": "showrss", - "solaredge.com": "solaredge", - "crashlytics.com": "crashlytics", - "flurry.com": "flurry", - "hockeyapp.net": "hockeyapp", - "app-measurement.com": "firebase", - "appmetrica.yandex.com": "yandex_appmetrica", - "letsencrypt.org": "lets_encrypt", - "lencr.org": "lets_encrypt", - "mobileapptracking.com": "branch", - "plex.tv": "plex", - "plex.direct": "plex", - "edgecastcdn.net": "markmonitor", - "appcenter.ms": "appcenter", - "unityads.unity3d.com": "unity_ads", + "cdn-apple.com": "apple", + "apple-mapkit.com": "apple", + "icons.axm-usercontent-apple.com": "apple", + "apple-cloudkit.com": "apple", + "apzones.com": "apple", + "apple-livephotoskit.com": "apple", + "safebrowsing.apple": "apple", + "safebrowsing.g.applimg.com": "apple", + "applvn.com": "applovin", + "applovin.com": "applovin", + "blob.core.windows.net": "azure_blob_storage", "azure.com": "azure", "trafficmanager.net": "azure", - "hotmail.com": "outlook", + "bitwarden.com": "bitwarden", + "mobileapptracking.com": "branch", "bttn.io": "button", + "cloudflare-dns.com": "cloudflare", + "crashlytics.com": "crashlytics", + "phicdn.net": "digicert_trust_seal", + "alphacdn.net": "edgio", + "edg.io": "edgio", + "edgecast.com": "edgio", + "edgecastcdn.net": "edgio", + "edgecastdns.net": "edgio", + "sigmacdn.net": "edgio", + "element.io": "element", + "riot.im": "element", + "app-measurement.com": "firebase", + "flipboard.com": "flipboard", + "flurry.com": "flurry", + "ghcr.io": "github", + "github.dev": "github", + "gmail.com": "gmail", + "googlehosted.com": "google_appspot", + "gvt1.com": "google_servers", + "gvt2.com": "google_servers", + "gvt3.com": "google_servers", "pki.goog": "google_trust_services", + "hockeyapp.net": "hockeyapp", + "kik.com": "kik", + "apikik.com": "kik", + "kik-live.com": "kik", + "slatic.net": "lazada", + "lencr.org": "lets_encrypt", + "letsencrypt.org": "lets_encrypt", + "lgsmartad.com": "lgtv", + "lgtvcommon.com": "lgtv", + "lgtvsdp.com": "lgtv", + "lge.com": "lgtv", + "lg.com": "lgtv", + "markmonitor.com": "markmonitor", + "matrix.org": "matrix", + "medialab.la": "medialab", + "media-lab.ai": "medialab", + "mega.co.nz": "meganz", + "mega.io": "meganz", + "mega.nz": "meganz", + "e-msedge.net": "msedge", + "l-msedge.net": "msedge", + "firefox.com": "mozilla", + "mozaws.net": "mozilla", + "mozgcp.net": "mozilla", + "mozilla.com": "mozilla", + "mozilla.net": "mozilla", + "mozilla.org": "mozilla", + "nflximg.com": "netflix", + "nab.com": "nab", + "nab.com.au": "nab", + "nab.net": "nab", + "nabgroup.com": "nab", + "national.com.au": "nab", + "nationalaustraliabank.com.au": "nab", + "nationalbank.com.au": "nab", + "notion.so": "notion", + "ntp.org": "ntppool", + "ntppool.org": "ntppool", + "oppomobile.com": "oppo", + "heytapmobi.com": "oppo", + "heytapmobile.com": "oppo", + "heytapdl.com": "oppo", + "allawnos.com": "oppo", + "allawntech.com": "oppo", + "hotmail.com": "outlook", + "outlook.com": "outlook", + "oztam.com.au": "oztam", + "plex.tv": "plex", + "plex.direct": "plex", "xtracloud.net": "qualcomm", - "qualcomm.com": "qualcomm" + "qualcomm.com": "qualcomm", + "recaptcha.net": "recaptcha", + "sectigo.com": "sectigo", + "showrss.info": "showrss", + "similarweb.io": "similarweb", + "similarweb.com": "similarweb", + "slack.com": "slack", + "slackb.com": "slack", + "slack-edge.com": "slack", + "slack-imgs.com": "slack", + "addlive.io": "snap", + "feelinsonice.com": "snap", + "sc-cdn.net": "snap", + "sc-corp.net": "snap", + "sc-gw.com": "snap", + "sc-jpl.com": "snap", + "sc-prod.net": "snap", + "snap-dev.net": "snap", + "snapads.com": "snap", + "snapkit.com": "snap", + "solaredge.com": "solaredge", + "telstra.com.au": "telstra", + "telstra.com": "telstra", + "usertrust.com": "trustlogo", + "unityads.unity3d.com": "unity_ads", + "exp-tas.com": "vscode", + "vscode-unpkg.net": "vscode", + "v0cdn.net": "vscode", + "vscode-cdn.net": "vscode", + "whatsapp.net": "whatsapp", + "whatsapp.com": "whatsapp", + "maps.windows.com": "windows_maps", + "client.wns.windows.com": "windows_notifications", + "time.windows.com": "windows_time", + "windowsupdate.com": "windowsupdate", + "ya.ru": "yandex", + "yandex.by": "yandex", + "yandex.com": "yandex", + "yandex.com.tr": "yandex", + "yandex.fr": "yandex", + "yandex.kz": "yandex", + "appmetrica.yandex.com": "yandex_appmetrica" } } \ No newline at end of file diff --git a/client/src/helpers/trackers/whotracksme.json b/client/src/helpers/trackers/whotracksme.json deleted file mode 100644 index bc8e7fed..00000000 --- a/client/src/helpers/trackers/whotracksme.json +++ /dev/null @@ -1,23534 +0,0 @@ -{ - "timeUpdated": "2022-10-15T00:14:03.765Z", - "categories": { - "0": "audio_video_player", - "1": "comments", - "2": "customer_interaction", - "3": "pornvertising", - "4": "advertising", - "5": "essential", - "6": "site_analytics", - "7": "social_media", - "8": "misc", - "9": "cdn", - "10": "hosting", - "11": "unknown", - "12": "extensions", - "13": "email", - "14": "consent", - "15": "telemetry" - }, - "trackers": { - "163": { - "name": "163", - "categoryId": 4, - "url": "http://www.163.com/", - "companyId": "163" - }, - "1000mercis": { - "name": "1000mercis", - "categoryId": 6, - "url": "http://www.1000mercis.com/", - "companyId": "1000mercis" - }, - "161media": { - "name": "Platform161", - "categoryId": 4, - "url": "https://platform161.com/", - "companyId": "platform161" - }, - "1822direkt.de": { - "name": "1822direkt.de", - "categoryId": 8, - "url": "https://www.1822direkt.de/", - "companyId": null - }, - "1dmp.io": { - "name": "1DMP", - "categoryId": 4, - "url": "https://1dmp.io/", - "companyId": "1dmp" - }, - "1plusx": { - "name": "1plusX", - "categoryId": 6, - "url": "https://www.1plusx.com/", - "companyId": "1plusx" - }, - "1sponsor": { - "name": "1sponsor", - "categoryId": 4, - "url": "http://fr.1sponsor.com/", - "companyId": "1sponsor" - }, - "1tag": { - "name": "1tag", - "categoryId": 6, - "url": "http://www.dentsuaegisnetwork.com/", - "companyId": "dentsu_aegis_network" - }, - "1und1": { - "name": "1&1 Internet", - "categoryId": 8, - "url": null, - "companyId": null - }, - "24-ads.com": { - "name": "24-ADS GmbH", - "categoryId": 4, - "url": "http://www.24-ads.com/", - "companyId": null - }, - "24_7": { - "name": "[24]7", - "categoryId": 2, - "url": "http://www.247-inc.com/", - "companyId": "24_7" - }, - "24log": { - "name": "24log", - "categoryId": 6, - "url": "http://24log.ru/", - "companyId": "24log" - }, - "24smi": { - "name": "24СМИ", - "categoryId": 8, - "url": "https://24smi.org/", - "companyId": null - }, - "2leep": { - "name": "2leep", - "categoryId": 4, - "url": "http://2leep.com/", - "companyId": "2leep" - }, - "33across": { - "name": "33Across", - "categoryId": 4, - "url": "http://33across.com/", - "companyId": "33across" - }, - "3dstats": { - "name": "3DStats", - "categoryId": 6, - "url": "http://www.3dstats.com/", - "companyId": "3dstats" - }, - "4chan": { - "name": "4Chan", - "categoryId": 8, - "url": "https://www.4chan.org/", - "companyId": null - }, - "4finance_com": { - "name": "4finance.com", - "categoryId": 2, - "url": "http://4finance.com/", - "companyId": null - }, - "4w_marketplace": { - "name": "4w Marketplace", - "categoryId": 4, - "url": "http://www.4wmarketplace.com/", - "companyId": "4w_marketplace" - }, - "500friends": { - "name": "500friends", - "categoryId": 2, - "url": "http://500friends.com/", - "companyId": "500friends" - }, - "51.la": { - "name": "51.La", - "categoryId": 6, - "url": "http://www.51.la/", - "companyId": "51.la" - }, - "5min_media": { - "name": "5min Media", - "categoryId": 0, - "url": "http://www.5min.com/", - "companyId": "verizon" - }, - "6sense": { - "name": "6Sense", - "categoryId": 6, - "url": "http://home.grepdata.com", - "companyId": "6sense" - }, - "77tracking": { - "name": "77Tracking", - "categoryId": 6, - "url": "http://www.77agency.com/", - "companyId": "77agency" - }, - "7tv.de": { - "name": "7tv.de", - "categoryId": 0, - "url": "https://www.7tv.de/", - "companyId": null - }, - "888media": { - "name": "888media", - "categoryId": 4, - "url": "http://888media.net/", - "companyId": "888_media" - }, - "8digits": { - "name": "8digits", - "categoryId": 6, - "url": "http://8digits.com/", - "companyId": "8digits" - }, - "94j7afz2nr.xyz": { - "name": "94j7afz2nr.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "99stats": { - "name": "99stats", - "categoryId": 6, - "url": "http://www.99stats.com/", - "companyId": "99stats" - }, - "a3cloud_net": { - "name": "a3cloud.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "a8": { - "name": "A8", - "categoryId": 4, - "url": "http://www.a8.net/", - "companyId": "a8" - }, - "aaxads.com": { - "name": "Acceptable Ads Exchange", - "categoryId": 4, - "url": "https://aax.media/", - "companyId": null - }, - "ab_tasty": { - "name": "AB Tasty", - "categoryId": 6, - "url": "https://en.abtasty.com", - "companyId": "ab_tasty" - }, - "ablida": { - "name": "ablida", - "categoryId": 4, - "url": "https://www.ablida.de/", - "companyId": null - }, - "accelia": { - "name": "Accelia", - "categoryId": 4, - "url": "http://www.durasite.net/", - "companyId": "accelia" - }, - "accengage": { - "name": "Accengage", - "categoryId": 4, - "url": "https://www.accengage.com/", - "companyId": "accengage" - }, - "accessanalyzer": { - "name": "AccessAnalyzer", - "categoryId": 6, - "url": "http://ax.xrea.com/", - "companyId": "accessanalyzer" - }, - "accesstrade": { - "name": "AccessTrade", - "categoryId": 4, - "url": "http://accesstrade.net/", - "companyId": "accesstrade" - }, - "accord_group": { - "name": "Accord Group", - "categoryId": 4, - "url": "http://www.accordgroup.co.uk/", - "companyId": "accord_group" - }, - "accordant_media": { - "name": "Accordant Media", - "categoryId": 4, - "url": "http://www.accordantmedia.com/", - "companyId": "accordant_media" - }, - "accuen_media": { - "name": "Accuen Media", - "categoryId": 4, - "url": "http://www.accuenmedia.com/", - "companyId": "accuen_media" - }, - "acestream.net": { - "name": "ActStream", - "categoryId": 12, - "url": "http://www.acestream.org/", - "companyId": null - }, - "acint.net": { - "name": "Artificial Computation Intelligence", - "categoryId": 6, - "url": "https://www.acint.net/", - "companyId": "acint" - }, - "acloudimages": { - "name": "Acloudimages", - "categoryId": 4, - "url": "http://adsterra.com", - "companyId": "adsterra" - }, - "acpm.fr": { - "name": "ACPM", - "categoryId": 6, - "url": "http://www.acpm.fr/", - "companyId": null - }, - "acquia.com": { - "name": "Acquia", - "categoryId": 6, - "url": "https://www.acquia.com/", - "companyId": null - }, - "acrweb": { - "name": "ACRWEB", - "categoryId": 7, - "url": "http://www.ziyu.net/", - "companyId": "acrweb" - }, - "actionpay": { - "name": "actionpay", - "categoryId": 4, - "url": "http://actionpay.ru/", - "companyId": "actionpay" - }, - "active_agent": { - "name": "Active Agent", - "categoryId": 4, - "url": "http://www.active-agent.com/", - "companyId": "active_agent" - }, - "active_campaign": { - "name": "Active Campaign", - "categoryId": 6, - "url": "https://www.activecampaign.com", - "companyId": "active_campaign" - }, - "active_performance": { - "name": "Active Performance", - "categoryId": 4, - "url": "http://www.active-performance.de/", - "companyId": "active_performance" - }, - "activeconversion": { - "name": "ActiveConversion", - "categoryId": 4, - "url": "http://www.activeconversion.com/", - "companyId": "activeconversion" - }, - "activecore": { - "name": "activecore", - "categoryId": 6, - "url": "http://activecore.jp/", - "companyId": "activecore" - }, - "activemeter": { - "name": "ActiveMeter", - "categoryId": 4, - "url": "http://www.activemeter.com/", - "companyId": "activeconversion" - }, - "activengage": { - "name": "ActivEngage", - "categoryId": 2, - "url": "http://www.activengage.com", - "companyId": "activengage" - }, - "acton": { - "name": "Act-On Beacon", - "categoryId": 4, - "url": "http://www.actonsoftware.com/", - "companyId": "act-on" - }, - "acuity_ads": { - "name": "Acuity Ads", - "categoryId": 4, - "url": "http://www.acuityads.com/", - "companyId": "acuity_ads" - }, - "acxiom": { - "name": "Acxiom", - "categoryId": 4, - "url": "http://www.acxiom.com", - "companyId": "acxiom" - }, - "ad-blocker.org": { - "name": "ad-blocker.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ad-center": { - "name": "Ad-Center", - "categoryId": 6, - "url": "http://www.ad-center.com", - "companyId": "ad-center" - }, - "ad-delivery.net": { - "name": "ad-delivery.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ad-sys": { - "name": "Ad-Sys", - "categoryId": 4, - "url": "http://www.ad-sys.com/", - "companyId": "ad-sys" - }, - "ad.agio": { - "name": "Ad.agio", - "categoryId": 4, - "url": "http://neodatagroup.com/", - "companyId": "neodata" - }, - "ad2click": { - "name": "Ad2Click", - "categoryId": 4, - "url": "http://www.ad2click.com/", - "companyId": "ad2click_media" - }, - "ad2games": { - "name": "ad2games", - "categoryId": 4, - "url": "http://web.ad2games.com/", - "companyId": "ad2games" - }, - "ad360": { - "name": "Ad360", - "categoryId": 4, - "url": "http://ad360.vn", - "companyId": "ad360" - }, - "ad4game": { - "name": "ad4game", - "categoryId": 4, - "url": "http://www.ad4game.com/", - "companyId": "ad4game" - }, - "ad4mat": { - "name": "ad4mat", - "categoryId": 4, - "url": "http://ad4mat.info", - "companyId": "ad4mat" - }, - "ad6media": { - "name": "ad6media", - "categoryId": 4, - "url": "https://www.ad6media.fr/", - "companyId": "ad6media" - }, - "ad_decisive": { - "name": "Ad Decisive", - "categoryId": 4, - "url": "http://www.lagardere-global-advertising.com/", - "companyId": "lagardere_advertising" - }, - "ad_dynamo": { - "name": "Ad Dynamo", - "categoryId": 4, - "url": "http://www.addynamo.com/", - "companyId": "ad_dynamo" - }, - "ad_ebis": { - "name": "AD EBiS", - "categoryId": 4, - "url": "http://www.ebis.ne.jp/en/", - "companyId": "ad_ebis" - }, - "ad_lightning": { - "name": "Ad Lightning", - "categoryId": 4, - "url": "https://www.adlightning.com/", - "companyId": "ad_lightning" - }, - "ad_magnet": { - "name": "Ad Magnet", - "categoryId": 4, - "url": "http://www.admagnet.com/", - "companyId": "ad_magnet" - }, - "ad_spirit": { - "name": "Ad Spirit", - "categoryId": 4, - "url": "http://www.adspirit.de", - "companyId": "adspirit" - }, - "adac_de": { - "name": "adac.de", - "categoryId": 8, - "url": "http://adac.de/", - "companyId": null - }, - "adacado": { - "name": "Adacado", - "categoryId": 4, - "url": "http://www.adacado.com/", - "companyId": "adacado" - }, - "adadyn": { - "name": "Adadyn", - "categoryId": 4, - "url": "http://ozonemedia.com/index.html", - "companyId": "adadyn" - }, - "adality_gmbh": { - "name": "adality GmbH", - "categoryId": 4, - "url": "https://www.arvato.com/", - "companyId": "arvato" - }, - "adalliance.io": { - "name": "Ad Alliance", - "categoryId": 4, - "url": "https://www.ad-alliance.de/", - "companyId": null - }, - "adalyser.com": { - "name": "Adalyser", - "categoryId": 6, - "url": "https://www.adalyser.com/", - "companyId": "onesoon" - }, - "adaos": { - "name": "ADAOS", - "categoryId": 4, - "url": "http://www.24-interactive.com", - "companyId": "24_interactive" - }, - "adap.tv": { - "name": "Adap.tv", - "categoryId": 4, - "url": "http://www.adap.tv/", - "companyId": "verizon" - }, - "adaptiveblue_smartlinks": { - "name": "AdaptiveBlue SmartLinks", - "categoryId": 2, - "url": "http://www.adaptiveblue.com/smartlinks.html", - "companyId": "telfie" - }, - "adara_analytics": { - "name": "ADARA Analytics", - "categoryId": 4, - "url": "http://www.adaramedia.com/", - "companyId": "adara_analytics" - }, - "adasia_holdings": { - "name": "AdAsia Holdings", - "categoryId": 4, - "url": "https://adasiaholdings.com/", - "companyId": "adasia_holdings" - }, - "adbetclickin.pink": { - "name": "adbetnet", - "categoryId": 4, - "url": "http://adbetnet.com/", - "companyId": null - }, - "adbetnet.com": { - "name": "adbetnet", - "categoryId": 4, - "url": "https://adbetnet.com/", - "companyId": null - }, - "adblade.com": { - "name": "Adblade", - "categoryId": 4, - "url": "https://adblade.com/", - "companyId": "adblade" - }, - "adbooth": { - "name": "Adbooth", - "categoryId": 4, - "url": "http://www.adbooth.com/", - "companyId": "adbooth_media_group" - }, - "adbox": { - "name": "AdBox", - "categoryId": 4, - "url": "http://www.adbox.lv/", - "companyId": "adbox" - }, - "adbrain": { - "name": "Adbrain", - "categoryId": 6, - "url": "https://www.adbrain.com/", - "companyId": "adbrain" - }, - "adbrite": { - "name": "AdBrite", - "categoryId": 4, - "url": "http://www.adbrite.com/", - "companyId": "centro" - }, - "adbull": { - "name": "AdBull", - "categoryId": 4, - "url": "http://www.adbull.com/", - "companyId": "adbull" - }, - "adbutler": { - "name": "AdButler", - "categoryId": 4, - "url": "https://www.adbutler.com/d", - "companyId": "sparklit_networks" - }, - "adc_media": { - "name": "ad:C media", - "categoryId": 4, - "url": "http://www.adcmedia.de/en/", - "companyId": "ad:c_media" - }, - "adcash": { - "name": "Adcash", - "categoryId": 4, - "url": "http://www.adcash.com", - "companyId": "adcash" - }, - "adchakra": { - "name": "AdChakra", - "categoryId": 6, - "url": "http://adchakra.com/", - "companyId": "adchakra" - }, - "adchina": { - "name": "AdChina", - "categoryId": 4, - "url": "http://www.adchina.com/", - "companyId": "alibaba" - }, - "adcito": { - "name": "Adcito", - "categoryId": 4, - "url": "http://adcito.com/", - "companyId": "adcito" - }, - "adclear": { - "name": "AdClear", - "categoryId": 4, - "url": "http://www.adclear.de/en/home.html", - "companyId": "adclear" - }, - "adclerks": { - "name": "Adclerks", - "categoryId": 4, - "url": "https://adclerks.com/", - "companyId": "adclerks" - }, - "adclickmedia": { - "name": "AdClickMedia", - "categoryId": 4, - "url": "http://www.adclickmedia.com/", - "companyId": "adclickmedia" - }, - "adclickzone": { - "name": "AdClickZone", - "categoryId": 4, - "url": "http://www.adclickzone.com/", - "companyId": "adclickzone" - }, - "adcloud": { - "name": "adcloud", - "categoryId": 4, - "url": "https://ad-cloud.jp", - "companyId": "adcloud" - }, - "adcolony": { - "name": "AdColony", - "categoryId": 4, - "url": "thttp://www.admarvel.com/", - "companyId": "adcolony" - }, - "adconion": { - "name": "Adconion", - "categoryId": 4, - "url": "http://www.adconion.com/", - "companyId": "singtel" - }, - "adcrowd": { - "name": "Adcrowd", - "categoryId": 4, - "url": "https://www.adcrowd.com", - "companyId": "adcrowd" - }, - "adcurve": { - "name": "AdCurve", - "categoryId": 4, - "url": "http://www.shop2market.com/", - "companyId": "adcurve" - }, - "add_to_calendar": { - "name": "Add To Calendar", - "categoryId": 2, - "url": "http://addtocalendar.com/", - "companyId": "addtocalendar" - }, - "addaptive": { - "name": "Addaptive", - "categoryId": 4, - "url": "http://www.datapointmedia.com/", - "companyId": "addaptive" - }, - "addefend": { - "name": "AdDefend", - "categoryId": 4, - "url": "https://www.addefend.com/", - "companyId": null - }, - "addfreestats": { - "name": "AddFreeStats", - "categoryId": 6, - "url": "http://www.addfreestats.com/", - "companyId": "3dstats" - }, - "addinto": { - "name": "AddInto", - "categoryId": 2, - "url": "http://www.addinto.com/", - "companyId": "addinto" - }, - "addshoppers": { - "name": "AddShoppers", - "categoryId": 7, - "url": "http://www.addshoppers.com/", - "companyId": "addshoppers" - }, - "addthis": { - "name": "AddThis", - "categoryId": 4, - "url": "http://www.addthis.com/", - "companyId": "oracle" - }, - "addvalue": { - "name": "Addvalue", - "categoryId": 6, - "url": "http://www.addvalue.de/en/", - "companyId": "addvalue.de" - }, - "addyon": { - "name": "AddyON", - "categoryId": 4, - "url": "http://www.addyon.com/homepage.php", - "companyId": "addyon" - }, - "adeasy": { - "name": "AdEasy", - "categoryId": 4, - "url": "http://www.adeasy.ru/", - "companyId": "adeasy" - }, - "adelphic": { - "name": "Adelphic", - "categoryId": 6, - "url": "http://www.adelphic.com/", - "companyId": "adelphic" - }, - "adengage": { - "name": "AdEngage", - "categoryId": 4, - "url": "http://www.adengage.com", - "companyId": "synacor" - }, - "adespresso": { - "name": "AdEspresso", - "categoryId": 4, - "url": "http://adespresso.com", - "companyId": "adespresso" - }, - "adexcite": { - "name": "AdExcite", - "categoryId": 4, - "url": "http://adexcite.com", - "companyId": "adexcite" - }, - "adextent": { - "name": "AdExtent", - "categoryId": 4, - "url": "http://www.adextent.com/", - "companyId": "adextent" - }, - "adf.ly": { - "name": "AdF.ly", - "categoryId": 4, - "url": "http://adf.ly/", - "companyId": "adf.ly" - }, - "adfalcon": { - "name": "AdFalcon", - "categoryId": 4, - "url": "http://www.adfalcon.com/", - "companyId": "adfalcon" - }, - "adfocus": { - "name": "AdFocus", - "categoryId": 4, - "url": "http://adfoc.us/", - "companyId": "adfoc.us" - }, - "adforgames": { - "name": "AdForGames", - "categoryId": 4, - "url": "http://www.adforgames.com/", - "companyId": "adforgames" - }, - "adform": { - "name": "Adform", - "categoryId": 4, - "url": "http://www.adform.com", - "companyId": "adform" - }, - "adfox": { - "name": "AdFox", - "categoryId": 4, - "url": "http://adfox.ru", - "companyId": "yandex" - }, - "adfreestyle": { - "name": "adFreestyle", - "categoryId": 4, - "url": "http://www.adfreestyle.pl/", - "companyId": "adfreestyle" - }, - "adfront": { - "name": "AdFront", - "categoryId": 4, - "url": "http://buysellads.com/", - "companyId": "buysellads.com" - }, - "adfrontiers": { - "name": "AdFrontiers", - "categoryId": 4, - "url": "http://www.adfrontiers.com/", - "companyId": "adfrontiers" - }, - "adgear": { - "name": "AdGear", - "categoryId": 4, - "url": "http://adgear.com/", - "companyId": "samsung" - }, - "adgebra": { - "name": "Adgebra", - "categoryId": 4, - "url": "https://adgebra.in/", - "companyId": "adgebra" - }, - "adgenie": { - "name": "adGENIE", - "categoryId": 4, - "url": "http://www.adgenie.co.uk/", - "companyId": "ve" - }, - "adgile": { - "name": "Adgile", - "categoryId": 4, - "url": "http://www.adgile.com/", - "companyId": "adgile_media" - }, - "adglare.net": { - "name": "Adglare", - "categoryId": 4, - "url": "https://www.adglare.com/", - "companyId": null - }, - "adglue": { - "name": "Adglue", - "categoryId": 4, - "url": "http://admans.de/de.html", - "companyId": "admans" - }, - "adgoal": { - "name": "adgoal", - "categoryId": 4, - "url": "http://www.adgoal.de/", - "companyId": "adgoal" - }, - "adgorithms": { - "name": "Adgorithms", - "categoryId": 4, - "url": "http://www.adgorithms.com/", - "companyId": "albert" - }, - "adgoto": { - "name": "ADGoto", - "categoryId": 4, - "url": "http://adgoto.com/", - "companyId": "adgoto" - }, - "adguard": { - "name": "Adguard", - "categoryId": 12, - "url": "https://adguard.com/", - "companyId": null - }, - "adhands": { - "name": "AdHands", - "categoryId": 4, - "url": "http://promo.adhands.ru/", - "companyId": "adhands" - }, - "adhese": { - "name": "Adhese", - "categoryId": 4, - "url": "http://adhese.com", - "companyId": "adhese" - }, - "adhitz": { - "name": "AdHitz", - "categoryId": 4, - "url": "http://www.adhitz.com/", - "companyId": "adhitz" - }, - "adhood": { - "name": "adhood", - "categoryId": 4, - "url": "http://www.adhood.com/", - "companyId": "adhood" - }, - "adify": { - "name": "Adify", - "categoryId": 4, - "url": "http://www.adify.com/", - "companyId": "cox_enterpries" - }, - "adikteev": { - "name": "Adikteev", - "categoryId": 4, - "url": "http://www.adikteev.com/", - "companyId": "adikteev" - }, - "adimpact": { - "name": "Adimpact", - "categoryId": 4, - "url": "http://www.adimpact.com/", - "companyId": "adimpact" - }, - "adinch": { - "name": "Adinch", - "categoryId": 4, - "url": "http://adinch.com/", - "companyId": "adinch" - }, - "adition": { - "name": "Adition", - "categoryId": 4, - "url": "http://en.adition.com/", - "companyId": "prosieben_sat1" - }, - "adjal": { - "name": "Adjal", - "categoryId": 4, - "url": "http://adjal.com/", - "companyId": "marketing_adjal" - }, - "adjs": { - "name": "ADJS", - "categoryId": 4, - "url": "https://github.com/widgital/adjs", - "companyId": "adjs" - }, - "adjug": { - "name": "AdJug", - "categoryId": 4, - "url": "http://www.adjug.com/", - "companyId": "adjug" - }, - "adjust": { - "name": "Adjust", - "categoryId": 6, - "url": "https://www.adjust.com/", - "companyId": "adjust" - }, - "adk2": { - "name": "adk2", - "categoryId": 4, - "url": "http://www.adk2.com/", - "companyId": "adk2_plymedia" - }, - "adklip": { - "name": "adklip", - "categoryId": 4, - "url": "http://adklip.com", - "companyId": "adklip" - }, - "adknowledge": { - "name": "Adknowledge", - "categoryId": 4, - "url": "http://www.adknowledge.com/", - "companyId": "adknowledge" - }, - "adkontekst": { - "name": "Adkontekst", - "categoryId": 4, - "url": "http://www.en.adkontekst.pl/", - "companyId": "adkontekst" - }, - "adkontekst.pl": { - "name": "Adkontekst", - "categoryId": 4, - "url": "http://netsprint.eu/", - "companyId": "netsprint" - }, - "adlabs": { - "name": "AdLabs", - "categoryId": 4, - "url": "https://www.adlabs.ru/", - "companyId": "adlabs" - }, - "adlantic": { - "name": "AdLantic", - "categoryId": 4, - "url": "http://www.adlantic.nl/", - "companyId": "adlantic_online_advertising" - }, - "adlantis": { - "name": "AdLantis", - "categoryId": 4, - "url": "http://www.adlantis.jp/", - "companyId": "adlantis" - }, - "adless": { - "name": "Adless", - "categoryId": 4, - "url": "https://www.adless.io/", - "companyId": "adless" - }, - "adlive_header_bidding": { - "name": "Adlive Header Bidding", - "categoryId": 4, - "url": "http://adlive.io/", - "companyId": "adlive" - }, - "adloox": { - "name": "Adloox", - "categoryId": 4, - "url": "http://www.adloox.com", - "companyId": "adloox" - }, - "admachine": { - "name": "AdMachine", - "categoryId": 4, - "url": "https://admachine.co/", - "companyId": null - }, - "adman": { - "name": "ADMAN", - "categoryId": 4, - "url": "http://www.adman.gr/", - "companyId": "adman" - }, - "adman_media": { - "name": "ADman Media", - "categoryId": 4, - "url": "http://www.admanmedia.com/", - "companyId": "ad_man_media" - }, - "admantx.com": { - "name": "ADmantX", - "categoryId": 4, - "url": "http://www.admantx.com/", - "companyId": "expert_system_spa" - }, - "admaster": { - "name": "AdMaster", - "categoryId": 4, - "url": "http://admaster.net", - "companyId": "admaster" - }, - "admaster.cn": { - "name": "AdMaster.cn", - "categoryId": 4, - "url": "http://www.admaster.com.cn/", - "companyId": "admaster" - }, - "admatic": { - "name": "Admatic", - "categoryId": 4, - "url": "http://www.admatic.com.tr/#1page", - "companyId": "admatic" - }, - "admatrix": { - "name": "Admatrix", - "categoryId": 4, - "url": "https://admatrix.jp/login#block01", - "companyId": "admatrix" - }, - "admax": { - "name": "Admax", - "categoryId": 4, - "url": "http://www.admaxnetwork.com/index.php", - "companyId": "komli" - }, - "admaxim": { - "name": "AdMaxim", - "categoryId": 4, - "url": "http://admaxim.com/", - "companyId": "admaxim" - }, - "admaya": { - "name": "Admaya", - "categoryId": 4, - "url": "http://www.admaya.in/", - "companyId": "admaya" - }, - "admedia": { - "name": "AdMedia", - "categoryId": 4, - "url": "http://admedia.com/", - "companyId": "admedia" - }, - "admedo_com": { - "name": "Admedo", - "categoryId": 4, - "url": "http://admedo.com/", - "companyId": "admedo" - }, - "admeira.ch": { - "name": "AdMeira", - "categoryId": 4, - "url": "http://admeira.ch/", - "companyId": "admeira" - }, - "admeld": { - "name": "AdMeld", - "categoryId": 4, - "url": "http://www.admeld.com", - "companyId": "google" - }, - "admeo": { - "name": "Admeo", - "categoryId": 4, - "url": "http://admeo.ru/", - "companyId": "admeo.ru" - }, - "admeta": { - "name": "Admeta", - "categoryId": 4, - "url": "http://www.admeta.com/", - "companyId": "admeta" - }, - "admicro": { - "name": "AdMicro", - "categoryId": 4, - "url": "http://www.admicro.vn/", - "companyId": "admicro" - }, - "admitad.com": { - "name": "Admitad", - "categoryId": 4, - "url": "https://www.admitad.com/en/#", - "companyId": "admitad" - }, - "admixer.net": { - "name": "Admixer", - "categoryId": 4, - "url": "https://admixer.net/", - "companyId": "admixer" - }, - "admized": { - "name": "ADMIZED", - "categoryId": 8, - "url": null, - "companyId": null - }, - "admo.tv": { - "name": "Admo.tv", - "categoryId": 4, - "url": "https://admo.tv/", - "companyId": "admo.tv" - }, - "admob": { - "name": "AdMob", - "categoryId": 4, - "url": "http://www.admob.com/", - "companyId": "google" - }, - "admost": { - "name": "adMOST", - "categoryId": 4, - "url": "http://www.admost.com/", - "companyId": "admost" - }, - "admotion": { - "name": "Admotion", - "categoryId": 4, - "url": "http://www.admotionus.com/", - "companyId": "admotion" - }, - "admulti": { - "name": "ADmulti", - "categoryId": 4, - "url": "http://admulti.com", - "companyId": "admulti" - }, - "adnegah": { - "name": "Adnegah", - "categoryId": 4, - "url": "https://adnegah.net/", - "companyId": "adnegah" - }, - "adnet": { - "name": "Adnet", - "categoryId": 4, - "url": "http://www.adnet.vn/", - "companyId": "adnet" - }, - "adnet.de": { - "name": "adNET.de", - "categoryId": 4, - "url": "http://www.adnet.de", - "companyId": "adnet.de" - }, - "adnet_media": { - "name": "Adnet Media", - "categoryId": 4, - "url": "http://www.adnetmedia.lt/", - "companyId": "adnet_media" - }, - "adnetwork.net": { - "name": "AdNetwork.net", - "categoryId": 4, - "url": "http://www.adnetwork.net/", - "companyId": "adnetwork.net" - }, - "adnetworkperformance.com": { - "name": "adnetworkperformance.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "adnexio": { - "name": "AdNexio", - "categoryId": 4, - "url": "http://adnexio.com/", - "companyId": "adnexio" - }, - "adnium.com": { - "name": "Adnium", - "categoryId": 4, - "url": "https://adnium.com/", - "companyId": null - }, - "adnologies": { - "name": "Adnologies", - "categoryId": 4, - "url": "http://www.adnologies.com/", - "companyId": "adnologies_gmbh" - }, - "adnow": { - "name": "Adnow", - "categoryId": 4, - "url": "http://adnow.com/", - "companyId": "adnow" - }, - "adnymics": { - "name": "Adnymics", - "categoryId": 4, - "url": "http://adnymics.com/en/", - "companyId": "adnymics" - }, - "adobe_audience_manager": { - "name": "Adobe Audience Manager", - "categoryId": 4, - "url": "http://www.demdex.com/", - "companyId": "adobe" - }, - "adobe_dynamic_media": { - "name": "Adobe Dynamic Media", - "categoryId": 4, - "url": "http://www.adobe.com/", - "companyId": "adobe" - }, - "adobe_dynamic_tag_management": { - "name": "Adobe Dynamic Tag Management", - "categoryId": 5, - "url": "https://dtm.adobe.com/sign_in", - "companyId": "adobe" - }, - "adobe_experience_cloud": { - "name": "Adobe Experience Cloud", - "categoryId": 6, - "url": "https://www.adobe.com/experience-cloud.html", - "companyId": "adobe" - }, - "adobe_login": { - "name": "Adobe Login", - "categoryId": 2, - "url": "https://www.adobe.com/", - "companyId": "adobe" - }, - "adobe_tagmanager": { - "name": "Adobe TagManager", - "categoryId": 4, - "url": "https://www.adobe.com/", - "companyId": "adobe" - }, - "adobe_test_and_target": { - "name": "Adobe Target", - "categoryId": 4, - "url": "https://www.adobe.com/marketing/target.html", - "companyId": "adobe" - }, - "adobe_typekit": { - "name": "Adobe Typekit", - "categoryId": 5, - "url": "https://www.adobe.com/", - "companyId": "adobe" - }, - "adocean": { - "name": "AdOcean", - "categoryId": 4, - "url": "http://adocean.cz/en", - "companyId": "adocean" - }, - "adometry": { - "name": "Adometry", - "categoryId": 4, - "url": "http://www.adometry.com/", - "companyId": "google" - }, - "adomik": { - "name": "Adomik", - "categoryId": 4, - "url": null, - "companyId": null - }, - "adon_network": { - "name": "AdOn Network", - "categoryId": 4, - "url": "http://www.adonnetwork.com/", - "companyId": "adon_network" - }, - "adonion": { - "name": "AdOnion", - "categoryId": 4, - "url": "http://www.adonion.com/", - "companyId": "adonion" - }, - "adonly": { - "name": "AdOnly", - "categoryId": 4, - "url": "https://gloadmarket.com/", - "companyId": "adonly" - }, - "adoperator": { - "name": "AdOperator", - "categoryId": 4, - "url": "http://www.adoperator.com/start/", - "companyId": "adoperator" - }, - "adoric": { - "name": "Adoric", - "categoryId": 6, - "url": "https://adoric.com/", - "companyId": "adoric" - }, - "adorika": { - "name": "Adorika", - "categoryId": 4, - "url": "http://www.adorika.com/", - "companyId": "adorika" - }, - "adosia": { - "name": "Adosia", - "categoryId": 4, - "url": "https://adosia.com", - "companyId": "adosia" - }, - "adotmob.com": { - "name": "Adotmob", - "categoryId": 4, - "url": "https://adotmob.com/", - "companyId": "adotmob" - }, - "adotube": { - "name": "AdoTube", - "categoryId": 4, - "url": "http://www.adotube.com", - "companyId": "exponential_interactive" - }, - "adparlor": { - "name": "AdParlor", - "categoryId": 4, - "url": "http://www.adparlor.com/", - "companyId": "fluent" - }, - "adpartner": { - "name": "adpartner", - "categoryId": 4, - "url": "http://adpartner.pro/", - "companyId": "adpartner" - }, - "adpeeps": { - "name": "Ad Peeps", - "categoryId": 4, - "url": "http://www.adpeeps.com/", - "companyId": "ad_peeps" - }, - "adperfect": { - "name": "AdPerfect", - "categoryId": 4, - "url": "http://www.adperfect.com/", - "companyId": "adperfect" - }, - "adperium": { - "name": "AdPerium", - "categoryId": 4, - "url": "http://www.adperium.com/", - "companyId": "adperium" - }, - "adpilot": { - "name": "AdPilot", - "categoryId": 4, - "url": "http://www.adpilotgroup.com/", - "companyId": "adpilot" - }, - "adplan": { - "name": "AdPlan", - "categoryId": 4, - "url": "http://www.adplan.ne.jp/", - "companyId": "adplan" - }, - "adplus": { - "name": "ADPLUS", - "categoryId": 4, - "url": "http://www.adplus.co.id/", - "companyId": "adplus" - }, - "adprofy": { - "name": "AdProfy", - "categoryId": 4, - "url": "http://adprofy.com/", - "companyId": "adprofy" - }, - "adpulse": { - "name": "AdPulse", - "categoryId": 4, - "url": "http://adpulse.ir/", - "companyId": "adpulse.ir" - }, - "adpv": { - "name": "Adpv", - "categoryId": 4, - "url": "http://www.adpv.com/", - "companyId": "adpv" - }, - "adreactor": { - "name": "AdReactor", - "categoryId": 4, - "url": "http://www.adreactor.com/", - "companyId": "adreactor" - }, - "adrecord": { - "name": "Adrecord", - "categoryId": 4, - "url": "http://www.adrecord.com/", - "companyId": "adrecord" - }, - "adrecover": { - "name": "AdRecover", - "categoryId": 4, - "url": "https://www.adrecover.com/", - "companyId": "adpushup" - }, - "adresult": { - "name": "ADResult", - "categoryId": 4, - "url": "http://www.adresult.jp/", - "companyId": "adresult" - }, - "adriver": { - "name": "AdRiver", - "categoryId": 4, - "url": "http://www.adriver.ru/", - "companyId": "ad_river" - }, - "adroll": { - "name": "AdRoll", - "categoryId": 4, - "url": "https://www.adroll.com/", - "companyId": "adroll" - }, - "adroll_pixel": { - "name": "AdRoll Pixel", - "categoryId": 4, - "url": "https://www.adroll.com/", - "companyId": "adroll" - }, - "adroll_roundtrip": { - "name": "AdRoll Roundtrip", - "categoryId": 4, - "url": "https://www.adroll.com/", - "companyId": "adroll" - }, - "adrom": { - "name": "adRom", - "categoryId": 4, - "url": "http://www.adrom.net/", - "companyId": null - }, - "adru.net": { - "name": "adru.net", - "categoryId": 4, - "url": "http://adru.net/", - "companyId": "adru.net" - }, - "adrunnr": { - "name": "AdRunnr", - "categoryId": 4, - "url": "https://adrunnr.com/", - "companyId": "adrunnr" - }, - "adsame": { - "name": "Adsame", - "categoryId": 4, - "url": "http://adsame.com/", - "companyId": "adsame" - }, - "adsbookie": { - "name": "AdsBookie", - "categoryId": 4, - "url": "http://adsbookie.com/", - "companyId": null - }, - "adscale": { - "name": "AdScale", - "categoryId": 4, - "url": "http://www.adscale.de/", - "companyId": "stroer" - }, - "adscience": { - "name": "Adscience", - "categoryId": 4, - "url": "http://www.adscience.nl/", - "companyId": "adscience" - }, - "adsco.re": { - "name": "Adscore", - "categoryId": 4, - "url": "https://www.adscore.com/", - "companyId": null - }, - "adsensecamp": { - "name": "AdsenseCamp", - "categoryId": 4, - "url": "http://adsensecamp.com", - "companyId": "adsensecamp" - }, - "adserverpub": { - "name": "AdServerPub", - "categoryId": 4, - "url": "http://www.adserverpub.com/", - "companyId": "adserverpub" - }, - "adservice_media": { - "name": "Adservice Media", - "categoryId": 4, - "url": "http://www.adservicemedia.com/", - "companyId": "adservice_media" - }, - "adsfactor": { - "name": "Adsfactor", - "categoryId": 4, - "url": "http://www.adsfactor.com/", - "companyId": "pixels_asia" - }, - "adside": { - "name": "AdSide", - "categoryId": 4, - "url": "http://www.adside.com/", - "companyId": "adside" - }, - "adskeeper": { - "name": "AdsKeeper", - "categoryId": 4, - "url": "http://adskeeper.co.uk/", - "companyId": "adskeeper" - }, - "adskom": { - "name": "ADSKOM", - "categoryId": 4, - "url": "http://adskom.com/", - "companyId": "adskom" - }, - "adslot": { - "name": "Adslot", - "categoryId": 4, - "url": "http://www.adslot.com/", - "companyId": "adslot" - }, - "adsnative": { - "name": "adsnative", - "categoryId": 4, - "url": "http://www.adsnative.com/", - "companyId": "adsnative" - }, - "adsniper.ru": { - "name": "AdSniper", - "categoryId": 4, - "url": "http://ad-sniper.com/", - "companyId": "adsniper" - }, - "adspeed": { - "name": "AdSpeed", - "categoryId": 4, - "url": "http://www.adspeed.com/", - "companyId": "adspeed" - }, - "adspyglass": { - "name": "AdSpyglass", - "categoryId": 4, - "url": "https://www.adspyglass.com/", - "companyId": "adspyglass" - }, - "adstage": { - "name": "AdStage", - "categoryId": 4, - "url": "http://www.adstage.io/", - "companyId": "adstage" - }, - "adstanding": { - "name": "AdStanding", - "categoryId": 4, - "url": "http://www.adstanding.com/en/", - "companyId": "adstanding" - }, - "adstars": { - "name": "Adstars", - "categoryId": 4, - "url": "http://adstars.co.id", - "companyId": "adstars" - }, - "adstir": { - "name": "adstir", - "categoryId": 4, - "url": "https://en.ad-stir.com/", - "companyId": "united_inc" - }, - "adsupply": { - "name": "AdSupply", - "categoryId": 4, - "url": "http://www.adsupply.com/", - "companyId": "adsupply" - }, - "adswizz": { - "name": "AdsWizz", - "categoryId": 4, - "url": "http://www.adswizz.com/", - "companyId": "adswizz" - }, - "adtaily": { - "name": "AdTaily", - "categoryId": 4, - "url": "http://www.adtaily.pl/", - "companyId": "adtaily" - }, - "adtarget.me": { - "name": "Adtarget.me", - "categoryId": 4, - "url": "http://www.adtarget.me/", - "companyId": "adtarget.me" - }, - "adtech": { - "name": "ADTECH", - "categoryId": 6, - "url": "http://www.adtechus.com/", - "companyId": "verizon" - }, - "adtegrity": { - "name": "Adtegrity", - "categoryId": 4, - "url": "http://www.adtegrity.com/", - "companyId": "adtegrity" - }, - "adtelligence.de": { - "name": "Adtelligence", - "categoryId": 4, - "url": "https://adtelligence.com/", - "companyId": null - }, - "adtheorent": { - "name": "Adtheorent", - "categoryId": 4, - "url": "http://adtheorent.com/", - "companyId": "adtheorant" - }, - "adthink": { - "name": "Adthink", - "categoryId": 4, - "url": "https://adthink.com/", - "companyId": "adthink" - }, - "adtiger": { - "name": "AdTiger", - "categoryId": 4, - "url": "http://www.adtiger.de/", - "companyId": "adtiger" - }, - "adtima": { - "name": "Adtima", - "categoryId": 4, - "url": "http://adtima.vn/", - "companyId": "adtima" - }, - "adtng.com": { - "name": "adtng.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "adtoma": { - "name": "Adtoma", - "categoryId": 4, - "url": "http://www.adtoma.com/", - "companyId": "adtoma" - }, - "adtr02.com": { - "name": "adtr02.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "adtraction": { - "name": "Adtraction", - "categoryId": 4, - "url": "http://adtraction.com/", - "companyId": "adtraction" - }, - "adtraxx": { - "name": "AdTraxx", - "categoryId": 4, - "url": "https://www1.adtraxx.de/", - "companyId": "adtrax" - }, - "adtriba.com": { - "name": "AdTriba", - "categoryId": 6, - "url": "https://www.adtriba.com/", - "companyId": null - }, - "adtrue": { - "name": "Adtrue", - "categoryId": 4, - "url": "http://adtrue.com/", - "companyId": "adtrue" - }, - "adtrustmedia": { - "name": "AdTrustMedia", - "categoryId": 4, - "url": "https://adtrustmedia.com/", - "companyId": "adtrustmedia" - }, - "adtube": { - "name": "AdTube", - "categoryId": 4, - "url": "http://adtube.ir/", - "companyId": "adtube" - }, - "adult_webmaster_empire": { - "name": "Adult Webmaster Empire", - "categoryId": 3, - "url": "http://www.awempire.com/", - "companyId": "adult_webmaster_empire" - }, - "adultadworld": { - "name": "AdultAdWorld", - "categoryId": 3, - "url": "http://adultadworld.com/", - "companyId": "adult_adworld" - }, - "adup-tech.com": { - "name": "AdUp Technology", - "categoryId": 4, - "url": "https://www.adup-tech.com/", - "companyId": "adup_technology" - }, - "advaction": { - "name": "Advaction", - "categoryId": 4, - "url": "http://advaction.ru/", - "companyId": "advaction" - }, - "advalo": { - "name": "Advalo", - "categoryId": 4, - "url": "https://www.advalo.com", - "companyId": "advalo" - }, - "advanced_hosters": { - "name": "Advanced Hosters", - "categoryId": 9, - "url": "https://advancedhosters.com/", - "companyId": null - }, - "advark": { - "name": "Advark", - "categoryId": 4, - "url": "https://advarkads.com/", - "companyId": "advark" - }, - "adventori": { - "name": "ADventori", - "categoryId": 8, - "url": "https://www.adventori.com/", - "companyId": "adventori" - }, - "adverline": { - "name": "Adverline", - "categoryId": 4, - "url": "http://www.adverline.com/", - "companyId": "adverline" - }, - "adversal": { - "name": "Adversal", - "categoryId": 4, - "url": "https://www.adversal.com/", - "companyId": "adversal" - }, - "adverserve": { - "name": "adverServe", - "categoryId": 4, - "url": "http://www.adverserve.com/", - "companyId": "adverserve" - }, - "adverteerdirect": { - "name": "Adverteerdirect", - "categoryId": 4, - "url": "http://www.adverteerdirect.nl/", - "companyId": "adverteerdirect" - }, - "adverticum": { - "name": "Adverticum", - "categoryId": 4, - "url": "https://adverticum.net/english/", - "companyId": "adverticum" - }, - "advertise.com": { - "name": "Advertise.com", - "categoryId": 4, - "url": "http://advertise.com/", - "companyId": "advertise.com" - }, - "advertisespace": { - "name": "AdvertiseSpace", - "categoryId": 4, - "url": "http://www.advertisespace.com/", - "companyId": "advertisespace" - }, - "advertising.com": { - "name": "Verizon Media", - "categoryId": 4, - "url": "https://www.verizonmedia.com/", - "companyId": "verizon" - }, - "advertlets": { - "name": "Advertlets", - "categoryId": 4, - "url": "http://www.advertlets.com/", - "companyId": "advertlets" - }, - "advertserve": { - "name": "AdvertServe", - "categoryId": 4, - "url": "https://secure.advertserve.com/", - "companyId": "advertserve" - }, - "advidi": { - "name": "Advidi", - "categoryId": 4, - "url": "http://advidi.com/", - "companyId": "advidi" - }, - "advmaker.ru": { - "name": "advmaker.ru", - "categoryId": 4, - "url": "http://advmaker.ru/", - "companyId": "advmaker.ru" - }, - "advolution": { - "name": "Advolution", - "categoryId": 4, - "url": "http://www.advolution.de", - "companyId": "advolution" - }, - "adwebster": { - "name": "adwebster", - "categoryId": 4, - "url": "http://adwebster.com", - "companyId": "adwebster" - }, - "adwit": { - "name": "Adwit", - "categoryId": 4, - "url": "http://www.adwitserver.com", - "companyId": "adwit" - }, - "adworx.at": { - "name": "ADworx", - "categoryId": 4, - "url": "http://www.adworx.at/", - "companyId": "ors" - }, - "adworxs.net": { - "name": "adworxs.net", - "categoryId": 4, - "url": "http://www.adworxs.net/?lang=en", - "companyId": null - }, - "adxion": { - "name": "adXion", - "categoryId": 4, - "url": "http://www.adxion.com", - "companyId": "adxion" - }, - "adxpansion": { - "name": "AdXpansion", - "categoryId": 3, - "url": "http://www.adxpansion.com/", - "companyId": "adxpansion" - }, - "adxpose": { - "name": "AdXpose", - "categoryId": 4, - "url": "http://www.adxpose.com/home.page", - "companyId": "comscore" - }, - "adxprtz.com": { - "name": "adxprtz.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "adyoulike": { - "name": "Adyoulike", - "categoryId": 4, - "url": "http://www.adyoulike.com/", - "companyId": "adyoulike" - }, - "adzerk": { - "name": "Adzerk", - "categoryId": 4, - "url": "http://adzerk.com/", - "companyId": "adzerk" - }, - "adzly": { - "name": "adzly", - "categoryId": 4, - "url": "http://www.adzly.com/", - "companyId": "adzly" - }, - "aemediatraffic": { - "name": "Aemediatraffic", - "categoryId": 6, - "url": null, - "companyId": null - }, - "aerify_media": { - "name": "Aerify Media", - "categoryId": 4, - "url": "http://aerifymedia.com/", - "companyId": "aerify_media" - }, - "aeris_weather": { - "name": "Aeris Weather", - "categoryId": 2, - "url": "https://www.aerisweather.com/", - "companyId": "aerisweather" - }, - "affectv": { - "name": "Hybrid Theory", - "categoryId": 4, - "url": "https://hybridtheory.com/", - "companyId": "affectv" - }, - "affiliate-b": { - "name": "Affiliate-B", - "categoryId": 4, - "url": "https://www.affiliate-b.com/", - "companyId": "affiliate_b" - }, - "affiliate4you": { - "name": "Affiliate4You", - "categoryId": 4, - "url": "http://www.affiliate4you.nl/", - "companyId": "family_blend" - }, - "affiliatebuzz": { - "name": "AffiliateBuzz", - "categoryId": 4, - "url": "http://www.affiliatebuzz.com/", - "companyId": "affiliatebuzz" - }, - "affiliatefuture": { - "name": "AffiliateFuture", - "categoryId": 4, - "url": "http://www.affiliatefuture.com", - "companyId": "affiliatefuture" - }, - "affiliatelounge": { - "name": "AffiliateLounge", - "categoryId": 4, - "url": "http://www.affiliatelounge.com/", - "companyId": "betsson_group_affiliates" - }, - "affiliation_france": { - "name": "Affiliation France", - "categoryId": 4, - "url": "http://www.affiliation-france.com/", - "companyId": "affiliation-france" - }, - "affiliator": { - "name": "Affiliator", - "categoryId": 4, - "url": "http://www.affiliator.com/", - "companyId": "affiliator" - }, - "affiliaweb": { - "name": "Affiliaweb", - "categoryId": 4, - "url": "http://affiliaweb.fr/", - "companyId": "affiliaweb" - }, - "affilinet": { - "name": "affilinet", - "categoryId": 4, - "url": "https://www.affili.net/", - "companyId": "axel_springer" - }, - "affimax": { - "name": "AffiMax", - "categoryId": 4, - "url": "https://www.affimax.de", - "companyId": "affimax" - }, - "affinity": { - "name": "Affinity", - "categoryId": 4, - "url": "http://www.affinity.com/", - "companyId": "affinity" - }, - "affinity.by": { - "name": "Affinity.by", - "categoryId": 4, - "url": "http://affinity.by", - "companyId": "affinity_digital_agency" - }, - "affiz_cpm": { - "name": "Affiz CPM", - "categoryId": 4, - "url": "http://cpm.affiz.com/home", - "companyId": "affiz_cpm" - }, - "afftrack": { - "name": "Afftrack", - "categoryId": 6, - "url": "http://www.afftrack.com/", - "companyId": "afftrack" - }, - "afgr2.com": { - "name": "afgr2.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "afilio": { - "name": "Afilio", - "categoryId": 6, - "url": "http://afilio.com.br/", - "companyId": "afilio" - }, - "afs_analystics": { - "name": "AFS Analystics", - "categoryId": 6, - "url": "https://www.afsanalytics.com/", - "companyId": "afs_analytics" - }, - "aftonbladet_ads": { - "name": "Aftonbladet Ads", - "categoryId": 4, - "url": "http://annonswebb.aftonbladet.se/", - "companyId": "aftonbladet" - }, - "aftv-serving.bid": { - "name": "aftv-serving.bid", - "categoryId": 4, - "url": null, - "companyId": null - }, - "aggregate_knowledge": { - "name": "Aggregate Knowledge", - "categoryId": 4, - "url": "http://www.aggregateknowledge.com/", - "companyId": "neustar" - }, - "agilone": { - "name": "AgilOne", - "categoryId": 6, - "url": "http://www.agilone.com/", - "companyId": "agilone" - }, - "agora": { - "name": "Agora", - "categoryId": 4, - "url": "https://www.agora.pl/", - "companyId": "agora_sa" - }, - "ahalogy": { - "name": "Ahalogy", - "categoryId": 7, - "url": "http://www.ahalogy.com/", - "companyId": "ahalogy" - }, - "ai_media_group": { - "name": "Ai Media Group", - "categoryId": 4, - "url": "http://aimediagroup.com/", - "companyId": "ai_media_group" - }, - "aidata": { - "name": "Aidata", - "categoryId": 4, - "url": "http://aidata.me/", - "companyId": "aidata" - }, - "aim4media": { - "name": "Aim4Media", - "categoryId": 4, - "url": "http://aim4media.com", - "companyId": "aim4media" - }, - "airbnb": { - "name": "Airbnb", - "categoryId": 6, - "url": "https://affiliate.withairbnb.com/", - "companyId": null - }, - "airbrake": { - "name": "Airbrake", - "categoryId": 4, - "url": "https://airbrake.io/", - "companyId": "airbrake" - }, - "airpr.com": { - "name": "AirPR", - "categoryId": 6, - "url": "https://airpr.com/", - "companyId": "airpr" - }, - "airpush": { - "name": "Airpush", - "categoryId": 4, - "url": "http://www.airpush.com/", - "companyId": "airpush" - }, - "akamai_technologies": { - "name": "Akamai Technologies", - "categoryId": 9, - "url": "https://www.akamai.com/", - "companyId": "akamai" - }, - "akamoihd.net": { - "name": "akamoihd.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "akane": { - "name": "AkaNe", - "categoryId": 4, - "url": "http://akane-ad.com/", - "companyId": "akane" - }, - "akanoo": { - "name": "Akanoo", - "categoryId": 6, - "url": "http://www.akanoo.com/", - "companyId": "akanoo" - }, - "akavita": { - "name": "Akavita", - "categoryId": 4, - "url": "http://www.akavita.by/en", - "companyId": "akavita" - }, - "al_bawaba_advertising": { - "name": "Al Bawaba Advertising", - "categoryId": 4, - "url": "http://www.albawaba.com/advertising", - "companyId": "al_bawaba" - }, - "albacross": { - "name": "Albacross", - "categoryId": 4, - "url": "https://albacross.com", - "companyId": "albacross" - }, - "aldi-international.com": { - "name": "aldi-international.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "alenty": { - "name": "Alenty", - "categoryId": 4, - "url": "http://www.alenty.com/", - "companyId": "appnexus" - }, - "alephd.com": { - "name": "alephd", - "categoryId": 4, - "url": "https://www.alephd.com/", - "companyId": "verizon" - }, - "alexa_metrics": { - "name": "Alexa Metrics", - "categoryId": 6, - "url": "http://www.alexa.com/", - "companyId": "amazon_associates" - }, - "alexa_traffic_rank": { - "name": "Alexa Traffic Rank", - "categoryId": 4, - "url": "http://www.alexa.com/", - "companyId": "amazon_associates" - }, - "algolia.net": { - "name": "algolia", - "categoryId": 4, - "url": "https://www.algolia.com/", - "companyId": null - }, - "algovid.com": { - "name": "algovid.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "alibaba.com": { - "name": "Alibaba", - "categoryId": 8, - "url": "http://www.alibaba.com/", - "companyId": "alibaba" - }, - "alipay.com": { - "name": "Alipay", - "categoryId": 2, - "url": "https://www.alipay.com/", - "companyId": "alibaba" - }, - "alivechat": { - "name": "AliveChat", - "categoryId": 2, - "url": "http://www.websitealive.com/", - "companyId": "websitealive" - }, - "allegro.pl": { - "name": "Allegro", - "categoryId": 8, - "url": "https://allegro.pl", - "companyId": "allegro.pl" - }, - "allin": { - "name": "Allin", - "categoryId": 6, - "url": "http://allin.com.br/", - "companyId": "allin" - }, - "allo-pages.fr": { - "name": "Allo-Pages", - "categoryId": 2, - "url": "http://www.allo-pages.fr/", - "companyId": "links_lab" - }, - "allotraffic": { - "name": "AlloTraffic", - "categoryId": 4, - "url": "http://www.allotraffic.com/", - "companyId": "allotraffic" - }, - "allure_media": { - "name": "Allure Media", - "categoryId": 4, - "url": "http://www.alluremedia.com.au", - "companyId": "allure_media" - }, - "allyes": { - "name": "Allyes", - "categoryId": 4, - "url": "http://www.allyes.com/", - "companyId": "allyes" - }, - "alooma": { - "name": "Alooma", - "categoryId": 4, - "url": "https://www.alooma.com/", - "companyId": "alooma" - }, - "altitude_digital": { - "name": "Altitude Digital", - "categoryId": 4, - "url": "http://www.altitudedigital.com/", - "companyId": "altitude_digital" - }, - "amadesa": { - "name": "Amadesa", - "categoryId": 4, - "url": "http://www.amadesa.com/", - "companyId": "amadesa" - }, - "amazon": { - "name": "Amazon.com", - "categoryId": 8, - "url": "https://www.amazon.com", - "companyId": "amazon_associates" - }, - "amazon_adsystem": { - "name": "Amazon Advertising", - "categoryId": 4, - "url": "https://advertising.amazon.com/", - "companyId": "amazon_associates" - }, - "amazon_associates": { - "name": "Amazon Associates", - "categoryId": 4, - "url": "http://aws.amazon.com/associates/", - "companyId": "amazon_associates" - }, - "amazon_cdn": { - "name": "Amazon CDN", - "categoryId": 9, - "url": "https://www.amazon.com", - "companyId": "amazon_associates" - }, - "amazon_cloudfront": { - "name": "Amazon CloudFront", - "categoryId": 10, - "url": "https://aws.amazon.com/cloudfront/?nc1=h_ls", - "companyId": "amazon_associates" - }, - "amazon_mobile_ads": { - "name": "Amazon Mobile Ads", - "categoryId": 4, - "url": "http://www.amazon.com/", - "companyId": "amazon_associates" - }, - "amazon_payments": { - "name": "Amazon Payments", - "categoryId": 2, - "url": "https://pay.amazon.com/", - "companyId": "amazon_associates" - }, - "amazon_video": { - "name": "Amazon Instant Video", - "categoryId": 0, - "url": "https://www.amazon.com", - "companyId": "amazon_associates" - }, - "amazon_web_services": { - "name": "Amazon Web Services", - "categoryId": 10, - "url": "https://aws.amazon.com/", - "companyId": "amazon_associates" - }, - "ambient_digital": { - "name": "Ambient Digital", - "categoryId": 4, - "url": "http://www.adnetwork.vn/", - "companyId": "ambient_digital" - }, - "amgload.net": { - "name": "amgload.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "amoad": { - "name": "AMoAd", - "categoryId": 4, - "url": "http://www.amoad.com/", - "companyId": "amoad" - }, - "amobee": { - "name": "Amobee", - "categoryId": 4, - "url": "https://www.amobee.com/", - "companyId": "singtel" - }, - "amp_platform": { - "name": "AMP Platform", - "categoryId": 4, - "url": "http://www.collective.com/", - "companyId": "collective" - }, - "amplitude": { - "name": "Amplitude", - "categoryId": 6, - "url": "https://amplitude.com/", - "companyId": "amplitude" - }, - "ampproject.org": { - "name": "AMP Project", - "categoryId": 8, - "url": "https://www.ampproject.org/", - "companyId": "google" - }, - "anametrix": { - "name": "Anametrix", - "categoryId": 6, - "url": "http://anametrix.com/", - "companyId": "anametrix" - }, - "ancestry_cdn": { - "name": "Ancestry CDN", - "categoryId": 9, - "url": "https://www.ancestry.com/", - "companyId": "ancestry" - }, - "ancora": { - "name": "Ancora", - "categoryId": 6, - "url": "http://www.ancoramediasolutions.com/", - "companyId": "ancora" - }, - "anetwork": { - "name": "Anetwork", - "categoryId": 4, - "url": "http://anetwork.ir/", - "companyId": "anetwork" - }, - "aniview.com": { - "name": "AniView", - "categoryId": 4, - "url": "https://www.aniview.com/", - "companyId": null - }, - "anonymousads": { - "name": "AnonymousAds", - "categoryId": 4, - "url": "https://a-ads.com/", - "companyId": "anonymousads" - }, - "anormal_tracker": { - "name": "Anormal Tracker", - "categoryId": 6, - "url": "http://anormal-tracker.de/", - "companyId": "anormal-tracker" - }, - "answers_cloud_service": { - "name": "Answers Cloud Service", - "categoryId": 1, - "url": "http://www.answers.com/", - "companyId": "answers.com" - }, - "ants": { - "name": "Ants", - "categoryId": 7, - "url": "http://ants.vn/en/", - "companyId": "ants" - }, - "anvato": { - "name": "Anvato", - "categoryId": 0, - "url": "https://www.anvato.com/", - "companyId": "google" - }, - "anyclip": { - "name": "AnyClip", - "categoryId": 0, - "url": "https://anyclip.com", - "companyId": "anyclip" - }, - "aol_be_on": { - "name": "AOL Be On", - "categoryId": 4, - "url": "http://beon.aolnetworks.com/", - "companyId": "verizon" - }, - "aol_cdn": { - "name": "AOL CDN", - "categoryId": 6, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "aol_images_cdn": { - "name": "AOL Images CDN", - "categoryId": 5, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "apa.at": { - "name": "Apa", - "categoryId": 8, - "url": "http://www.apa.at/Site/index.de.html", - "companyId": "apa" - }, - "apester": { - "name": "Apester", - "categoryId": 4, - "url": "http://apester.com/", - "companyId": "apester" - }, - "apicit.net": { - "name": "apicit.net", - "categoryId": 4, - "url": null, - "companyId": null - }, - "aplus_analytics": { - "name": "Aplus Analytics", - "categoryId": 6, - "url": "https://ww.deluxe.com/", - "companyId": "deluxe" - }, - "appcues": { - "name": "Appcues", - "categoryId": 2, - "url": "https://www.appcues.com/", - "companyId": null - }, - "appdynamics": { - "name": "AppDynamics", - "categoryId": 6, - "url": "http://www.appdynamics.com", - "companyId": "appdynamics" - }, - "appier": { - "name": "Appier", - "categoryId": 4, - "url": "http://www.appier.com/en/index.html", - "companyId": "appier" - }, - "applifier": { - "name": "Applifier", - "categoryId": 4, - "url": "http://www.applifier.com/", - "companyId": "applifier" - }, - "applovin": { - "name": "AppLovin", - "categoryId": 4, - "url": "https://www.applovin.com", - "companyId": "applovin" - }, - "appmetrx": { - "name": "AppMetrx", - "categoryId": 4, - "url": "http://www.engago.com", - "companyId": "engago_technologies" - }, - "appnexus": { - "name": "AppNexus", - "categoryId": 4, - "url": "http://www.appnexus.com/", - "companyId": "appnexus" - }, - "appsflyer": { - "name": "AppsFlyer", - "categoryId": 6, - "url": "https://www.appsflyer.com/", - "companyId": "appsflyer" - }, - "apptv": { - "name": "appTV", - "categoryId": 4, - "url": "http://www.apptv.com/", - "companyId": "apptv" - }, - "apture": { - "name": "Apture", - "categoryId": 2, - "url": "http://www.apture.com/", - "companyId": "google" - }, - "arcpublishing": { - "name": "Arc Publishing", - "categoryId": 6, - "url": "https://www.arcpublishing.com/", - "companyId": "arc_publishing" - }, - "ard.de": { - "name": "ard.de", - "categoryId": 0, - "url": null, - "companyId": null - }, - "are_you_a_human": { - "name": "Are You a Human", - "categoryId": 6, - "url": "https://areyouahuman.com/", - "companyId": "distil_networks" - }, - "arkoselabs.com": { - "name": "Arkose Labs", - "categoryId": 6, - "url": "https://www.arkoselabs.com/", - "companyId": null - }, - "art19": { - "name": "Art19", - "categoryId": 4, - "url": "https://art19.com/", - "companyId": "art19" - }, - "artimedia": { - "name": "Artimedia", - "categoryId": 4, - "url": "http://arti-media.net/en/", - "companyId": "artimedia" - }, - "artlebedev.ru": { - "name": "Art.Lebedev", - "categoryId": 8, - "url": "https://www.artlebedev.ru/", - "companyId": "art.lebedev_studio" - }, - "aruba_media_marketing": { - "name": "Aruba Media Marketing", - "categoryId": 4, - "url": "http://www.arubamediamarketing.it/", - "companyId": "aruba_media_marketing" - }, - "arvato_canvas_fp": { - "name": "Arvato Canvas FP", - "categoryId": 6, - "url": "https://www.arvato.com/", - "companyId": "arvato" - }, - "asambeauty.com": { - "name": "asambeauty.com", - "categoryId": 8, - "url": "https://www.asambeauty.com/", - "companyId": null - }, - "ask.com": { - "name": "Ask.com", - "categoryId": 7, - "url": null, - "companyId": null - }, - "aspnetcdn": { - "name": "Microsoft Ajax CDN", - "categoryId": 9, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "astronomer": { - "name": "Astronomer", - "categoryId": 6, - "url": "https://www.astronomer.io", - "companyId": "astronomer" - }, - "at_internet": { - "name": "AT Internet", - "categoryId": 6, - "url": "http://www.xiti.com/", - "companyId": "at_internet" - }, - "atedra": { - "name": "Atedra", - "categoryId": 4, - "url": "http://www.atedra.com/", - "companyId": "atedra" - }, - "atg_group": { - "name": "ATG Ad Tech Group", - "categoryId": 4, - "url": "https://ad-tech-group.com/", - "companyId": null - }, - "atg_optimization": { - "name": "ATG Optimization", - "categoryId": 4, - "url": "http://www.atg.com/en/products-services/optimization/", - "companyId": "oracle" - }, - "atg_recommendations": { - "name": "ATG Recommendations", - "categoryId": 4, - "url": "http://www.atg.com/en/products-services/optimization/recommendations/", - "companyId": "oracle" - }, - "atlas": { - "name": "Atlas", - "categoryId": 4, - "url": "https://atlassolutions.com", - "companyId": "facebook" - }, - "atlas_profitbuilder": { - "name": "Atlas ProfitBuilder", - "categoryId": 4, - "url": "http://www.atlassolutions.com/", - "companyId": "atlas" - }, - "atlassian.net": { - "name": "Atlassian", - "categoryId": 2, - "url": "https://www.atlassian.com/", - "companyId": "atlassian" - }, - "atlassian_marketplace": { - "name": "Atlassian Marketplace", - "categoryId": 9, - "url": "https://marketplace.atlassian.com/", - "companyId": "atlassian" - }, - "atomz_search": { - "name": "Atomz Search", - "categoryId": 2, - "url": "http://atomz.com/", - "companyId": "atomz" - }, - "atsfi_de": { - "name": "atsfi.de", - "categoryId": 11, - "url": "http://www.axelspringer.de/en/index.html", - "companyId": "axel_springer" - }, - "attracta": { - "name": "Attracta", - "categoryId": 4, - "url": "http://www.attracta.com/", - "companyId": "attracta" - }, - "attraqt": { - "name": "Attraqt", - "categoryId": 6, - "url": "http://www.locayta.com/", - "companyId": "attraqt" - }, - "audience2media": { - "name": "Audience2Media", - "categoryId": 4, - "url": "http://www.audience2media.com/", - "companyId": "audience2media" - }, - "audience_ad_network": { - "name": "Audience Ad Network", - "categoryId": 4, - "url": "http://www.audienceadnetwork.com", - "companyId": "bridgeline_digital" - }, - "audience_science": { - "name": "Audience Science", - "categoryId": 4, - "url": "http://www.audiencescience.com/", - "companyId": "audiencescience" - }, - "audiencerate": { - "name": "AudienceRate", - "categoryId": 4, - "url": "http://www.audiencerate.com/", - "companyId": "audiencerate" - }, - "audiencesquare.com": { - "name": "Audience Square", - "categoryId": 4, - "url": "http://www.audiencesquare.fr/", - "companyId": "audience_square" - }, - "auditude": { - "name": "Auditude", - "categoryId": 0, - "url": "http://www.auditude.com/", - "companyId": "adobe" - }, - "audtd.com": { - "name": "Auditorius", - "categoryId": 4, - "url": "http://www.auditorius.ru/", - "companyId": "auditorius" - }, - "augur": { - "name": "Augur", - "categoryId": 6, - "url": "https://www.augur.io/", - "companyId": "augur" - }, - "aumago": { - "name": "Aumago", - "categoryId": 4, - "url": "http://www.aumago.com/", - "companyId": "aumago" - }, - "aurea_clicktracks": { - "name": "Aurea ClickTracks", - "categoryId": 4, - "url": "http://www.clicktracks.com/", - "companyId": "aurea" - }, - "ausgezeichnet_org": { - "name": "ausgezeichnet.org", - "categoryId": 2, - "url": "http://ausgezeichnet.org/", - "companyId": null - }, - "australia.gov": { - "name": "Australia.gov", - "categoryId": 4, - "url": "http://www.australia.gov.au/", - "companyId": "australian_government" - }, - "auth0": { - "name": "Auth0 Inc.", - "categoryId": 6, - "url": "https://auth0.com/", - "companyId": "auth0" - }, - "autoid": { - "name": "AutoID", - "categoryId": 6, - "url": "http://www.autoid.com/", - "companyId": "autoid" - }, - "autonomy": { - "name": "Autonomy", - "categoryId": 4, - "url": "http://www.optimost.com/", - "companyId": "hp" - }, - "autonomy_campaign": { - "name": "Autonomy Campaign", - "categoryId": 4, - "url": "http://www.autonomy.com/", - "companyId": "hp" - }, - "autopilothq": { - "name": "Auto Pilot", - "categoryId": 4, - "url": "https://www.autopilothq.com/", - "companyId": "autopilothq" - }, - "autoscout24.com": { - "name": "Autoscout24", - "categoryId": 8, - "url": "http://www.scout24.com/", - "companyId": "scout24" - }, - "avail": { - "name": "Avail", - "categoryId": 4, - "url": "http://avail.com", - "companyId": "richrelevance" - }, - "avanser": { - "name": "AVANSER", - "categoryId": 2, - "url": "http://www.avanser.com.au/", - "companyId": "avanser" - }, - "avant_metrics": { - "name": "Avant Metrics", - "categoryId": 6, - "url": "http://www.avantlink.com/", - "companyId": "avantlink" - }, - "avantlink": { - "name": "AvantLink", - "categoryId": 4, - "url": "http://www.avantlink.com/", - "companyId": "avantlink" - }, - "avazu_network": { - "name": "Avazu Network", - "categoryId": 4, - "url": "http://www.avazudsp.net/", - "companyId": "avazu_network" - }, - "avenseo": { - "name": "Avenseo", - "categoryId": 4, - "url": "http://avenseo.com", - "companyId": "avenseo" - }, - "avid_media": { - "name": "Avid Media", - "categoryId": 0, - "url": "http://www.avidglobalmedia.com/", - "companyId": "avid_media" - }, - "avocet": { - "name": "Avocet", - "categoryId": 8, - "url": "https://avocet.io/", - "companyId": "avocet" - }, - "aweber": { - "name": "AWeber", - "categoryId": 4, - "url": "http://www.aweber.com/", - "companyId": "aweber_communications" - }, - "awin": { - "name": "AWIN", - "categoryId": 4, - "url": "https://www.awin.com", - "companyId": "axel_springer" - }, - "axill": { - "name": "Axill", - "categoryId": 4, - "url": "http://www.axill.com/", - "companyId": "axill" - }, - "azadify": { - "name": "Azadify", - "categoryId": 4, - "url": "http://azadify.com/engage/index.php", - "companyId": "azadify" - }, - "azureedge.net": { - "name": "Azure CDN", - "categoryId": 9, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "b2bcontext": { - "name": "B2BContext", - "categoryId": 4, - "url": "http://b2bcontext.ru/", - "companyId": "b2bcontext" - }, - "b2bvideo": { - "name": "B2Bvideo", - "categoryId": 4, - "url": "http://b2bvideo.ru/", - "companyId": "b2bvideo" - }, - "babator.com": { - "name": "Babator", - "categoryId": 6, - "url": "https://www.babator.com/", - "companyId": null - }, - "back_beat_media": { - "name": "Back Beat Media", - "categoryId": 4, - "url": "http://www.backbeatmedia.com", - "companyId": "backbeat_media" - }, - "backtype_widgets": { - "name": "BackType Widgets", - "categoryId": 4, - "url": "http://www.backtype.com/widgets", - "companyId": "backtype" - }, - "bahn_de": { - "name": "Deutsche Bahn", - "categoryId": 8, - "url": null, - "companyId": null - }, - "baidu_ads": { - "name": "Baidu Ads", - "categoryId": 4, - "url": "http://www.baidu.com/", - "companyId": "baidu" - }, - "baidu_static": { - "name": "Baidu Static", - "categoryId": 8, - "url": "https://www.baidu.com/", - "companyId": "baidu" - }, - "baletingo.com": { - "name": "baletingo.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bangdom.com": { - "name": "BangBros", - "categoryId": 3, - "url": null, - "companyId": null - }, - "bankrate": { - "name": "Bankrate", - "categoryId": 4, - "url": "https://www.bankrate.com/", - "companyId": "bankrate" - }, - "banner_connect": { - "name": "Banner Connect", - "categoryId": 4, - "url": "http://www.bannerconnect.net/", - "companyId": "bannerconnect" - }, - "bannerflow.com": { - "name": "Bannerflow", - "categoryId": 4, - "url": "https://www.bannerflow.com/", - "companyId": "bannerflow" - }, - "bannerplay": { - "name": "BannerPlay", - "categoryId": 4, - "url": "http://www.bannerplay.com/", - "companyId": "bannerplay" - }, - "bannersnack": { - "name": "Bannersnack", - "categoryId": 4, - "url": "http://www.bannersnack.com/", - "companyId": "bannersnack" - }, - "barilliance": { - "name": "Barilliance", - "categoryId": 4, - "url": "http://www.barilliance.com/", - "companyId": "barilliance" - }, - "barometer": { - "name": "Barometer", - "categoryId": 2, - "url": "http://getbarometer.com/", - "companyId": "barometer" - }, - "basilic.io": { - "name": "basilic.io", - "categoryId": 6, - "url": "https://basilic.io/", - "companyId": null - }, - "batanga_network": { - "name": "Batanga Network", - "categoryId": 4, - "url": "http://www.batanganetwork.com/", - "companyId": "batanga_network" - }, - "batch_media": { - "name": "Batch Media", - "categoryId": 4, - "url": "http://batch.ba/", - "companyId": "prosieben_sat1" - }, - "bauer_media": { - "name": "Bauer Media", - "categoryId": 4, - "url": "http://www.bauermedia.com", - "companyId": "bauer_media" - }, - "baur.de": { - "name": "baur.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "baynote_observer": { - "name": "Baynote Observer", - "categoryId": 4, - "url": "http://www.baynote.com/", - "companyId": "baynote" - }, - "bazaarvoice": { - "name": "Bazaarvoice", - "categoryId": 2, - "url": "http://www.bazaarvoice.com/", - "companyId": "bazaarvoice" - }, - "bbci": { - "name": "BBC", - "categoryId": 10, - "url": "https://bbc.co.uk", - "companyId": null - }, - "bd4travel": { - "name": "bd4travel", - "categoryId": 4, - "url": "https://bd4travel.com/", - "companyId": "bd4travel" - }, - "be_opinion": { - "name": "Be Opinion", - "categoryId": 2, - "url": "http://beopinion.com/", - "companyId": "be_opinion" - }, - "beachfront": { - "name": "Beachfront Media", - "categoryId": 4, - "url": "http://beachfrontmedia.com/", - "companyId": null - }, - "beacon_ad_network": { - "name": "Beacon Ad Network", - "categoryId": 4, - "url": "http://beaconads.com/", - "companyId": "beacon_ad_network" - }, - "beampulse.com": { - "name": "BeamPulse", - "categoryId": 4, - "url": "https://en.beampulse.com/", - "companyId": null - }, - "beanstalk_data": { - "name": "Beanstalk Data", - "categoryId": 4, - "url": "http://www.beanstalkdata.com/", - "companyId": "beanstalk_data" - }, - "bebi": { - "name": "Bebi Media", - "categoryId": 4, - "url": "https://www.bebi.com/", - "companyId": "bebi_media" - }, - "beeketing.com": { - "name": "Beeketing", - "categoryId": 4, - "url": "https://beeketing.com/", - "companyId": "beeketing" - }, - "beeline.ru": { - "name": "Beeline", - "categoryId": 4, - "url": "https://moskva.beeline.ru/", - "companyId": null - }, - "beeswax": { - "name": "Beeswax", - "categoryId": 4, - "url": "http://beeswax.com/", - "companyId": "beeswax" - }, - "beezup": { - "name": "BeezUP", - "categoryId": 4, - "url": "http://www.beezup.co.uk/", - "companyId": "beezup" - }, - "begun": { - "name": "Begun", - "categoryId": 4, - "url": "http://begun.ru/", - "companyId": "begun" - }, - "behavioralengine": { - "name": "BehavioralEngine", - "categoryId": 4, - "url": "http://www.behavioralengine.com/", - "companyId": "behavioralengine" - }, - "belboon_gmbh": { - "name": "belboon GmbH", - "categoryId": 8, - "url": null, - "companyId": null - }, - "belco": { - "name": "Belco", - "categoryId": 2, - "url": "https://www.belco.io/", - "companyId": "belco" - }, - "belstat": { - "name": "BelStat", - "categoryId": 6, - "url": "http://www.belstat.com/", - "companyId": "belstat" - }, - "bemobile.ua": { - "name": "Bemobile", - "categoryId": 10, - "url": "http://bemobile.ua/en/", - "companyId": "bemobile" - }, - "bench_platform": { - "name": "Bench Platform", - "categoryId": 4, - "url": "https://benchplatform.com", - "companyId": "bench_platform" - }, - "betterttv": { - "name": "BetterTTV", - "categoryId": 7, - "url": "https://nightdev.com/betterttv/", - "companyId": "nightdev" - }, - "betweendigital.com": { - "name": "Between Digital", - "categoryId": 4, - "url": "http://betweendigital.ru/ssp", - "companyId": "between_digital" - }, - "bid.run": { - "name": "Bid Run", - "categoryId": 4, - "url": "http://bid.run/", - "companyId": "bid.run" - }, - "bidgear": { - "name": "BidGear", - "categoryId": 6, - "url": "https://bidgear.com/", - "companyId": "bidgear" - }, - "bidswitch": { - "name": "Bidswitch", - "categoryId": 4, - "url": "http://www.iponweb.com/", - "companyId": "iponweb" - }, - "bidtellect": { - "name": "Bidtellect", - "categoryId": 4, - "url": "https://www.bidtellect.com/", - "companyId": "bidtellect" - }, - "bidtheatre": { - "name": "BidTheatre", - "categoryId": 4, - "url": "http://www.bidtheatre.com/", - "companyId": "bidtheatre" - }, - "bidvertiser": { - "name": "BidVertiser", - "categoryId": 4, - "url": "http://www.bidvertiser.com/", - "companyId": "bidvertiser" - }, - "big_mobile": { - "name": "Big Mobile", - "categoryId": 4, - "url": "http://www.bigmobile.com/", - "companyId": "big_mobile" - }, - "bigcommerce.com": { - "name": "BigCommerce", - "categoryId": 6, - "url": "https://www.bigcommerce.com/", - "companyId": "bigcommerce" - }, - "bigmir.net": { - "name": "bigmir", - "categoryId": 6, - "url": "https://www.bigmir.net/", - "companyId": "bigmir-internet" - }, - "bigpoint": { - "name": "Bigpoint", - "categoryId": 8, - "url": null, - "companyId": null - }, - "bild": { - "name": "Bild.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "bilgin_pro": { - "name": "Bilgin Pro", - "categoryId": 4, - "url": "http://bilgin.pro/", - "companyId": "bilginpro" - }, - "bilin": { - "name": "Bilin", - "categoryId": 4, - "url": "http://www.bilintechnology.com/", - "companyId": "bilin" - }, - "bing_ads": { - "name": "Bing Ads", - "categoryId": 4, - "url": "https://bingads.microsoft.com/", - "companyId": "microsoft" - }, - "bing_maps": { - "name": "Bing Maps", - "categoryId": 2, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "binlayer": { - "name": "BinLayer", - "categoryId": 4, - "url": "http://binlayer.com/", - "companyId": "binlayer" - }, - "binotel": { - "name": "Binotel", - "categoryId": 4, - "url": "http://www.binotel.ua/", - "companyId": "binotel" - }, - "bisnode": { - "name": "Bisnode", - "categoryId": 4, - "url": "http://www.esendra.fi/", - "companyId": "bisnode" - }, - "bitcoin_miner": { - "name": "Bitcoin Miner", - "categoryId": 2, - "url": "http://www.bitcoinplus.com/", - "companyId": "bitcoin_plus" - }, - "bitly": { - "name": "Bitly", - "categoryId": 6, - "url": "https://bitly.com/", - "companyId": null - }, - "bitrix": { - "name": "Bitrix24", - "categoryId": 4, - "url": "https://www.bitrix24.com/", - "companyId": "bitrix24" - }, - "bizcn": { - "name": "Bizcn", - "categoryId": 4, - "url": "http://www.bizcn.com/", - "companyId": "bizcn" - }, - "blackdragon": { - "name": "BlackDragon", - "categoryId": 4, - "url": "http://www.jd.com/", - "companyId": "jing_dong" - }, - "blau.de": { - "name": "Blau", - "categoryId": 8, - "url": "https://www.blau.de/", - "companyId": null - }, - "blink_new_media": { - "name": "Blink New Media", - "categoryId": 4, - "url": "http://engagebdr.com/", - "companyId": "engage_bdr" - }, - "blis": { - "name": "Blis", - "categoryId": 6, - "url": "http://www.blis.com/index.php", - "companyId": "blis" - }, - "blogad": { - "name": "BlogAD", - "categoryId": 4, - "url": "http://www.blogad.com.tw/", - "companyId": "blogad" - }, - "blogbang": { - "name": "BlogBang", - "categoryId": 4, - "url": "http://www.blogbang.com/", - "companyId": "blogbang" - }, - "blogcatalog": { - "name": "BlogCatalog", - "categoryId": 2, - "url": "http://www.blogcatalog.com/", - "companyId": "blogcatalog" - }, - "blogcounter": { - "name": "BlogCounter", - "categoryId": 6, - "url": "http://blogcounter.com/", - "companyId": "adfire_gmbh" - }, - "blogfoster.com": { - "name": "Blogfoster", - "categoryId": 8, - "url": "http://www.blogfoster.com/", - "companyId": "blogfoster" - }, - "bloggerads": { - "name": "BloggerAds", - "categoryId": 4, - "url": "http://www.bloggerads.net/", - "companyId": "bloggerads" - }, - "blogher": { - "name": "BlogHer Ads", - "categoryId": 4, - "url": "https://www.blogher.com/", - "companyId": "penske_media_corp" - }, - "blogimg.jp": { - "name": "blogimg.jp", - "categoryId": 9, - "url": "https://line.me/", - "companyId": "line" - }, - "blogsmithmedia.com": { - "name": "blogsmithmedia.com", - "categoryId": 8, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "blogspot_com": { - "name": "blogspot.com", - "categoryId": 8, - "url": "http://www.google.com", - "companyId": "google" - }, - "bloomreach": { - "name": "BloomReach", - "categoryId": 4, - "url": "https://www.bloomreach.com/en", - "companyId": "bloomreach" - }, - "blue_cherry_group": { - "name": "Blue Cherry Group", - "categoryId": 4, - "url": "http://www.bluecherrygroup.com", - "companyId": "blue_cherry_group" - }, - "blue_seed": { - "name": "Blue Seed", - "categoryId": 4, - "url": "http://blueseed.tv/#/en/platform", - "companyId": "blue_seed" - }, - "blueconic.net": { - "name": "BlueConic Plugin", - "categoryId": 6, - "url": "https://www.blueconic.com/", - "companyId": "blueconic" - }, - "bluecore": { - "name": "Bluecore", - "categoryId": 4, - "url": "https://www.bluecore.com/", - "companyId": "triggermail" - }, - "bluekai": { - "name": "BlueKai", - "categoryId": 4, - "url": "http://www.bluekai.com/", - "companyId": "oracle" - }, - "bluelithium": { - "name": "Bluelithium", - "categoryId": 4, - "url": "http://www.bluelithium.com/", - "companyId": "verizon" - }, - "bluemetrix": { - "name": "Bluemetrix", - "categoryId": 4, - "url": "http://www.bluemetrix.ie/", - "companyId": "bluemetrix" - }, - "bluenewsupdate.info": { - "name": "bluenewsupdate.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bluestreak": { - "name": "BlueStreak", - "categoryId": 4, - "url": "http://www.bluestreak.com/", - "companyId": "dentsu_aegis_network" - }, - "bluetriangle": { - "name": "Blue Triangle", - "categoryId": 6, - "url": "https://www.bluetriangle.com/", - "companyId": "blue_triangle" - }, - "bodelen.com": { - "name": "bodelen.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "bol_affiliate_program": { - "name": "BOL Affiliate Program", - "categoryId": 4, - "url": "http://www.bol.com", - "companyId": "bol.com" - }, - "bold": { - "name": "Bold", - "categoryId": 4, - "url": "https://boldcommerce.com/", - "companyId": "bold" - }, - "boldchat": { - "name": "Boldchat", - "categoryId": 2, - "url": "http://www.boldchat.com/", - "companyId": "boldchat" - }, - "boltdns.net": { - "name": "boltdns.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bombora": { - "name": "Bombora", - "categoryId": 6, - "url": "http://bombora.com/", - "companyId": "bombora" - }, - "bongacams.com": { - "name": "bongacams.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "bonial": { - "name": "Bonial Connect", - "categoryId": 2, - "url": "http://www.bonial.com/", - "companyId": null - }, - "boo-box": { - "name": "boo-box", - "categoryId": 4, - "url": "http://boo-box.com/", - "companyId": "boo-box" - }, - "booking.com": { - "name": "Booking.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "boost_box": { - "name": "Boost Box", - "categoryId": 6, - "url": "http://www.boostbox.com.br/", - "companyId": "boost_box" - }, - "booster_video": { - "name": "Booster Video", - "categoryId": 0, - "url": "https://boostervideo.ru/", - "companyId": "booster_video" - }, - "bootstrap": { - "name": "Bootstrap CDN", - "categoryId": 9, - "url": "http://getbootstrap.com/", - "companyId": "bootstrap_cdn" - }, - "borrango.com": { - "name": "borrango.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "botscanner": { - "name": "BotScanner", - "categoryId": 6, - "url": "http://botscanner.com", - "companyId": "botscanner" - }, - "boudja.com": { - "name": "boudja.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bounce_exchange": { - "name": "Bounce Exchange", - "categoryId": 4, - "url": "http://bounceexchange.com", - "companyId": "bounce_exchange" - }, - "bouncex": { - "name": "BounceX", - "categoryId": 4, - "url": "https://www.bouncex.com/", - "companyId": null - }, - "box_uk": { - "name": "Box UK", - "categoryId": 6, - "url": "http://www.clickdensity.com", - "companyId": "box_uk" - }, - "boxever": { - "name": "Boxever", - "categoryId": 4, - "url": "https://www.boxever.com/", - "companyId": "boxever" - }, - "brainient": { - "name": "Brainient", - "categoryId": 4, - "url": "http://www.brainient.com/", - "companyId": "brainient" - }, - "brainsins": { - "name": "BrainSINS", - "categoryId": 4, - "url": "http://www.brainsins.com/", - "companyId": "brainsins" - }, - "branch_metrics": { - "name": "Branch", - "categoryId": 4, - "url": "https://branch.io/", - "companyId": "branch_metrics_inc" - }, - "brand_affinity": { - "name": "Brand Affinity", - "categoryId": 4, - "url": "http://brandaffinity.net/about", - "companyId": "yoonla" - }, - "brand_networks": { - "name": "Brand Networks", - "categoryId": 4, - "url": "http://www.xa.net/", - "companyId": "brand_networks" - }, - "brandmetrics.com": { - "name": "Brandmetrics.com", - "categoryId": 4, - "url": "https://www.brandmetrics.com/", - "companyId": null - }, - "brandreach": { - "name": "BrandReach", - "categoryId": 4, - "url": "http://www.brandreach.com/", - "companyId": "brandreach" - }, - "brandscreen": { - "name": "Brandscreen", - "categoryId": 4, - "url": "http://www.brandscreen.com/", - "companyId": "zenovia" - }, - "brandwire.tv": { - "name": "BrandWire", - "categoryId": 4, - "url": "https://brandwire.tv/", - "companyId": null - }, - "branica": { - "name": "Branica", - "categoryId": 4, - "url": "http://www.branica.com/", - "companyId": "branica" - }, - "braze": { - "name": "Braze", - "categoryId": 6, - "url": "https://www.braze.com/", - "companyId": "braze_inc" - }, - "brealtime": { - "name": "EMX Digital", - "categoryId": 4, - "url": "https://emxdigital.com/", - "companyId": null - }, - "bridgetrack": { - "name": "BridgeTrack", - "categoryId": 4, - "url": "http://www.bridgetrack.com/", - "companyId": "bridgetrack" - }, - "brightcove": { - "name": "Brightcove", - "categoryId": 0, - "url": "http://www.brightcove.com/en/", - "companyId": "brightcove" - }, - "brightcove_player": { - "name": "Brightcove Player", - "categoryId": 0, - "url": "http://www.brightcove.com/en/", - "companyId": "brightcove" - }, - "brightedge": { - "name": "BrightEdge", - "categoryId": 4, - "url": "http://www.brightedge.com/", - "companyId": "brightedge" - }, - "brightfunnel": { - "name": "BrightFunnel", - "categoryId": 6, - "url": "http://www.brightfunnel.com/", - "companyId": "brightfunnel" - }, - "brightonclick.com": { - "name": "brightonclick.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "brightroll": { - "name": "BrightRoll", - "categoryId": 4, - "url": "http://www.brightroll.com/", - "companyId": "verizon" - }, - "brilig": { - "name": "Brilig", - "categoryId": 4, - "url": "http://www.brilig.com/", - "companyId": "dentsu_aegis_network" - }, - "brillen.de": { - "name": "brillen.de", - "categoryId": 8, - "url": "https://www.brillen.de/", - "companyId": null - }, - "broadstreet": { - "name": "Broadstreet", - "categoryId": 4, - "url": "http://broadstreetads.com/", - "companyId": "broadstreet" - }, - "bronto": { - "name": "Bronto", - "categoryId": 4, - "url": "http://bronto.com/", - "companyId": "bronto" - }, - "brow.si": { - "name": "Brow.si", - "categoryId": 4, - "url": "https://brow.si/", - "companyId": "brow.si" - }, - "browser-statistik": { - "name": "Browser-Statistik", - "categoryId": 6, - "url": "http://www.browser-statistik.de/", - "companyId": "browser-statistik" - }, - "browser_update": { - "name": "Browser Update", - "categoryId": 2, - "url": "http://www.browser-update.org/", - "companyId": "browser-update" - }, - "btncdn.com": { - "name": "btncdn.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "bubblestat": { - "name": "Bubblestat", - "categoryId": 4, - "url": "http://www.bubblestat.com/", - "companyId": "bubblestat" - }, - "buddy_media": { - "name": "Buddy Media", - "categoryId": 7, - "url": "http://www.salesforce.com/", - "companyId": "salesforce" - }, - "buffer_button": { - "name": "Buffer Button", - "categoryId": 7, - "url": "http://www.bufferapp.com/", - "companyId": "buffer" - }, - "bugherd.com": { - "name": "BugHerd", - "categoryId": 2, - "url": "https://bugherd.com", - "companyId": "bugherd" - }, - "bugsnag": { - "name": "Bugsnag", - "categoryId": 6, - "url": "https://bugsnag.com", - "companyId": "bugsnag" - }, - "bulkhentai.com": { - "name": "bulkhentai.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "bumlam.com": { - "name": "bumlam.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bunchbox": { - "name": "Bunchbox", - "categoryId": 6, - "url": "https://app.bunchbox.co/login", - "companyId": "bunchbox" - }, - "burda": { - "name": "BurdaForward", - "categoryId": 4, - "url": "http://www.hubert-burda-media.com/", - "companyId": "hubert_burda_media" - }, - "burda_digital_systems": { - "name": "Burda Digital Systems", - "categoryId": 4, - "url": "http://www.hubert-burda-media.com/", - "companyId": "hubert_burda_media" - }, - "burst_media": { - "name": "Burst Media", - "categoryId": 4, - "url": "http://www.burstmedia.com/", - "companyId": "rhythmone" - }, - "burt": { - "name": "Burt", - "categoryId": 4, - "url": "http://www.burtcorp.com/", - "companyId": "burt" - }, - "businessonline_analytics": { - "name": "BusinessOnLine Analytics", - "categoryId": 6, - "url": "http://www.businessol.com/", - "companyId": "businessonline" - }, - "buysellads": { - "name": "BuySellAds", - "categoryId": 4, - "url": "http://buysellads.com/", - "companyId": "buysellads.com" - }, - "buzzadexchange.com": { - "name": "buzzadexchange.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "buzzador": { - "name": "Buzzador", - "categoryId": 7, - "url": "http://www.buzzador.com", - "companyId": "buzzador" - }, - "buzzfeed": { - "name": "BuzzFeed", - "categoryId": 2, - "url": "http://www.buzzfeed.com", - "companyId": "buzzfeed" - }, - "bwbx.io": { - "name": "Bloomberg CDN", - "categoryId": 9, - "url": "https://www.bloomberg.com/", - "companyId": null - }, - "bypass": { - "name": "Bypass", - "categoryId": 4, - "url": "http://bypass.jp/", - "companyId": "united_inc" - }, - "c1_exchange": { - "name": "C1 Exchange", - "categoryId": 4, - "url": "http://c1exchange.com/", - "companyId": "c1_exchange" - }, - "c3_metrics": { - "name": "C3 Metrics", - "categoryId": 6, - "url": "http://c3metrics.com/", - "companyId": "c3_metrics" - }, - "c8_network": { - "name": "C8 Network", - "categoryId": 4, - "url": "http://c8.net.ua/", - "companyId": "c8_network" - }, - "cackle.me": { - "name": "Cackle", - "categoryId": 3, - "url": "https://cackle.me/", - "companyId": null - }, - "cadreon": { - "name": "Cadreon", - "categoryId": 4, - "url": "http://www.cadreon.com/", - "companyId": "cadreon" - }, - "call_page": { - "name": "Call Page", - "categoryId": 2, - "url": "https://www.callpage.io/", - "companyId": "call_page" - }, - "callbackhunter": { - "name": "CallbackHunter", - "categoryId": 2, - "url": "http://callbackhunter.com/main", - "companyId": "callbackhunter" - }, - "callbox": { - "name": "CallBox", - "categoryId": 2, - "url": "http://www.centuryinteractive.com", - "companyId": "callbox" - }, - "callibri": { - "name": "Callibri", - "categoryId": 4, - "url": "https://callibri.ru/", - "companyId": "callibri" - }, - "callrail": { - "name": "CallRail", - "categoryId": 2, - "url": "http://www.callrail.com/", - "companyId": "callrail" - }, - "calltracking": { - "name": "Calltracking", - "categoryId": 2, - "url": "https://calltracking.ru", - "companyId": "calltracking" - }, - "caltat.com": { - "name": "Caltat", - "categoryId": 2, - "url": "https://caltat.com/", - "companyId": null - }, - "cam-content.com": { - "name": "Cam-Content.com", - "categoryId": 3, - "url": "https://www.cam-content.com/", - "companyId": null - }, - "camakaroda.com": { - "name": "camakaroda.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "campus_explorer": { - "name": "Campus Explorer", - "categoryId": 6, - "url": "http://www.campusexplorer.com/", - "companyId": "campus_explorer" - }, - "canddi": { - "name": "CANDDI", - "categoryId": 6, - "url": "https://www.canddi.com/", - "companyId": "canddi" - }, - "canvas": { - "name": "Canvas", - "categoryId": 2, - "url": "https://www.canvas.net/", - "companyId": null - }, - "capitaldata": { - "name": "CapitalData", - "categoryId": 6, - "url": "https://www.capitaldata.fr/", - "companyId": "highco" - }, - "captora": { - "name": "Captora", - "categoryId": 4, - "url": "http://www.captora.com/", - "companyId": "captora" - }, - "capture_media": { - "name": "Capture Media", - "categoryId": 4, - "url": "http://capturemedia.ch/", - "companyId": "capture_media" - }, - "capturly": { - "name": "Capturly", - "categoryId": 6, - "url": "http://capturly.com/", - "companyId": "capturly" - }, - "carambola": { - "name": "Carambola", - "categoryId": 4, - "url": "http://carambo.la/", - "companyId": "carambola" - }, - "carbonads": { - "name": "Carbon Ads", - "categoryId": 4, - "url": "https://www.carbonads.net/", - "companyId": "buysellads.com" - }, - "cardinal": { - "name": "Cardinal", - "categoryId": 6, - "url": "https://www.cardinalcommerce.com/", - "companyId": "visa" - }, - "cardlytics": { - "name": "Cardlytics", - "categoryId": 6, - "url": "http://www.cardlytics.com/", - "companyId": null - }, - "carrot_quest": { - "name": "Carrot Quest", - "categoryId": 6, - "url": "http://www.carrotquest.io/", - "companyId": "carrot_quest" - }, - "cartstack": { - "name": "CartStack", - "categoryId": 2, - "url": "http://cartstack.com/", - "companyId": "cartstack" - }, - "caspion": { - "name": "Caspion", - "categoryId": 6, - "url": "http://caspion.com/", - "companyId": "caspion" - }, - "castle": { - "name": "Castle", - "categoryId": 2, - "url": "https://castle.io", - "companyId": "castle" - }, - "catchpoint": { - "name": "Catchpoint", - "categoryId": 6, - "url": "http://www.catchpoint.com/", - "companyId": "catchpoint_systems" - }, - "cbox": { - "name": "Cbox", - "categoryId": 2, - "url": "http://cbox.ws", - "companyId": "cbox" - }, - "cbs_interactive": { - "name": "CBS Interactive", - "categoryId": 0, - "url": "http://www.cbsinteractive.com/", - "companyId": "cbs_interactive" - }, - "ccm_benchmark": { - "name": "CCM Benchmark", - "categoryId": 4, - "url": "http://www.ccmbenchmark.com/", - "companyId": null - }, - "cdk_digital_marketing": { - "name": "CDK Digital Marketing", - "categoryId": 4, - "url": "http://www.cobaltgroup.com", - "companyId": "cdk_digital_marketing" - }, - "cdn-net.com": { - "name": "cdn-net.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cdn13.com": { - "name": "cdn13.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "cdn77": { - "name": "CDN77", - "categoryId": 9, - "url": "https://www.cdn77.com/", - "companyId": null - }, - "cdnetworks.net": { - "name": "cdnetworks.net", - "categoryId": 9, - "url": "https://www.cdnetworks.com/", - "companyId": null - }, - "cdnnetwok_xyz": { - "name": "cdnnetwok.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "cdnondemand.org": { - "name": "cdnondemand.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cdnsure.com": { - "name": "cdnsure.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cdnvideo.com": { - "name": "CDNvideo", - "categoryId": 9, - "url": "https://www.cdnvideo.com/", - "companyId": "cdnvideo" - }, - "cdnwidget.com": { - "name": "cdnwidget.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "cedexis_radar": { - "name": "Cedexis Radar", - "categoryId": 6, - "url": "http://www.cedexis.com/products_radar.html", - "companyId": "cedexis" - }, - "celebrus": { - "name": "Celebrus", - "categoryId": 6, - "url": "https://www.celebrus.com/", - "companyId": "celebrus" - }, - "celtra": { - "name": "Celtra", - "categoryId": 0, - "url": "http://www.celtra.com/", - "companyId": "celtra" - }, - "cendyn": { - "name": "Cendyn", - "categoryId": 4, - "url": "http://www.cendyn.com/", - "companyId": "cendyn" - }, - "centraltag": { - "name": "CentralTag", - "categoryId": 4, - "url": "http://www.centraltag.com/", - "companyId": "centraltag" - }, - "centro": { - "name": "Centro", - "categoryId": 4, - "url": "http://centro.net/", - "companyId": "centro" - }, - "cerberus_speed-trap": { - "name": "Cerberus Speed-Trap", - "categoryId": 6, - "url": "http://cerberusip.com/", - "companyId": "cerberus" - }, - "certainsource": { - "name": "CertainSource", - "categoryId": 4, - "url": "http://www.ewaydirect.com", - "companyId": "certainsource" - }, - "certifica_metric": { - "name": "Certifica Metric", - "categoryId": 4, - "url": "http://www.comscore.com/Products_Services/Product_Index/Certifica_Metric", - "companyId": "comscore" - }, - "certona": { - "name": "Certona", - "categoryId": 4, - "url": "http://www.certona.com/products/recommendation.php", - "companyId": "certona" - }, - "chameleon": { - "name": "Chameleon", - "categoryId": 4, - "url": "http://chameleon.ad/", - "companyId": "chamaleon" - }, - "chango": { - "name": "Chango", - "categoryId": 4, - "url": "http://www.chango.com/", - "companyId": "rubicon_project" - }, - "channel_intelligence": { - "name": "Channel Intelligence", - "categoryId": 4, - "url": "http://www.channelintelligence.com/", - "companyId": "google" - }, - "channel_pilot_solutions": { - "name": "ChannelPilot Solutions", - "categoryId": 6, - "url": "https://www.channelpilot.de/", - "companyId": null - }, - "channeladvisor": { - "name": "ChannelAdvisor", - "categoryId": 4, - "url": "http://www.channeladvisor.com/", - "companyId": "channeladvisor" - }, - "channelfinder": { - "name": "ChannelFinder", - "categoryId": 4, - "url": "http://www.kpicentral.com/", - "companyId": "kaleidoscope_promotions" - }, - "chaordic": { - "name": "Chaordic", - "categoryId": 4, - "url": "https://www.chaordic.com.br/", - "companyId": "chaordic" - }, - "chartbeat": { - "name": "ChartBeat", - "categoryId": 6, - "url": "http://chartbeat.com/", - "companyId": "chartbeat" - }, - "chaser": { - "name": "Chaser", - "categoryId": 2, - "url": "http://chaser.ru/", - "companyId": "chaser" - }, - "chat_beacon": { - "name": "Chat Beacon", - "categoryId": 2, - "url": "https://www.chatbeacon.io/", - "companyId": "chat_beacon" - }, - "chatango": { - "name": "Chatango", - "categoryId": 2, - "url": "http://www.chatango.com/", - "companyId": "chatango" - }, - "chatra": { - "name": "Chatra", - "categoryId": 2, - "url": "https://chatra.io", - "companyId": "chatra" - }, - "chaturbate.com": { - "name": "chaturbate.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "chatwing": { - "name": "ChatWing", - "categoryId": 2, - "url": "http://chatwing.com/", - "companyId": "chatwing" - }, - "checkmystats": { - "name": "CheckMyStats", - "categoryId": 4, - "url": "http://checkmystats.com.au", - "companyId": "checkmystats" - }, - "chefkoch_de": { - "name": "chefkoch.de", - "categoryId": 8, - "url": "http://chefkoch.de/", - "companyId": null - }, - "chin_media": { - "name": "Chin Media", - "categoryId": 4, - "url": "http://www.chinmedia.vn/#", - "companyId": "chin_media" - }, - "chinesean": { - "name": "ChineseAN", - "categoryId": 4, - "url": "http://www.chinesean.com/", - "companyId": "chinesean" - }, - "chitika": { - "name": "Chitika", - "categoryId": 4, - "url": "http://chitika.com/", - "companyId": "chitika" - }, - "choicestream": { - "name": "ChoiceStream", - "categoryId": 4, - "url": "http://www.choicestream.com/", - "companyId": "choicestream" - }, - "chute": { - "name": "Chute", - "categoryId": 5, - "url": "https://www.getchute.com/", - "companyId": "esw_capital" - }, - "circit": { - "name": "circIT", - "categoryId": 6, - "url": "http://www.circit.de/", - "companyId": null - }, - "circulate": { - "name": "Circulate", - "categoryId": 6, - "url": "http://circulate.com/", - "companyId": "circulate" - }, - "city_spark": { - "name": "City Spark", - "categoryId": 4, - "url": "http://www.cityspark.com/", - "companyId": "city_spark" - }, - "cityads": { - "name": "CityAds", - "categoryId": 4, - "url": "http://cityads.ru/", - "companyId": "cityads" - }, - "ciuvo.com": { - "name": "ciuvo.com", - "categoryId": 12, - "url": "https://www.ciuvo.com/", - "companyId": null - }, - "civey_widgets": { - "name": "Civey Widgets", - "categoryId": 2, - "url": "https://civey.com/", - "companyId": "civey" - }, - "civicscience.com": { - "name": "CivicScience", - "categoryId": 6, - "url": "https://civicscience.com/", - "companyId": "civicscience" - }, - "ciwebgroup": { - "name": "CIWebGroup", - "categoryId": 4, - "url": "http://www.ciwebgroup.com/", - "companyId": "ciwebgroup" - }, - "clcknads.pro": { - "name": "clcknads.pro", - "categoryId": 3, - "url": null, - "companyId": null - }, - "clear_pier": { - "name": "ClearPier", - "categoryId": 4, - "url": "http://clearpier.com/", - "companyId": "clear_pier" - }, - "clearbit.com": { - "name": "Clearbit", - "categoryId": 6, - "url": "https://clearbit.com/", - "companyId": "clearbit" - }, - "clearsale": { - "name": "clearsale", - "categoryId": 4, - "url": "https://www.clear.sale/", - "companyId": null - }, - "clearstream.tv": { - "name": "Clearstream.TV", - "categoryId": 4, - "url": "http://clearstream.tv/", - "companyId": "clearstream.tv" - }, - "clerk.io": { - "name": "Clerk.io", - "categoryId": 4, - "url": "https://clerk.io/", - "companyId": "clerk.io" - }, - "clever_push": { - "name": "Clever Push", - "categoryId": 6, - "url": "https://clevertap.com/", - "companyId": "clever_push" - }, - "clever_tap": { - "name": "CleverTap", - "categoryId": 6, - "url": "https://clevertap.com/", - "companyId": "clever_tap" - }, - "cleversite": { - "name": "Cleversite", - "categoryId": 2, - "url": "http://cleversite.ru/", - "companyId": "cleversite" - }, - "click360": { - "name": "Click360", - "categoryId": 6, - "url": "https://www.click360.io/", - "companyId": "click360" - }, - "click_and_chat": { - "name": "Click and Chat", - "categoryId": 2, - "url": "http://www.clickandchat.com/", - "companyId": "clickandchat" - }, - "click_back": { - "name": "Click Back", - "categoryId": 4, - "url": "http://www.clickback.com/", - "companyId": "clickback" - }, - "clickaider": { - "name": "ClickAider", - "categoryId": 4, - "url": "http://clickaider.com/", - "companyId": "clickaider" - }, - "clickbank": { - "name": "ClickBank", - "categoryId": 4, - "url": "http://www.clickbank.com/", - "companyId": "clickbank" - }, - "clickbank_proads": { - "name": "ClickBank ProAds", - "categoryId": 4, - "url": "http://www.cbproads.com/", - "companyId": "clickbank_proads" - }, - "clickbooth": { - "name": "Clickbooth", - "categoryId": 4, - "url": "http://www.clickbooth.com/", - "companyId": "clickbooth" - }, - "clickcease": { - "name": "ClickCease", - "categoryId": 2, - "url": "https://www.clickcease.com/", - "companyId": "click_cease" - }, - "clickcertain": { - "name": "ClickCertain", - "categoryId": 4, - "url": "http://www.clickcertain.com", - "companyId": "clickcertain" - }, - "clickdesk": { - "name": "ClickDesk", - "categoryId": 2, - "url": "https://www.clickdesk.com/", - "companyId": "clickdesk" - }, - "clickdimensions": { - "name": "ClickDimensions", - "categoryId": 4, - "url": "http://www.clickdimensions.com/", - "companyId": "clickdimensions" - }, - "clickequations": { - "name": "ClickEquations", - "categoryId": 4, - "url": "http://www.clickequations.com/", - "companyId": "acquisio" - }, - "clickexperts": { - "name": "ClickExperts", - "categoryId": 4, - "url": "http://clickexperts.com/corp/index.php?lang=en", - "companyId": "clickexperts" - }, - "clickforce": { - "name": "ClickForce", - "categoryId": 4, - "url": "http://www.clickforce.com.tw/", - "companyId": "clickforce" - }, - "clickinc": { - "name": "ClickInc", - "categoryId": 4, - "url": "http://www.clickinc.com", - "companyId": "clickinc" - }, - "clickintext": { - "name": "ClickInText", - "categoryId": 4, - "url": "http://www.clickintext.com/", - "companyId": "clickintext" - }, - "clickky": { - "name": "Clickky", - "categoryId": 4, - "url": "http://www.clickky.biz/", - "companyId": "clickky" - }, - "clickmeter": { - "name": "ClickMeter", - "categoryId": 4, - "url": "http://www.clickmeter.com", - "companyId": "clickmeter" - }, - "clickonometrics": { - "name": "Clickonometrics", - "categoryId": 4, - "url": "http://clickonometrics.pl/", - "companyId": "clickonometrics" - }, - "clickpoint": { - "name": "Clickpoint", - "categoryId": 4, - "url": "http://clickpoint.com/", - "companyId": "clickpoint" - }, - "clickprotector": { - "name": "ClickProtector", - "categoryId": 6, - "url": "http://www.clickprotector.com/", - "companyId": "clickprotector" - }, - "clickreport": { - "name": "ClickReport", - "categoryId": 6, - "url": "http://clickreport.com/", - "companyId": "clickreport" - }, - "clicks_thru_networks": { - "name": "Clicks Thru Networks", - "categoryId": 4, - "url": "http://www.clicksthrunetwork.com/", - "companyId": "clicksthrunetwork" - }, - "clicksor": { - "name": "Clicksor", - "categoryId": 4, - "url": "http://clicksor.com/", - "companyId": "clicksor" - }, - "clicktale": { - "name": "ClickTale", - "categoryId": 6, - "url": "http://www.clicktale.com/", - "companyId": "clicktale" - }, - "clicktripz": { - "name": "ClickTripz", - "categoryId": 4, - "url": "https://www.clicktripz.com", - "companyId": "clicktripz" - }, - "clickwinks": { - "name": "Clickwinks", - "categoryId": 4, - "url": "http://www.clickwinks.com/", - "companyId": "clickwinks" - }, - "clicky": { - "name": "Clicky", - "categoryId": 6, - "url": "http://getclicky.com/", - "companyId": "clicky" - }, - "clickyab": { - "name": "Clickyab", - "categoryId": 4, - "url": "https://www.clickyab.com/", - "companyId": "clickyab" - }, - "clicmanager": { - "name": "ClicManager", - "categoryId": 4, - "url": "http://www.clicmanager.fr/", - "companyId": "clicmanager" - }, - "clip_syndicate": { - "name": "Clip Syndicate", - "categoryId": 4, - "url": "http://www.clipsyndicate.com/", - "companyId": "clip_syndicate" - }, - "clixgalore": { - "name": "clixGalore", - "categoryId": 4, - "url": "http://www.clixgalore.com/", - "companyId": "clixgalore" - }, - "clixmetrix": { - "name": "ClixMetrix", - "categoryId": 4, - "url": "http://www.clixmetrix.com/", - "companyId": "clixmedia" - }, - "clixsense": { - "name": "ClixSense", - "categoryId": 4, - "url": "http://www.clixsense.com/", - "companyId": "clixsense" - }, - "cloud-media.fr": { - "name": "CloudMedia", - "categoryId": 4, - "url": "https://cloudmedia.fr/", - "companyId": null - }, - "cloudflare": { - "name": "CloudFlare", - "categoryId": 9, - "url": "https://www.cloudflare.com/", - "companyId": "cloudflare" - }, - "cloudimage.io": { - "name": "Cloudimage.io", - "categoryId": 9, - "url": "https://www.cloudimage.io/en/home", - "companyId": "scaleflex_sas" - }, - "cloudinary": { - "name": "Cloudinary", - "categoryId": 9, - "url": "https://cloudinary.com/", - "companyId": null - }, - "clove_network": { - "name": "Clove Network", - "categoryId": 4, - "url": "http://www.clovenetwork.com/", - "companyId": "clove_network" - }, - "clustrmaps": { - "name": "ClustrMaps", - "categoryId": 4, - "url": "http://www.clustrmaps.com/", - "companyId": "clustrmaps" - }, - "cnbc": { - "name": "CNBC", - "categoryId": 8, - "url": "https://www.cnbc.com/", - "companyId": "nbcuniversal" - }, - "cnetcontent.com": { - "name": "Cnetcontent", - "categoryId": 8, - "url": "http://cnetcontent.com/", - "companyId": "cbs_interactive" - }, - "cnstats": { - "name": "CNStats", - "categoryId": 6, - "url": "http://cnstats.ru/", - "companyId": "cnstats" - }, - "cnzz.com": { - "name": "Umeng", - "categoryId": 6, - "url": "http://www.umeng.com/", - "companyId": "umeng" - }, - "coadvertise": { - "name": "COADVERTISE", - "categoryId": 4, - "url": "http://www.coadvertise.com/", - "companyId": "coadvertise" - }, - "cobrowser": { - "name": "CoBrowser", - "categoryId": 2, - "url": "https://www.cobrowser.net/", - "companyId": "cobrowser.net" - }, - "codeonclick.com": { - "name": "codeonclick.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cogocast": { - "name": "CogoCast", - "categoryId": 4, - "url": "http://www.cogocast.com", - "companyId": "cogocast" - }, - "coin_have": { - "name": "Coin Have", - "categoryId": 4, - "url": "https://coin-have.com/", - "companyId": "coin_have" - }, - "coin_traffic": { - "name": "Coin Traffic", - "categoryId": 2, - "url": "https://cointraffic.io/", - "companyId": "coin_traffic" - }, - "coinhive": { - "name": "Coinhive", - "categoryId": 8, - "url": "https://coinhive.com/", - "companyId": "coinhive" - }, - "coinurl": { - "name": "CoinURL", - "categoryId": 4, - "url": "https://coinurl.com/", - "companyId": "coinurl" - }, - "coll1onf.com": { - "name": "coll1onf.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "coll2onf.com": { - "name": "coll2onf.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "collarity": { - "name": "Collarity", - "categoryId": 4, - "url": "http://www.collarity.com/", - "companyId": "collarity" - }, - "columbia_online": { - "name": "Columbia Online", - "categoryId": 4, - "url": "https://www.colombiaonline.com/", - "companyId": "columbia_online" - }, - "combotag": { - "name": "ComboTag", - "categoryId": 4, - "url": "https://www.combotag.com/", - "companyId": null - }, - "comcast_technology_solutions": { - "name": "Comcast Technology Solutions", - "categoryId": 0, - "url": "https://www.comcasttechnologysolutions.com/", - "companyId": "comcast_technology_solutions" - }, - "comm100": { - "name": "Comm100", - "categoryId": 2, - "url": "http://www.comm100.com/", - "companyId": "comm100" - }, - "commerce_sciences": { - "name": "Commerce Sciences", - "categoryId": 4, - "url": "http://commercesciences.com/", - "companyId": "commerce_sciences" - }, - "commercehub": { - "name": "CommerceHub", - "categoryId": 4, - "url": "http://www.mercent.com/", - "companyId": "commercehub" - }, - "commercialvalue.org": { - "name": "commercialvalue.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "commission_junction": { - "name": "CJ Affiliate", - "categoryId": 4, - "url": "http://www.cj.com/", - "companyId": "conversant" - }, - "communicator_corp": { - "name": "Communicator Corp", - "categoryId": 4, - "url": "http://www.communicatorcorp.com/", - "companyId": "communicator_corp" - }, - "communigator": { - "name": "CommuniGator", - "categoryId": 6, - "url": "http://www.wowanalytics.co.uk/", - "companyId": "communigator" - }, - "competexl": { - "name": "CompeteXL", - "categoryId": 6, - "url": "http://www.compete.com/help/s12", - "companyId": "wpp" - }, - "complex_media_network": { - "name": "Complex Media", - "categoryId": 4, - "url": "https://www.complex.com/", - "companyId": "verizon" - }, - "comprigo": { - "name": "comprigo", - "categoryId": 12, - "url": "https://www.comprigo.com/", - "companyId": null - }, - "comscore": { - "name": "ComScore, Inc.", - "categoryId": 6, - "url": "https://www.comscore.com/", - "companyId": "comscore" - }, - "conative.de": { - "name": "CoNative", - "categoryId": 4, - "url": "http://www.conative.de/", - "companyId": null - }, - "condenastdigital.com": { - "name": "Condé Nast Digital", - "categoryId": 8, - "url": "http://www.condenast.com/", - "companyId": "conde_nast" - }, - "conduit": { - "name": "Conduit", - "categoryId": 4, - "url": "http://www.conduit.com/", - "companyId": "conduit" - }, - "confirmit": { - "name": "Confirmit", - "categoryId": 4, - "url": "http://confirmit.com/", - "companyId": "confirmit" - }, - "congstar.de": { - "name": "congstar.de", - "categoryId": 4, - "url": null, - "companyId": null - }, - "connatix.com": { - "name": "Connatix", - "categoryId": 4, - "url": "https://connatix.com/", - "companyId": "connatix" - }, - "connectad": { - "name": "ConnectAd", - "categoryId": 4, - "url": "https://connectad.io/", - "companyId": "connectad" - }, - "connecto": { - "name": "Connecto", - "categoryId": 6, - "url": "http://www.connecto.io/", - "companyId": "connecto" - }, - "connexity": { - "name": "Connexity", - "categoryId": 4, - "url": "http://www.connexity.com", - "companyId": "shopzilla" - }, - "connextra": { - "name": "Connextra", - "categoryId": 4, - "url": "http://connextra.com/", - "companyId": "connextra" - }, - "constant_contact": { - "name": "Constant Contact", - "categoryId": 4, - "url": "http://www.constantcontact.com/index.jsp", - "companyId": "constant_contact" - }, - "consumable": { - "name": "Consumable", - "categoryId": 4, - "url": "http://consumable.com/index.html", - "companyId": "giftconnect" - }, - "contact_at_once": { - "name": "Contact At Once!", - "categoryId": 2, - "url": "http://www.contactatonce.com/", - "companyId": "contact_at_once!" - }, - "contact_impact": { - "name": "Contact Impact", - "categoryId": 4, - "url": "https://www.contactimpact.de/", - "companyId": "axel_springer" - }, - "contactme": { - "name": "ContactMe", - "categoryId": 4, - "url": "http://www.contactme.com", - "companyId": "contactme" - }, - "contaxe": { - "name": "Contaxe", - "categoryId": 5, - "url": "http://www.contaxe.com/", - "companyId": "contaxe" - }, - "content.ad": { - "name": "Content.ad", - "categoryId": 4, - "url": "https://www.content.ad/", - "companyId": "content.ad" - }, - "content_insights": { - "name": "Content Insights", - "categoryId": 6, - "url": "https://contentinsights.com/", - "companyId": "content_insights" - }, - "contentexchange.me": { - "name": "Content Exchange", - "categoryId": 6, - "url": "https://www.contentexchange.me/", - "companyId": "i.r.v." - }, - "contentful_gmbh": { - "name": "Contentful GmbH", - "categoryId": 9, - "url": "https://www.contentful.com/", - "companyId": "contentful_gmbh" - }, - "contentpass": { - "name": "ContentPass", - "categoryId": 6, - "url": "https://www.contentpass.de/", - "companyId": "contentpass" - }, - "contentsquare.net": { - "name": "ContentSquare", - "categoryId": 4, - "url": "https://www.contentsquare.com/", - "companyId": "content_square" - }, - "contentwrx": { - "name": "Contentwrx", - "categoryId": 6, - "url": "http://contentwrx.com/", - "companyId": "contentwrx" - }, - "context": { - "name": "C|ON|TEXT", - "categoryId": 4, - "url": "http://c-on-text.com", - "companyId": "c_on_text" - }, - "context.ad": { - "name": "Context.ad", - "categoryId": 4, - "url": "http://contextad.pl/", - "companyId": "context.ad" - }, - "continum_net": { - "name": "continum.net", - "categoryId": 10, - "url": "http://continum.net/", - "companyId": null - }, - "contribusource": { - "name": "Contribusource", - "categoryId": 4, - "url": "https://www.contribusource.com/", - "companyId": "contribusource" - }, - "convergetrack": { - "name": "ConvergeTrack", - "categoryId": 6, - "url": "http://www.convergedirect.com/technology/convergetrack.shtml", - "companyId": "convergedirect" - }, - "conversant": { - "name": "Conversant", - "categoryId": 4, - "url": "https://www.conversantmedia.eu/", - "companyId": "conversant" - }, - "conversio": { - "name": "CM Commerce", - "categoryId": 6, - "url": "https://cm-commerce.com/", - "companyId": "conversio" - }, - "conversion_logic": { - "name": "Conversion Logic", - "categoryId": 6, - "url": "http://www.conversionlogic.com/", - "companyId": "conversion_logic" - }, - "conversionruler": { - "name": "ConversionRuler", - "categoryId": 4, - "url": "http://www.conversionruler.com/", - "companyId": "market_ruler" - }, - "conversions_box": { - "name": "Conversions Box", - "categoryId": 7, - "url": "http://www.conversionsbox.com/", - "companyId": "conversions_box" - }, - "conversions_on_demand": { - "name": "Conversions On Demand", - "categoryId": 5, - "url": "https://www.conversionsondemand.com/", - "companyId": "conversions_on_demand" - }, - "conversive": { - "name": "Conversive", - "categoryId": 4, - "url": "http://www.conversive.nl/", - "companyId": "conversive" - }, - "convert": { - "name": "Convert", - "categoryId": 6, - "url": "https://www.convert.com/", - "companyId": "convert" - }, - "convertfox": { - "name": "ConvertFox", - "categoryId": 2, - "url": "https://convertfox.com/", - "companyId": "convertfox" - }, - "convertro": { - "name": "Convertro", - "categoryId": 4, - "url": "http://www.convertro.com/", - "companyId": "verizon" - }, - "conviva": { - "name": "Conviva", - "categoryId": 6, - "url": "http://www.conviva.com/", - "companyId": "conviva" - }, - "cookie_consent": { - "name": "Cookie Consent", - "categoryId": 5, - "url": "https://silktide.com/", - "companyId": "silktide" - }, - "cookie_script": { - "name": "Cookie Script", - "categoryId": 5, - "url": "https://cookie-script.com/", - "companyId": "cookie_script" - }, - "cookiebot": { - "name": "Cookiebot", - "categoryId": 5, - "url": "https://www.cookiebot.com/en/", - "companyId": "cybot" - }, - "cookieq": { - "name": "CookieQ", - "categoryId": 5, - "url": "http://cookieq.com/CookieQ", - "companyId": "baycloud" - }, - "cooliris": { - "name": "Cooliris", - "categoryId": 2, - "url": "http://www.cooliris.com", - "companyId": "cooliris" - }, - "copacet": { - "name": "Copacet", - "categoryId": 4, - "url": "http://copacet.com/", - "companyId": "copacet" - }, - "coreaudience": { - "name": "CoreAudience", - "categoryId": 4, - "url": "http://www.redaril.com/", - "companyId": "hearst" - }, - "coremotives": { - "name": "CoreMotives", - "categoryId": 4, - "url": "http://coremotives.com/", - "companyId": "coremotives" - }, - "coull": { - "name": "Coull", - "categoryId": 4, - "url": "http://coull.com/", - "companyId": "coull" - }, - "cpm_rocket": { - "name": "CPM Rocket", - "categoryId": 4, - "url": "http://www.cpmrocket.com/", - "companyId": "cpm_rocket" - }, - "cpmprofit": { - "name": "CPMProfit", - "categoryId": 4, - "url": "http://www.cpmprofit.com/", - "companyId": "cpmprofit" - }, - "cpmstar": { - "name": "CPMStar", - "categoryId": 4, - "url": "http://www.cpmstar.com", - "companyId": "cpmstar" - }, - "cpx.to": { - "name": "Captify", - "categoryId": 4, - "url": "https://www.captify.co.uk/", - "companyId": "captify" - }, - "cq_counter": { - "name": "CQ Counter", - "categoryId": 6, - "url": "http://www.cqcounter.com/", - "companyId": "cq_counter" - }, - "cqq5id8n.com": { - "name": "cqq5id8n.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cquotient.com": { - "name": "CQuotient", - "categoryId": 6, - "url": "https://www.demandware.com/#cquotient", - "companyId": "salesforce" - }, - "craftkeys": { - "name": "CraftKeys", - "categoryId": 4, - "url": "http://craftkeys.com/", - "companyId": "craftkeys" - }, - "crakmedia_network": { - "name": "Crakmedia Network", - "categoryId": 4, - "url": "http://crakmedia.com/", - "companyId": "crakmedia_network" - }, - "crankyads": { - "name": "CrankyAds", - "categoryId": 4, - "url": "http://www.crankyads.com", - "companyId": "crankyads" - }, - "crazy_egg": { - "name": "Crazy Egg", - "categoryId": 6, - "url": "http://crazyegg.com/", - "companyId": "crazy_egg" - }, - "creafi": { - "name": "Creafi", - "categoryId": 4, - "url": "http://www.creafi.com/en/home/", - "companyId": "crazy4media" - }, - "createjs": { - "name": "CreateJS", - "categoryId": 9, - "url": "https://createjs.com/", - "companyId": null - }, - "creative_commons": { - "name": "Creative Commons", - "categoryId": 8, - "url": "https://creativecommons.org/", - "companyId": "creative_commons_corp" - }, - "crimsonhexagon_com": { - "name": "Brandwatch", - "categoryId": 6, - "url": "https://www.brandwatch.com/", - "companyId": "brandwatch" - }, - "crimtan": { - "name": "Crimtan", - "categoryId": 4, - "url": "http://www.crimtan.com/", - "companyId": "crimtan" - }, - "crisp": { - "name": "Crisp", - "categoryId": 2, - "url": "https://crisp.chat/", - "companyId": "crisp" - }, - "criteo": { - "name": "Criteo", - "categoryId": 4, - "url": "http://www.criteo.com/", - "companyId": "criteo" - }, - "crm4d": { - "name": "CRM4D", - "categoryId": 6, - "url": "https://crm4d.com/", - "companyId": "crm4d" - }, - "crossengage": { - "name": "CrossEngage", - "categoryId": 6, - "url": "https://www.crossengage.io/", - "companyId": "crossengage" - }, - "crosspixel": { - "name": "Cross Pixel", - "categoryId": 4, - "url": "http://crosspixel.net/", - "companyId": "cross_pixel" - }, - "crosssell.info": { - "name": "econda Cross Sell", - "categoryId": 4, - "url": "https://www.econda.de/en/solutions/personalization/cross-sell/", - "companyId": "econda" - }, - "crossss": { - "name": "Crossss", - "categoryId": 4, - "url": "http://crossss.ru/", - "companyId": "crossss" - }, - "crowd_ignite": { - "name": "Crowd Ignite", - "categoryId": 4, - "url": "http://get.crowdignite.com/", - "companyId": "gorilla_nation_media" - }, - "crowd_science": { - "name": "Crowd Science", - "categoryId": 4, - "url": "http://www.crowdscience.com/", - "companyId": "crowd_science" - }, - "crowdprocess": { - "name": "CrowdProcess", - "categoryId": 2, - "url": "https://crowdprocess.com", - "companyId": "crowdprocess" - }, - "crowdynews": { - "name": "Crowdynews", - "categoryId": 7, - "url": "http://www.crowdynews.com/", - "companyId": "crowdynews" - }, - "crownpeak": { - "name": "Crownpeak", - "categoryId": 5, - "url": "https://www.crownpeak.com/", - "companyId": "crownpeak" - }, - "cryptoloot_miner": { - "name": "CryptoLoot Miner", - "categoryId": 4, - "url": "https://crypto-loot.com/", - "companyId": "cryptoloot" - }, - "ctnetwork": { - "name": "CTnetwork", - "categoryId": 4, - "url": "http://ctnetwork.hu/", - "companyId": "ctnetwork" - }, - "ctrlshift": { - "name": "CtrlShift", - "categoryId": 4, - "url": "http://www.adzcentral.com/", - "companyId": "ctrlshift" - }, - "cubed": { - "name": "Cubed", - "categoryId": 6, - "url": "http://withcubed.com/", - "companyId": "cubed_attribution" - }, - "cuelinks": { - "name": "CueLinks", - "categoryId": 4, - "url": "http://www.cuelinks.com/", - "companyId": "cuelinks" - }, - "cup_interactive": { - "name": "Cup Interactive", - "categoryId": 4, - "url": "http://www.cupinteractive.com/", - "companyId": "cup_interactive" - }, - "curse.com": { - "name": "Curse", - "categoryId": 8, - "url": "https://www.curse.com/", - "companyId": "amazon_associates" - }, - "cursecdn.com": { - "name": "Curse CDN", - "categoryId": 9, - "url": "https://www.curse.com/", - "companyId": "amazon_associates" - }, - "customer.io": { - "name": "Customer.io", - "categoryId": 2, - "url": "http://www.customer.io/", - "companyId": "customer.io" - }, - "customerly": { - "name": "Customerly", - "categoryId": 2, - "url": "https://www.customerly.io/", - "companyId": "customerly" - }, - "cxense": { - "name": "cXense", - "categoryId": 4, - "url": "http://www.cxense.com/", - "companyId": "cxense" - }, - "cxo.name": { - "name": "Chip Analytics", - "categoryId": 6, - "url": "http://www.chip.de/", - "companyId": null - }, - "cyber_wing": { - "name": "Cyber Wing", - "categoryId": 4, - "url": "http://www.cyberwing.co.jp/", - "companyId": "cyberwing" - }, - "cybersource": { - "name": "CyberSource", - "categoryId": 6, - "url": "https://www.cybersource.com/en-gb.html", - "companyId": "visa" - }, - "cygnus": { - "name": "Cygnus", - "categoryId": 4, - "url": "http://www.cygnus.com/", - "companyId": "cygnus" - }, - "da-ads.com": { - "name": "da-ads.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "dailymail.co.uk": { - "name": "Daily Mail", - "categoryId": 8, - "url": "http://www.dailymail.co.uk/home/index.html", - "companyId": "dmg_media" - }, - "dailymotion": { - "name": "Dailymotion", - "categoryId": 8, - "url": "https://vivendi.com/", - "companyId": "vivendi" - }, - "dailymotion_advertising": { - "name": "Dailymotion Advertising", - "categoryId": 4, - "url": "http://advertising.dailymotion.com/", - "companyId": "vivendi" - }, - "daisycon": { - "name": "Daisycon", - "categoryId": 4, - "url": "http://www.daisycon.com", - "companyId": "daisycon" - }, - "dantrack.net": { - "name": "DANtrack", - "categoryId": 4, - "url": "http://media.dantrack.net/privacy/", - "companyId": "dentsu_aegis_network" - }, - "darwin_marketing": { - "name": "Darwin Marketing", - "categoryId": 4, - "url": "http://www.darwinmarketing.com/", - "companyId": "darwin_marketing" - }, - "dashboard_ad": { - "name": "Dashboard Ad", - "categoryId": 4, - "url": "http://www.dashboardad.com/", - "companyId": "premium_access" - }, - "datacaciques.com": { - "name": "DataCaciques", - "categoryId": 6, - "url": "http://www.datacaciques.com/", - "companyId": null - }, - "datacoral": { - "name": "Datacoral", - "categoryId": 4, - "url": "https://datacoral.com/", - "companyId": "datacoral" - }, - "datacrushers": { - "name": "Datacrushers", - "categoryId": 6, - "url": "https://www.datacrushers.com/", - "companyId": "datacrushers" - }, - "datadome": { - "name": "DataDome", - "categoryId": 6, - "url": "https://datadome.co/", - "companyId": "datadome" - }, - "datalicious_datacollector": { - "name": "Datalicious DataCollector", - "categoryId": 6, - "url": "http://www.datalicious.com/", - "companyId": "datalicious" - }, - "datalicious_supertag": { - "name": "Datalicious SuperTag", - "categoryId": 5, - "url": "http://www.datalicious.com/", - "companyId": "datalicious" - }, - "datalogix": { - "name": "Datalogix", - "categoryId": 4, - "url": "https://www.oracle.com/corporate/acquisitions/datalogix/", - "companyId": "oracle" - }, - "datamind.ru": { - "name": "DataMind", - "categoryId": 4, - "url": "http://datamind.ru/", - "companyId": "datamind" - }, - "datatables": { - "name": "DataTables", - "categoryId": 2, - "url": "https://datatables.net/", - "companyId": null - }, - "datawrkz": { - "name": "Datawrkz", - "categoryId": 4, - "url": "http://datawrkz.com/", - "companyId": "datawrkz" - }, - "dataxpand": { - "name": "Dataxpand", - "categoryId": 4, - "url": "http://dataxpand.com/", - "companyId": "dataxpand" - }, - "dataxu": { - "name": "DataXu", - "categoryId": 4, - "url": "http://www.dataxu.com/", - "companyId": "dataxu" - }, - "datds.net": { - "name": "datds.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "datonics": { - "name": "Datonics", - "categoryId": 4, - "url": "http://datonics.com/", - "companyId": "almondnet" - }, - "datran": { - "name": "Pulsepoint", - "categoryId": 4, - "url": "https://www.pulsepoint.com/", - "companyId": "pulsepoint_ad_exchange" - }, - "davebestdeals.com": { - "name": "davebestdeals.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "dawandastatic.com": { - "name": "Dawanda CDN", - "categoryId": 8, - "url": "https://dawanda.com/", - "companyId": null - }, - "dc_stormiq": { - "name": "DC StormIQ", - "categoryId": 4, - "url": "http://www.dc-storm.com/", - "companyId": "dc_storm" - }, - "dcbap.com": { - "name": "dcbap.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "dcmn.com": { - "name": "DCMN", - "categoryId": 4, - "url": "https://www.dcmn.com/", - "companyId": null - }, - "de_persgroep": { - "name": "De Persgroep", - "categoryId": 4, - "url": "https://www.persgroep.nl", - "companyId": "de_persgroep" - }, - "deadline_funnel": { - "name": "Deadline Funnel", - "categoryId": 6, - "url": "https://deadlinefunnel.com/", - "companyId": "deadline_funnel" - }, - "dealer.com": { - "name": "Dealer.com", - "categoryId": 6, - "url": "http://www.dealer.com/", - "companyId": "dealer.com" - }, - "decibel_insight": { - "name": "Decibel Insight", - "categoryId": 6, - "url": "https://www.decibelinsight.com/", - "companyId": "decibel_insight" - }, - "dedicated_media": { - "name": "Dedicated Media", - "categoryId": 4, - "url": "http://www.dedicatedmedia.com/", - "companyId": "dedicated_media" - }, - "deep.bi": { - "name": "Deep.BI", - "categoryId": 6, - "url": "http://www.deep.bi/#", - "companyId": "deep.bi" - }, - "deepintent.com": { - "name": "DeepIntent", - "categoryId": 4, - "url": "https://www.deepintent.com/", - "companyId": "deep_intent" - }, - "defpush.com": { - "name": "defpush.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "deichmann.com": { - "name": "deichmann.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "delacon": { - "name": "Delacon", - "categoryId": 6, - "url": "http://www.delacon.com.au/", - "companyId": "delacon" - }, - "delivr": { - "name": "Delivr", - "categoryId": 6, - "url": "http://www.percentmobile.com/", - "companyId": "delivr" - }, - "delta_projects": { - "name": "Delta Projects", - "categoryId": 4, - "url": "http://www.adaction.se/", - "companyId": "delta_projects" - }, - "deluxe": { - "name": "Deluxe", - "categoryId": 6, - "url": "https://ww.deluxe.com/", - "companyId": "deluxe" - }, - "delve_networks": { - "name": "Delve Networks", - "categoryId": 7, - "url": "http://www.delvenetworks.com/", - "companyId": "limelight_networks" - }, - "demandbase": { - "name": "Demandbase", - "categoryId": 4, - "url": "http://www.demandbase.com/", - "companyId": "demandbase" - }, - "demandmedia": { - "name": "DemandMedia", - "categoryId": 4, - "url": "http://www.demandmedia.com", - "companyId": "leaf_group" - }, - "deqwas": { - "name": "Deqwas", - "categoryId": 6, - "url": "http://www.deqwas.com/", - "companyId": "deqwas" - }, - "devatics": { - "name": "Devatics", - "categoryId": 2, - "url": "http://www.devatics.co.uk/", - "companyId": "devatics" - }, - "developer_media": { - "name": "Developer Media", - "categoryId": 4, - "url": "http://www.developermedia.com/", - "companyId": "developer_media" - }, - "deviantart.net": { - "name": "deviantart.net", - "categoryId": 8, - "url": null, - "companyId": null - }, - "dex_platform": { - "name": "DEX Platform", - "categoryId": 4, - "url": "http://blueadvertise.com/", - "companyId": "dex_platform" - }, - "dgm": { - "name": "dgm", - "categoryId": 4, - "url": "http://www.dgm-au.com/", - "companyId": "apd" - }, - "dialogtech": { - "name": "Dialogtech", - "categoryId": 6, - "url": "https://www.dialogtech.com/", - "companyId": "dialogtech" - }, - "dianomi": { - "name": "Dianomi", - "categoryId": 4, - "url": "http://www.dianomi.com/cms/", - "companyId": "dianomi" - }, - "didit_blizzard": { - "name": "Didit Blizzard", - "categoryId": 4, - "url": "http://www.didit.com/blizzard", - "companyId": "didit" - }, - "didit_maestro": { - "name": "Didit Maestro", - "categoryId": 4, - "url": "http://www.didit.com/maestro", - "companyId": "didit" - }, - "didomi": { - "name": "Didomi", - "categoryId": 5, - "url": "https://www.didomi.io/en/", - "companyId": "didomi" - }, - "digg_widget": { - "name": "Digg Widget", - "categoryId": 2, - "url": "http://digg.com/apple/Digg_Widget", - "companyId": "buysellads.com" - }, - "digicert_trust_seal": { - "name": "Digicert Trust Seal", - "categoryId": 5, - "url": "http://www.digicert.com/", - "companyId": "digicert" - }, - "digidip": { - "name": "Digidip", - "categoryId": 4, - "url": "http://www.digidip.net/", - "companyId": "digidip" - }, - "digiglitz": { - "name": "Digiglitz", - "categoryId": 6, - "url": "http://www.digiglitz.com/", - "companyId": "digiglitz" - }, - "digilant": { - "name": "Digilant", - "categoryId": 4, - "url": "https://www.digilant.com/", - "companyId": "digilant" - }, - "digioh": { - "name": "Digioh", - "categoryId": 4, - "url": "https://digioh.com/", - "companyId": null - }, - "digital.gov": { - "name": "Digital.gov", - "categoryId": 6, - "url": "https://digital.gov/", - "companyId": "us_government" - }, - "digital_control_room": { - "name": "Digital Control Room", - "categoryId": 5, - "url": "http://www.cookiereports.com/", - "companyId": "digital_control_room" - }, - "digital_nomads": { - "name": "Digital Nomads", - "categoryId": 4, - "url": "http://dnomads.net/", - "companyId": null - }, - "digital_remedy": { - "name": "Digital Remedy", - "categoryId": 4, - "url": "https://www.digitalremedy.com/", - "companyId": "digital_remedy" - }, - "digital_river": { - "name": "Digital River", - "categoryId": 4, - "url": "http://corporate.digitalriver.com", - "companyId": "digital_river" - }, - "digital_window": { - "name": "Digital Window", - "categoryId": 4, - "url": "http://www.digitalwindow.com/", - "companyId": "axel_springer" - }, - "digiteka": { - "name": "Digiteka", - "categoryId": 4, - "url": "http://digiteka.com/", - "companyId": "digiteka" - }, - "digitrust": { - "name": "DigiTrust", - "categoryId": 4, - "url": "http://www.digitru.st/", - "companyId": "iab" - }, - "dihitt_badge": { - "name": "diHITT Badge", - "categoryId": 7, - "url": "http://www.dihitt.com.br/", - "companyId": "dihitt" - }, - "dimml": { - "name": "DimML", - "categoryId": 8, - "url": null, - "companyId": null - }, - "direct_keyword_link": { - "name": "Direct Keyword Link", - "categoryId": 4, - "url": "http://www.keywordsconnect.com/", - "companyId": "direct_keyword_link" - }, - "directadvert": { - "name": "Direct/ADVERT", - "categoryId": 4, - "url": "http://www.directadvert.ru/", - "companyId": "directadvert" - }, - "directrev": { - "name": "DirectREV", - "categoryId": 4, - "url": "http://www.directrev.com/", - "companyId": "directrev" - }, - "discord": { - "name": "Discord", - "categoryId": 2, - "url": "https://discordapp.com/", - "companyId": null - }, - "display_block": { - "name": "display block", - "categoryId": 4, - "url": "https://www.displayblock.com/", - "companyId": "display_block" - }, - "disqus": { - "name": "Disqus", - "categoryId": 1, - "url": "https://disqus.com/", - "companyId": "zeta" - }, - "disqus_ads": { - "name": "Disqus Ads", - "categoryId": 4, - "url": "https://disqusads.com/", - "companyId": "zeta" - }, - "distil_tag": { - "name": "Distil Networks", - "categoryId": 5, - "url": "https://www.distilnetworks.com/", - "companyId": "distil_networks" - }, - "districtm.io": { - "name": "district m", - "categoryId": 4, - "url": "https://districtm.net/", - "companyId": "district_m" - }, - "distroscale": { - "name": "Distroscale", - "categoryId": 6, - "url": "http://www.distroscale.com/", - "companyId": "distroscale" - }, - "div.show": { - "name": "div.show", - "categoryId": 12, - "url": null, - "companyId": null - }, - "diva": { - "name": "DiVa", - "categoryId": 6, - "url": "http://www.vertriebsassistent.de/", - "companyId": "diva" - }, - "divvit": { - "name": "Divvit", - "categoryId": 6, - "url": "https://www.divvit.com/", - "companyId": "divvit" - }, - "dm2": { - "name": "DM2", - "categoryId": 4, - "url": "http://digitalmediamanagement.com/", - "companyId": "digital_media_management" - }, - "dmg_media": { - "name": "DMG Media", - "categoryId": 8, - "url": "https://www.dmgmedia.co.uk/", - "companyId": "dmgt" - }, - "dmm": { - "name": "DMM", - "categoryId": 3, - "url": "http://www.dmm.co.jp", - "companyId": "dmm.r18" - }, - "dmwd": { - "name": "DMWD", - "categoryId": 8, - "url": null, - "companyId": null - }, - "dockvine": { - "name": "dockvine", - "categoryId": 2, - "url": "https://www.dockvine.com", - "companyId": "dockvine" - }, - "docler": { - "name": "Docler", - "categoryId": 0, - "url": "https://www.doclerholding.com/en/about/companies/33/", - "companyId": "docler_ip" - }, - "dogannet": { - "name": "Dogannet", - "categoryId": 4, - "url": "http://s.dogannet.tv/", - "companyId": "dogannet" - }, - "domodomain": { - "name": "DomoDomain", - "categoryId": 6, - "url": "http://www.domodomain.com/", - "companyId": "intelligencefocus" - }, - "donationtools": { - "name": "iRobinHood", - "categoryId": 12, - "url": "http://www.irobinhood.org", - "companyId": null - }, - "doofinder.com": { - "name": "doofinder", - "categoryId": 2, - "url": "https://www.doofinder.com/", - "companyId": null - }, - "doorbell.io": { - "name": "Doorbell.io", - "categoryId": 5, - "url": "https://doorbell.io/", - "companyId": "doorbell.io" - }, - "dotandmedia": { - "name": "DotAndMedia", - "categoryId": 4, - "url": "http://www.dotandmedia.com", - "companyId": "dotandmedia" - }, - "dotmailer": { - "name": "dotMailer", - "categoryId": 2, - "url": "http://www.dotdigitalgroup.com/", - "companyId": "dotdigital_group" - }, - "dotmetrics.net": { - "name": "Dotmetrics", - "categoryId": 6, - "url": "https://dotmetrics.net/", - "companyId": null - }, - "dotomi": { - "name": "Dotomi", - "categoryId": 4, - "url": "http://www.dotomi.com/", - "companyId": "conversant" - }, - "double.net": { - "name": "Double.net", - "categoryId": 4, - "url": "http://double.net/en/", - "companyId": "double.net" - }, - "doubleclick": { - "name": "DoubleClick", - "categoryId": 4, - "url": "http://www.doubleclick.com", - "companyId": "google" - }, - "doubleclick_ad_buyer": { - "name": "DoubleClick Ad Exchange-Buyer", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "doubleclick_bid_manager": { - "name": "DoubleClick Bid Manager", - "categoryId": 4, - "url": "http://www.invitemedia.com", - "companyId": "google" - }, - "doubleclick_floodlight": { - "name": "DoubleClick Floodlight", - "categoryId": 4, - "url": "http://www.google.com/support/dfa/partner/bin/topic.py?topic=23943", - "companyId": "google" - }, - "doubleclick_spotlight": { - "name": "DoubleClick Spotlight", - "categoryId": 4, - "url": "http://www.doubleclick.com/products/richmedia", - "companyId": "google" - }, - "doubleclick_video_stats": { - "name": "Doubleclick Video Stats", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "doublepimp": { - "name": "DoublePimp", - "categoryId": 3, - "url": "http://www.doublepimp.com/", - "companyId": "doublepimp" - }, - "doubleverify": { - "name": "DoubleVerify", - "categoryId": 4, - "url": "http://www.doubleverify.com/", - "companyId": "doubleverify" - }, - "dratio": { - "name": "Dratio", - "categoryId": 6, - "url": "http://www.dratio.com/", - "companyId": "dratio" - }, - "drawbridge": { - "name": "Drawbridge", - "categoryId": 4, - "url": "http://www.drawbrid.ge/", - "companyId": "drawbridge" - }, - "dreamlab.pl": { - "name": "DreamLab.pl", - "categoryId": 4, - "url": "https://www.dreamlab.pl/", - "companyId": "onet.pl" - }, - "drift": { - "name": "Drift", - "categoryId": 2, - "url": "https://www.drift.com/", - "companyId": "drift" - }, - "drip": { - "name": "Drip", - "categoryId": 2, - "url": "https://www.getdrip.com", - "companyId": "drip" - }, - "dropbox.com": { - "name": "Dropbox", - "categoryId": 2, - "url": "https://www.dropbox.com/", - "companyId": null - }, - "dsnr_media_group": { - "name": "DSNR Media Group", - "categoryId": 4, - "url": "http://www.dsnrmg.com/", - "companyId": "dsnr_media_group" - }, - "dsp_rambler": { - "name": "Rambler DSP", - "categoryId": 4, - "url": "http://dsp.rambler.ru/", - "companyId": "rambler" - }, - "dstillery": { - "name": "Dstillery", - "categoryId": 4, - "url": "https://dstillery.com/", - "companyId": "dstillery" - }, - "dtscout.com": { - "name": "DTScout", - "categoryId": 4, - "url": "http://www.dtscout.com/", - "companyId": "dtscout" - }, - "dudamobile": { - "name": "DudaMobile", - "categoryId": 4, - "url": "https://www.dudamobile.com/", - "companyId": "dudamobile" - }, - "dun_and_bradstreet": { - "name": "Dun and Bradstreet", - "categoryId": 6, - "url": "http://www.dnb.com/#", - "companyId": "dun_&_bradstreet" - }, - "dwstat.cn": { - "name": "dwstat.cn", - "categoryId": 6, - "url": "http://www.dwstat.cn/", - "companyId": "dwstat" - }, - "dynad": { - "name": "DynAd", - "categoryId": 4, - "url": "http://dynad.net/", - "companyId": "dynad" - }, - "dynadmic": { - "name": "DynAdmic", - "categoryId": 4, - "url": null, - "companyId": null - }, - "dynamic_1001_gmbh": { - "name": "Dynamic 1001 GmbH", - "categoryId": 8, - "url": null, - "companyId": null - }, - "dynamic_logic": { - "name": "Dynamic Logic", - "categoryId": 4, - "url": "http://www.dynamiclogic.com/", - "companyId": "millward_brown" - }, - "dynamic_yield": { - "name": "Dynamic Yield", - "categoryId": 5, - "url": "https://www.dynamicyield.com/", - "companyId": "dynamic_yield" - }, - "dynamic_yield_analytics": { - "name": "Dynamic Yield Analytics", - "categoryId": 6, - "url": "http://www.dynamicyield.com/", - "companyId": "dynamic_yield" - }, - "dynata": { - "name": "Dynata", - "categoryId": 4, - "url": "http://hottraffic.nl/en", - "companyId": "dynata" - }, - "dynatrace.com": { - "name": "Dynatrace", - "categoryId": 6, - "url": "https://www.dynatrace.com/", - "companyId": "thoma_bravo" - }, - "dyncdn.me": { - "name": "dyncdn.me", - "categoryId": 11, - "url": null, - "companyId": null - }, - "e-planning": { - "name": "e-planning", - "categoryId": 4, - "url": "http://www.e-planning.net/", - "companyId": "e-planning" - }, - "eadv": { - "name": "eADV", - "categoryId": 4, - "url": "http://eadv.it/", - "companyId": "eadv" - }, - "eanalyzer.de": { - "name": "eanalyzer.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "early_birds": { - "name": "Early Birds", - "categoryId": 4, - "url": "http://www.early-birds.fr/", - "companyId": "early_birds" - }, - "earnify": { - "name": "Earnify", - "categoryId": 4, - "url": "https://www.earnify.com/", - "companyId": "earnify" - }, - "earnify_tracker": { - "name": "Earnify Tracker", - "categoryId": 6, - "url": "https://www.earnify.com/", - "companyId": "earnify" - }, - "easyads": { - "name": "EasyAds", - "categoryId": 4, - "url": "https://easyads.bg/", - "companyId": "easyads" - }, - "easylist_club": { - "name": "easylist.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ebay": { - "name": "eBay Stats", - "categoryId": 4, - "url": "https://partnernetwork.ebay.com/", - "companyId": "ebay_partner_network" - }, - "ebay_korea": { - "name": "eBay Korea", - "categoryId": 4, - "url": "http://www.ebay.com/", - "companyId": "ebay" - }, - "ebay_partner_network": { - "name": "eBay Partner Network", - "categoryId": 4, - "url": "https://www.ebaypartnernetwork.com/files/hub/en-US/index.html", - "companyId": "ebay_partner_network" - }, - "ebuzzing": { - "name": "eBuzzing", - "categoryId": 4, - "url": "http://www.ebuzzing.com/", - "companyId": "ebuzzing" - }, - "echo": { - "name": "Echo", - "categoryId": 4, - "url": "http://js-kit.com/", - "companyId": "echo" - }, - "eclick": { - "name": "eClick", - "categoryId": 4, - "url": "http://eclick.vn", - "companyId": "eclick" - }, - "econda": { - "name": "Econda", - "categoryId": 6, - "url": "http://www.econda.de/", - "companyId": "econda" - }, - "ecotag": { - "name": "ecotag", - "categoryId": 4, - "url": "http://www.eco-tag.jp/", - "companyId": "ecotag" - }, - "edigitalresearch": { - "name": "eDigitalResearch", - "categoryId": 4, - "url": "http://www.edigitalresearch.com/", - "companyId": "edigitalresearch" - }, - "effective_measure": { - "name": "Effective Measure", - "categoryId": 4, - "url": "http://www.effectivemeasure.com/", - "companyId": "effective_measure" - }, - "effiliation": { - "name": "Effiliation", - "categoryId": 4, - "url": "http://www.effiliation.com/", - "companyId": "effiliation" - }, - "egain": { - "name": "eGain", - "categoryId": 2, - "url": "http://www.egain.com/", - "companyId": "egain" - }, - "egain_analytics": { - "name": "eGain Analytics", - "categoryId": 6, - "url": "http://www.egain.com/", - "companyId": "egain" - }, - "ehi-siegel_de": { - "name": "ehi-siegel.de", - "categoryId": 2, - "url": "http://ehi-siegel.de/", - "companyId": null - }, - "ekmpinpoint": { - "name": "ekmPinPoint", - "categoryId": 6, - "url": "http://ekmpinpoint.com/", - "companyId": "ekmpinpoint" - }, - "ekomi": { - "name": "eKomi", - "categoryId": 1, - "url": "http://www.ekomi.co.uk", - "companyId": "ekomi" - }, - "elastic_ad": { - "name": "Elastic Ad", - "categoryId": 4, - "url": "http://www.elasticad.com", - "companyId": "elastic_ad" - }, - "elastic_beanstalk": { - "name": "Elastic Beanstalk", - "categoryId": 6, - "url": "http://www.amazon.com/", - "companyId": "amazon_associates" - }, - "elicit": { - "name": "elicit", - "categoryId": 4, - "url": "http://www.elicitsearch.com/", - "companyId": "elicit" - }, - "eloqua": { - "name": "Eloqua", - "categoryId": 4, - "url": "http://www.eloqua.com/", - "companyId": "oracle" - }, - "eluxer_net": { - "name": "eluxer.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "email_aptitude": { - "name": "Email Aptitude", - "categoryId": 4, - "url": "http://www.emailaptitude.com/", - "companyId": "email_aptitude" - }, - "email_attitude": { - "name": "Email Attitude", - "categoryId": 4, - "url": "http://us.email-attitude.com/Default.aspx", - "companyId": "1000mercis" - }, - "emarketeer": { - "name": "emarketeer", - "categoryId": 4, - "url": "http://www.emarketeer.com/", - "companyId": "emarketeer" - }, - "embed.ly": { - "name": "Embedly", - "categoryId": 6, - "url": "http://embed.ly/", - "companyId": "medium" - }, - "emediate": { - "name": "Emediate", - "categoryId": 4, - "url": "http://www.emediate.biz/", - "companyId": "cxense" - }, - "emetriq": { - "name": "emetriq", - "categoryId": 4, - "url": "http://www.emetriq.com", - "companyId": "emetriq" - }, - "emma": { - "name": "Emma", - "categoryId": 4, - "url": "http://myemma.com/", - "companyId": "emma" - }, - "emnet": { - "name": "eMnet", - "categoryId": 4, - "url": "http://www.emnet.co.kr", - "companyId": "emnet" - }, - "empathy": { - "name": "Empathy", - "categoryId": 4, - "url": "http://www.colbenson.com", - "companyId": "empathy" - }, - "emsmobile.de": { - "name": "EMS Mobile", - "categoryId": 8, - "url": "http://www.emsmobile.com/", - "companyId": null - }, - "encore_metrics": { - "name": "Encore Metrics", - "categoryId": 4, - "url": "http://sitecompass.com", - "companyId": "flashtalking" - }, - "enecto_analytics": { - "name": "Enecto Analytics", - "categoryId": 6, - "url": "http://www.enecto.com/en/", - "companyId": "enecto" - }, - "engage_sciences": { - "name": "Engage Sciences", - "categoryId": 6, - "url": "http://www.engagesciences.com/", - "companyId": "engagesciences" - }, - "engageya_widget": { - "name": "Engageya Widget", - "categoryId": 4, - "url": "http://www.engageya.com/home/", - "companyId": "engageya" - }, - "engagio": { - "name": "Engagio", - "categoryId": 6, - "url": "https://www.engagio.com/", - "companyId": "engagio" - }, - "engineseeker": { - "name": "EngineSeeker", - "categoryId": 4, - "url": "http://www.engineseeker.com/", - "companyId": "engineseeker" - }, - "enquisite": { - "name": "Enquisite", - "categoryId": 4, - "url": "http://www.enquisite.com/", - "companyId": "inboundwriter" - }, - "enreach": { - "name": "Enreach", - "categoryId": 4, - "url": "https://enreach.me/", - "companyId": "enreach" - }, - "ensemble": { - "name": "Ensemble", - "categoryId": 4, - "url": "http://www.tumri.com", - "companyId": "ensemble" - }, - "ensighten": { - "name": "Ensighten", - "categoryId": 5, - "url": "http://www.ensighten.com", - "companyId": "ensighten" - }, - "envolve": { - "name": "Envolve", - "categoryId": 2, - "url": "https://www.envolve.com/", - "companyId": "envolve" - }, - "envybox": { - "name": "Envybox", - "categoryId": 2, - "url": "https://envybox.io/", - "companyId": "envybox" - }, - "eperflex": { - "name": "Eperflex", - "categoryId": 4, - "url": "https://eperflex.com/", - "companyId": "ividence" - }, - "epic_game_ads": { - "name": "Epic Game Ads", - "categoryId": 4, - "url": "http://www.epicgameads.com/", - "companyId": "epic_game_ads" - }, - "epic_marketplace": { - "name": "Epic Marketplace", - "categoryId": 4, - "url": "http://www.trafficmarketplace.com/", - "companyId": "epic_advertising" - }, - "epom": { - "name": "Epom", - "categoryId": 4, - "url": "http://epom.com/", - "companyId": "epom" - }, - "epoq": { - "name": "epoq", - "categoryId": 2, - "url": "http://www.epoq.de/", - "companyId": "epoq" - }, - "eprice": { - "name": "ePrice", - "categoryId": 4, - "url": "http://banzaiadv.it/", - "companyId": "eprice" - }, - "eproof": { - "name": "eProof", - "categoryId": 6, - "url": "http://www.eproof.com/", - "companyId": "eproof" - }, - "eqs_group": { - "name": "EQS Group", - "categoryId": 6, - "url": "https://www.eqs.com/", - "companyId": "eqs_group" - }, - "eqworks": { - "name": "EQWorks", - "categoryId": 4, - "url": "http://eqads.com", - "companyId": "eq_works" - }, - "eroadvertising": { - "name": "EroAdvertising", - "categoryId": 3, - "url": "http://www.ero-advertising.com/", - "companyId": "ero_advertising" - }, - "errorception": { - "name": "Errorception", - "categoryId": 6, - "url": "http://errorception.com/", - "companyId": "errorception" - }, - "eshopcomp.com": { - "name": "eshopcomp.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "espn_cdn": { - "name": "ESPN CDN", - "categoryId": 9, - "url": "http://www.espn.com/", - "companyId": "disney" - }, - "esprit.de": { - "name": "esprit.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "estat": { - "name": "eStat", - "categoryId": 6, - "url": "http://www.mediametrie-estat.com/", - "companyId": "mediametrie" - }, - "etag": { - "name": "etag", - "categoryId": 4, - "url": "http://etagdigital.com.br/", - "companyId": "etag" - }, - "etahub.com": { - "name": "etahub.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "etarget": { - "name": "Etarget", - "categoryId": 4, - "url": "http://etargetnet.com/", - "companyId": "etarget" - }, - "ethnio": { - "name": "Ethnio", - "categoryId": 4, - "url": "http://ethn.io/", - "companyId": "ethnio" - }, - "etology": { - "name": "Etology", - "categoryId": 4, - "url": "http://www.etology.com", - "companyId": "etology" - }, - "etp": { - "name": "ETP", - "categoryId": 6, - "url": "https://www.etpgroup.com", - "companyId": "etp" - }, - "etracker": { - "name": "etracker", - "categoryId": 6, - "url": "http://www.etracker.com/en/", - "companyId": "etracker_gmbh" - }, - "etrigue": { - "name": "eTrigue", - "categoryId": 4, - "url": "http://www.etrigue.com/", - "companyId": "etrigue" - }, - "etsystatic": { - "name": "Etsy CDN", - "categoryId": 9, - "url": "https://www.etsy.com/", - "companyId": "etsy" - }, - "eulerian": { - "name": "Eulerian", - "categoryId": 6, - "url": "https://www.eulerian.com/", - "companyId": "eulerian" - }, - "euroads": { - "name": "Euroads", - "categoryId": 4, - "url": "http://euroads.com/en/", - "companyId": "euroads" - }, - "europecash": { - "name": "Europecash", - "categoryId": 4, - "url": "https://www.europacash.com/", - "companyId": "europacash" - }, - "euroweb_counter": { - "name": "Euroweb Counter", - "categoryId": 4, - "url": "http://www.euroweb.de/", - "companyId": "euroweb" - }, - "evergage.com": { - "name": "Evergage", - "categoryId": 2, - "url": "https://www.evergage.com", - "companyId": "evergage" - }, - "everstring": { - "name": "Everstring", - "categoryId": 6, - "url": "http://www.everstring.com/", - "companyId": "everstring" - }, - "everyday_health": { - "name": "Everyday Health", - "categoryId": 7, - "url": "http://www.everydayhealth.com/", - "companyId": "everyday_health" - }, - "evidon": { - "name": "Evidon", - "categoryId": 5, - "url": "https://www.evidon.com/", - "companyId": "crownpeak" - }, - "evisit_analyst": { - "name": "eVisit Analyst", - "categoryId": 4, - "url": "http://www.evisitanalyst.com", - "companyId": "evisit_analyst" - }, - "exact_drive": { - "name": "Exact Drive", - "categoryId": 4, - "url": "http://www.exactdrive.com/", - "companyId": "exact_drive" - }, - "exactag": { - "name": "Exactag", - "categoryId": 6, - "url": "http://www.exactag.com", - "companyId": "exactag" - }, - "exelate": { - "name": "eXelate", - "categoryId": 4, - "url": "http://www.exelate.com/", - "companyId": "nielsen" - }, - "exitjunction": { - "name": "ExitJunction", - "categoryId": 4, - "url": "https://secure.exitjunction.com", - "companyId": "exitjunction" - }, - "exoclick": { - "name": "ExoClick", - "categoryId": 3, - "url": "http://exoclick.com/", - "companyId": "exoclick" - }, - "exoticads.com": { - "name": "exoticads", - "categoryId": 3, - "url": "https://exoticads.com/welcome/", - "companyId": null - }, - "expedia": { - "name": "Expedia", - "categoryId": 8, - "url": "https://www.trvl-px.com/", - "companyId": "iac_apps" - }, - "experian": { - "name": "Experian", - "categoryId": 8, - "url": "https://www.experian.com/", - "companyId": "experian_inc" - }, - "experian_marketing_services": { - "name": "Experian Marketing Services", - "categoryId": 4, - "url": "http://www.experian.com/", - "companyId": "experian_inc" - }, - "expo-max": { - "name": "expo-MAX", - "categoryId": 4, - "url": "http://expo-max.com/", - "companyId": "expo-max" - }, - "expose_box": { - "name": "Expose Box", - "categoryId": 4, - "url": "http://www.exposebox.com/", - "companyId": "expose_box" - }, - "expose_box_widgets": { - "name": "Expose Box Widgets", - "categoryId": 2, - "url": "http://www.exposebox.com/", - "companyId": "expose_box" - }, - "express.co.uk": { - "name": "express.co.uk", - "categoryId": 8, - "url": "https://www.express.co.uk/", - "companyId": null - }, - "expressvpn": { - "name": "ExpressVPN", - "categoryId": 2, - "url": "https://www.expressvpn.com/", - "companyId": "expressvpn" - }, - "extreme_tracker": { - "name": "eXTReMe Tracker", - "categoryId": 6, - "url": "http://www.extremetracking.com/", - "companyId": "extreme_digital" - }, - "eye_newton": { - "name": "Eye Newton", - "categoryId": 2, - "url": "http://eyenewton.ru/", - "companyId": "eyenewton" - }, - "eyeota": { - "name": "Eyeota", - "categoryId": 4, - "url": "http://www.eyeota.com/", - "companyId": "eyeota" - }, - "eyereturnmarketing": { - "name": "Eyereturn Marketing", - "categoryId": 4, - "url": "https://eyereturnmarketing.com/", - "companyId": "torstar_corp" - }, - "eyeview": { - "name": "Eyeview", - "categoryId": 4, - "url": "http://www.eyeviewdigital.com/", - "companyId": "eyeview" - }, - "ezakus": { - "name": "Ezakus", - "categoryId": 4, - "url": "http://www.ezakus.com/", - "companyId": "np6" - }, - "f11-ads.com": { - "name": "Factor Eleven", - "categoryId": 4, - "url": null, - "companyId": null - }, - "facebook": { - "name": "Facebook", - "categoryId": 4, - "url": "https://www.facebook.com", - "companyId": "facebook" - }, - "facebook_beacon": { - "name": "Facebook Beacon", - "categoryId": 7, - "url": "http://www.facebook.com/beacon/faq.php", - "companyId": "facebook" - }, - "facebook_cdn": { - "name": "Facebook CDN", - "categoryId": 9, - "url": "https://www.facebook.com", - "companyId": "facebook" - }, - "facebook_connect": { - "name": "Facebook Connect", - "categoryId": 6, - "url": "https://developers.facebook.com/connect.php", - "companyId": "facebook" - }, - "facebook_conversion_tracking": { - "name": "Facebook Conversion Tracking", - "categoryId": 4, - "url": "http://www.facebook.com/", - "companyId": "facebook" - }, - "facebook_custom_audience": { - "name": "Facebook Custom Audience", - "categoryId": 4, - "url": "https://www.facebook.com", - "companyId": "facebook" - }, - "facebook_graph": { - "name": "Facebook Social Graph", - "categoryId": 7, - "url": "https://developers.facebook.com/docs/reference/api/", - "companyId": "facebook" - }, - "facebook_impressions": { - "name": "Facebook Impressions", - "categoryId": 4, - "url": "https://www.facebook.com/", - "companyId": "facebook" - }, - "facebook_social_plugins": { - "name": "Facebook Social Plugins", - "categoryId": 7, - "url": "https://developers.facebook.com/plugins", - "companyId": "facebook" - }, - "facetz.dca": { - "name": "Facetz.DCA", - "categoryId": 4, - "url": "http://facetz.net", - "companyId": "dca" - }, - "facilitate_digital": { - "name": "Facilitate Digital", - "categoryId": 4, - "url": "http://www.facilitatedigital.com/", - "companyId": "adslot" - }, - "faktor.io": { - "name": "faktor.io", - "categoryId": 6, - "url": "https://faktor.io/", - "companyId": "faktor.io" - }, - "fancy_widget": { - "name": "Fancy Widget", - "categoryId": 7, - "url": "http://www.thefancy.com/", - "companyId": "fancy" - }, - "fanplayr": { - "name": "Fanplayr", - "categoryId": 4, - "url": "http://www.fanplayr.com/", - "companyId": "fanplayr" - }, - "fap.to": { - "name": "Imagefap", - "categoryId": 8, - "url": null, - "companyId": null - }, - "fastly_insights": { - "name": "Fastly Insights", - "categoryId": 6, - "url": "https://insights.fastlylabs.com/", - "companyId": "fastly" - }, - "fastlylb.net": { - "name": "Fastly", - "categoryId": 9, - "url": "https://www.fastly.com/", - "companyId": "fastly" - }, - "fastpic.ru": { - "name": "FastPic", - "categoryId": 10, - "url": "http://fastpic.ru/", - "companyId": "fastpic" - }, - "federated_media": { - "name": "Federated Media", - "categoryId": 4, - "url": "http://www.federatedmedia.net/", - "companyId": "hyfn" - }, - "feedbackify": { - "name": "Feedbackify", - "categoryId": 2, - "url": "http://www.feedbackify.com/", - "companyId": "feedbackify" - }, - "feedburner.com": { - "name": "FeedBurner", - "categoryId": 4, - "url": "https://feedburner.com", - "companyId": "google" - }, - "feedify": { - "name": "Feedify", - "categoryId": 7, - "url": "http://feedify.de/", - "companyId": "feedify" - }, - "feedjit": { - "name": "Feedjit", - "categoryId": 4, - "url": "http://feedjit.com/", - "companyId": "feedjit" - }, - "feedperfect": { - "name": "FeedPerfect", - "categoryId": 4, - "url": "http://www.feedperfect.com/", - "companyId": "feedperfect" - }, - "feedsportal": { - "name": "Feedsportal", - "categoryId": 4, - "url": "http://www.mediafed.com/", - "companyId": "mediafed" - }, - "feefo": { - "name": "Feefo", - "categoryId": 2, - "url": "http://www.feefo.com/web/en/us/", - "companyId": "feefo" - }, - "fidelity_media": { - "name": "Fidelity Media", - "categoryId": 4, - "url": "http://fidelity-media.com/", - "companyId": "fidelity_media" - }, - "fiksu": { - "name": "Fiksu", - "categoryId": 4, - "url": "https://fiksu.com/", - "companyId": "noosphere" - }, - "filament.io": { - "name": "Filament.io", - "categoryId": 4, - "url": "http://sharethis.com/", - "companyId": "sharethis" - }, - "fileserve": { - "name": "FileServe", - "categoryId": 10, - "url": "http://fileserve.com/", - "companyId": "fileserve" - }, - "financeads": { - "name": "FinanceADs", - "categoryId": 4, - "url": "https://www.financeads.net/", - "companyId": "financeads_gmbh_&_co._kg" - }, - "financial_content": { - "name": "Financial Content", - "categoryId": 4, - "url": "http://www.financialcontent.com", - "companyId": "financial_content" - }, - "findizer.fr": { - "name": "Findizer", - "categoryId": 8, - "url": "http://www.findizer.fr/", - "companyId": null - }, - "findologic.com": { - "name": "Findologic", - "categoryId": 2, - "url": "https://www.findologic.com/", - "companyId": "findologic" - }, - "firebaseio.com": { - "name": "Firebase", - "categoryId": 8, - "url": "https://firebase.google.com/", - "companyId": "google" - }, - "first_impression": { - "name": "First Impression", - "categoryId": 4, - "url": "http://www.firstimpression.io", - "companyId": "first_impression" - }, - "fit_analytics": { - "name": "Fit Analytics", - "categoryId": 6, - "url": "http://www.fitanalytics.com/", - "companyId": "fit_analytics" - }, - "fivetran": { - "name": "Fivetran", - "categoryId": 6, - "url": "https://fivetran.com/", - "companyId": "fivetran" - }, - "flag_ads": { - "name": "Flag Ads", - "categoryId": 4, - "url": "http://www.flagads.net/", - "companyId": "flag_ads" - }, - "flag_counter": { - "name": "Flag Counter", - "categoryId": 4, - "url": "http://flagcounter.com/", - "companyId": "flag_counter" - }, - "flashtalking": { - "name": "Flashtalking", - "categoryId": 4, - "url": "http://www.flashtalking.com/", - "companyId": "flashtalking" - }, - "flattr_button": { - "name": "Flattr Button", - "categoryId": 7, - "url": "http://flattr.com/", - "companyId": "flattr" - }, - "flexoffers": { - "name": "FlexOffers", - "categoryId": 4, - "url": "http://www.flexoffers.com/", - "companyId": "flexoffers.com" - }, - "flickr_badge": { - "name": "Flickr Badge", - "categoryId": 7, - "url": "http://www.flickr.com/", - "companyId": "smugmug" - }, - "flipboard": { - "name": "Flipboard", - "categoryId": 6, - "url": "http://www.flipboard.com/", - "companyId": "flipboard" - }, - "flite": { - "name": "Flite", - "categoryId": 4, - "url": "http://www.flite.com/", - "companyId": "flite" - }, - "flixcdn.com": { - "name": "flixcdn.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "flixmedia": { - "name": "Flixmedia", - "categoryId": 8, - "url": "https://flixmedia.eu", - "companyId": "flixmedia" - }, - "flocktory.com": { - "name": "Flocktory", - "categoryId": 6, - "url": "https://www.flocktory.com/", - "companyId": "flocktory" - }, - "flowplayer": { - "name": "Flowplayer", - "categoryId": 4, - "url": "https://flowplayer.org/", - "companyId": "flowplayer" - }, - "fluct": { - "name": "Fluct", - "categoryId": 4, - "url": "https://corp.fluct.jp/", - "companyId": "fluct" - }, - "fluent": { - "name": "Fluent", - "categoryId": 4, - "url": "http://www.fluentco.com/", - "companyId": "fluent" - }, - "fluid": { - "name": "Fluid", - "categoryId": 4, - "url": "http://www.8thbridge.com/", - "companyId": "fluid" - }, - "fluidads": { - "name": "FluidAds", - "categoryId": 4, - "url": "http://www.fluidads.co/", - "companyId": "fluidads" - }, - "fluidsurveys": { - "name": "FluidSurveys", - "categoryId": 2, - "url": "http://fluidsurveys.com/", - "companyId": "fluidware" - }, - "flurry": { - "name": "Flurry", - "categoryId": 6, - "url": "http://www.flurry.com/", - "companyId": "verizon" - }, - "flxone": { - "name": "FLXONE", - "categoryId": 4, - "url": "http://www.flxone.com/", - "companyId": "flxone" - }, - "flyertown": { - "name": "Flyertown", - "categoryId": 6, - "url": "http://www.flyertown.ca/", - "companyId": "flyertown" - }, - "fmadserving": { - "name": "FMAdserving", - "categoryId": 4, - "url": "http://www.fmadserving.dk/", - "companyId": "fm_adserving" - }, - "fonbet": { - "name": "Fonbet", - "categoryId": 6, - "url": "https://www.fonbet.ru", - "companyId": "fonbet" - }, - "fonecta": { - "name": "Fonecta", - "categoryId": 2, - "url": "http://www.fonecta.com/", - "companyId": "fonecta" - }, - "fontawesome_com": { - "name": "fontawesome.com", - "categoryId": 9, - "url": "http://fontawesome.com/", - "companyId": null - }, - "foodie_blogroll": { - "name": "Foodie Blogroll", - "categoryId": 7, - "url": "http://www.foodieblogroll.com", - "companyId": "foodie_blogroll" - }, - "footprint": { - "name": "Footprint", - "categoryId": 4, - "url": "http://www.footprintlive.com/", - "companyId": "opentracker" - }, - "footprintdns.com": { - "name": "Footprint DNS", - "categoryId": 11, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "forcetrac": { - "name": "ForceTrac", - "categoryId": 2, - "url": "http://www.forcetrac.com/", - "companyId": "force_marketing" - }, - "forensiq": { - "name": "Forensiq", - "categoryId": 4, - "url": "http://www.cpadetective.com/", - "companyId": "impact" - }, - "foresee": { - "name": "ForeSee", - "categoryId": 5, - "url": "https://www.foresee.com/", - "companyId": "foresee_results" - }, - "formisimo": { - "name": "Formisimo", - "categoryId": 4, - "url": "https://www.formisimo.com/", - "companyId": "formisimo" - }, - "forter": { - "name": "Forter", - "categoryId": 4, - "url": "https://www.forter.com/", - "companyId": "forter" - }, - "fortlachanhecksof.info": { - "name": "fortlachanhecksof.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "foursquare_widget": { - "name": "Foursquare Widget", - "categoryId": 4, - "url": "https://foursquare.com/", - "companyId": "foursquare" - }, - "fout.jp": { - "name": "FreakOut", - "categoryId": 4, - "url": "https://www.fout.co.jp/", - "companyId": "freakout" - }, - "fox_audience_network": { - "name": "Fox Audience Network", - "categoryId": 4, - "url": "https://publishers.foxaudiencenetwork.com/", - "companyId": "fox_audience_network" - }, - "foxnews_static": { - "name": "Fox News CDN", - "categoryId": 9, - "url": "http://www.foxnews.com/", - "companyId": "fox_news" - }, - "foxpush": { - "name": "FoxPush", - "categoryId": 4, - "url": "https://www.foxpush.com/", - "companyId": "foxpush" - }, - "foxydeal_com": { - "name": "foxydeal.com", - "categoryId": 12, - "url": "https://www.foxydeal.de", - "companyId": null - }, - "fraudlogix": { - "name": "FraudLogix", - "categoryId": 4, - "url": "https://www.fraudlogix.com/", - "companyId": null - }, - "free_counter": { - "name": "Free Counter", - "categoryId": 6, - "url": "http://www.statcounterfree.com/", - "companyId": "free_counter" - }, - "free_online_users": { - "name": "Free Online Users", - "categoryId": 6, - "url": "http://www.freeonlineusers.com", - "companyId": "free_online_users" - }, - "free_pagerank": { - "name": "Free PageRank", - "categoryId": 6, - "url": "http://www.free-pagerank.com/", - "companyId": "free_pagerank" - }, - "freedom_mortgage": { - "name": "Freedom Mortgage", - "categoryId": 6, - "url": "https://www.freedommortgage.com/", - "companyId": "freedom_mortgage" - }, - "freegeoip_net": { - "name": "freegeoip.net", - "categoryId": 6, - "url": "http://freegeoip.net/", - "companyId": null - }, - "freenet_de": { - "name": "freenet.de", - "categoryId": 4, - "url": "http://freenet.de/", - "companyId": "debitel" - }, - "freewheel": { - "name": "FreeWheel", - "categoryId": 4, - "url": "http://www.freewheel.tv/", - "companyId": "comcast" - }, - "fresh8": { - "name": "Fresh8", - "categoryId": 6, - "url": "http://fresh8gaming.com/", - "companyId": "fresh_8_gaming" - }, - "freshdesk": { - "name": "Freshdesk", - "categoryId": 2, - "url": "http://www.freshdesk.com", - "companyId": "freshdesk" - }, - "freshplum": { - "name": "Freshplum", - "categoryId": 4, - "url": "https://freshplum.com/", - "companyId": "freshplum" - }, - "friendbuy": { - "name": "FriendBuy", - "categoryId": 6, - "url": "https://www.friendbuy.com", - "companyId": "friendbuy" - }, - "friendfeed": { - "name": "FriendFeed", - "categoryId": 7, - "url": "http://friendfeed.com/", - "companyId": "facebook" - }, - "friendfinder_network": { - "name": "FriendFinder Network", - "categoryId": 3, - "url": "http://www.ffn.com/", - "companyId": "friendfinder_networks" - }, - "frosmo_optimizer": { - "name": "Frosmo Optimizer", - "categoryId": 4, - "url": "http://frosmo.com/", - "companyId": "frosmo" - }, - "fruitflan": { - "name": "FruitFlan", - "categoryId": 4, - "url": "http://flan-tech.com/", - "companyId": "keytiles" - }, - "fstrk.net": { - "name": "24metrics Fraudshield", - "categoryId": 6, - "url": "https://24metrics.com/", - "companyId": "24metrics" - }, - "fuelx": { - "name": "FuelX", - "categoryId": 4, - "url": "http://fuelx.com/", - "companyId": "fuelx" - }, - "fullstory": { - "name": "FullStory", - "categoryId": 6, - "url": "http://fullstory.com", - "companyId": "fullstory" - }, - "funnelytics": { - "name": "Funnelytics", - "categoryId": 6, - "url": "https://funnelytics.io/", - "companyId": "funnelytics" - }, - "fyber": { - "name": "Fyber", - "categoryId": 4, - "url": "https://www.fyber.com/", - "companyId": "fyber" - }, - "ga_audiences": { - "name": "GA Audiences", - "categoryId": 6, - "url": "http://www.google.com", - "companyId": "google" - }, - "game_advertising_online": { - "name": "Game Advertising Online", - "categoryId": 4, - "url": "http://www.game-advertising-online.com/", - "companyId": "game_advertising_online" - }, - "gamedistribution.com": { - "name": "Gamedistribution.com", - "categoryId": 8, - "url": "http://gamedistribution.com/", - "companyId": null - }, - "gamerdna": { - "name": "gamerDNA", - "categoryId": 7, - "url": "http://www.gamerdnamedia.com/", - "companyId": "gamerdna_media" - }, - "gannett": { - "name": "Gannett Media", - "categoryId": 0, - "url": "https://www.gannett.com/", - "companyId": "gannett_digital_media_network" - }, - "gaug.es": { - "name": "Gaug.es", - "categoryId": 6, - "url": "http://get.gaug.es/", - "companyId": "euroweb" - }, - "gazprom-media_digital": { - "name": "Gazprom-Media Digital", - "categoryId": 0, - "url": "http://www.gpm-digital.com/", - "companyId": "gazprom-media_digital" - }, - "gb-world": { - "name": "GB-World", - "categoryId": 7, - "url": "http://www.gb-world.net/", - "companyId": "gb-world" - }, - "gdeslon": { - "name": "GdeSlon", - "categoryId": 4, - "url": "http://www.gdeslon.ru/", - "companyId": "gdeslon" - }, - "gdm_digital": { - "name": "GDM Digital", - "categoryId": 4, - "url": "http://www.gdmdigital.com/", - "companyId": "ve_interactive" - }, - "geeen": { - "name": "Geeen", - "categoryId": 6, - "url": "https://www.geeen.co.jp/", - "companyId": "geeen" - }, - "gemius": { - "name": "Gemius", - "categoryId": 4, - "url": "http://www.gemius.com", - "companyId": "gemius_sa" - }, - "generaltracking_de": { - "name": "generaltracking.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "genesis": { - "name": "Genesis", - "categoryId": 4, - "url": "http://genesismedia.com/", - "companyId": "genesis_media" - }, - "geniee": { - "name": "GENIEE", - "categoryId": 4, - "url": "http://geniee.co.jp/", - "companyId": null - }, - "genius": { - "name": "Genius", - "categoryId": 6, - "url": "http://www.genius.com/", - "companyId": "genius" - }, - "genoo": { - "name": "Genoo", - "categoryId": 4, - "url": "http://www.genoo.com/", - "companyId": "genoo" - }, - "geoads": { - "name": "GeoAds", - "categoryId": 4, - "url": "http://www.geoads.com", - "companyId": "geoads" - }, - "geolify": { - "name": "Geolify", - "categoryId": 4, - "url": "http://geolify.com/", - "companyId": "geolify" - }, - "geoplugin": { - "name": "geoPlugin", - "categoryId": 6, - "url": "http://www.geoplugin.com/", - "companyId": "geoplugin" - }, - "geotrust": { - "name": "GeoTrust", - "categoryId": 5, - "url": "http://www.geotrust.com/", - "companyId": "symantec" - }, - "geovisite": { - "name": "Geovisite", - "categoryId": 6, - "url": "http://www.geovisite.com/", - "companyId": "geovisite" - }, - "gestionpub": { - "name": "GestionPub", - "categoryId": 4, - "url": "http://www.gestionpub.com/", - "companyId": "gestionpub" - }, - "get_response": { - "name": "Get Response", - "categoryId": 2, - "url": "https://www.getresponse.com/?marketing_gv=v2", - "companyId": "getresponse" - }, - "get_site_control": { - "name": "Get Site Control", - "categoryId": 4, - "url": "https://getsitecontrol.com/", - "companyId": "getsitecontrol" - }, - "getconversion": { - "name": "GetConversion", - "categoryId": 2, - "url": "http://www.getconversion.net/", - "companyId": "getconversion" - }, - "getglue": { - "name": "GetGlue", - "categoryId": 0, - "url": "http://getglue.com", - "companyId": "telfie" - }, - "getintent": { - "name": "GetIntent", - "categoryId": 4, - "url": "http://www.getintent.com/", - "companyId": "getintent" - }, - "getkudos": { - "name": "GetKudos", - "categoryId": 1, - "url": "https://www.getkudos.me/", - "companyId": "zendesk" - }, - "getmyad": { - "name": "GetMyAd", - "categoryId": 4, - "url": "http://yottos.com", - "companyId": "yottos" - }, - "getsatisfaction": { - "name": "GetSatisfaction", - "categoryId": 1, - "url": "http://getsatisfaction.com/", - "companyId": "get_satisfaction" - }, - "gettyimages": { - "name": "Getty Images", - "categoryId": 8, - "url": "https://www.gettyimages.com/", - "companyId": null - }, - "gfk": { - "name": "GfK", - "categoryId": 4, - "url": "http://nurago.com/", - "companyId": "gfk_nurago" - }, - "gfycat.com": { - "name": "gfycat", - "categoryId": 7, - "url": "https://gfycat.com/", - "companyId": null - }, - "giant_realm": { - "name": "Giant Realm", - "categoryId": 4, - "url": "http://corp.giantrealm.com/", - "companyId": "giant_realm" - }, - "giantmedia": { - "name": "GiantMedia", - "categoryId": 4, - "url": "http://giantmedia.com/", - "companyId": "adknowledge" - }, - "giga": { - "name": "Giga", - "categoryId": 4, - "url": "https://gigaonclick.com", - "companyId": "giga" - }, - "gigya": { - "name": "Gigya", - "categoryId": 6, - "url": "https://www.sap.com/index.html", - "companyId": "sap" - }, - "gigya_beacon": { - "name": "Gigya Beacon", - "categoryId": 2, - "url": "http://www.gigya.com", - "companyId": "sap" - }, - "gigya_socialize": { - "name": "Gigya Socialize", - "categoryId": 2, - "url": "http://www.gigya.com", - "companyId": "sap" - }, - "gigya_toolbar": { - "name": "Gigya Toolbar", - "categoryId": 2, - "url": "http://www.gigya.com/", - "companyId": "sap" - }, - "giosg": { - "name": "Giosg", - "categoryId": 6, - "url": "https://www.giosg.com/", - "companyId": "giosg" - }, - "giphy.com": { - "name": "Giphy", - "categoryId": 7, - "url": "https://giphy.com/", - "companyId": null - }, - "giraff.io": { - "name": "Giraff.io", - "categoryId": 4, - "url": "https://www.giraff.io/", - "companyId": null - }, - "github": { - "name": "GitHub", - "categoryId": 2, - "url": "https://github.com/", - "companyId": "github" - }, - "github_apps": { - "name": "GitHub Apps", - "categoryId": 2, - "url": "https://github.com/", - "companyId": "github" - }, - "github_pages": { - "name": "Github Pages", - "categoryId": 10, - "url": "https://pages.github.com/", - "companyId": "github" - }, - "gittigidiyor_affiliate_program": { - "name": "GittiGidiyor Affiliate Program", - "categoryId": 4, - "url": "http://www.ebay.com/", - "companyId": "ebay" - }, - "gittip": { - "name": "Gittip", - "categoryId": 2, - "url": "https://www.gittip.com/", - "companyId": "gittip" - }, - "glad_cube": { - "name": "Glad Cube", - "categoryId": 6, - "url": "http://www.glad-cube.com/", - "companyId": "glad_cube_inc." - }, - "glganltcs.space": { - "name": "glganltcs.space", - "categoryId": 12, - "url": null, - "companyId": null - }, - "global_web_index": { - "name": "GlobalWebIndex", - "categoryId": 6, - "url": "https://www.globalwebindex.com/", - "companyId": "global_web_index" - }, - "globalnotifier.com": { - "name": "globalnotifier.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "globalsign": { - "name": "GlobalSign", - "categoryId": 8, - "url": null, - "companyId": null - }, - "globaltakeoff": { - "name": "GlobalTakeoff", - "categoryId": 4, - "url": "http://www.globaltakeoff.net/", - "companyId": "globaltakeoff" - }, - "glomex.com": { - "name": "Glomex", - "categoryId": 0, - "url": "https://www.glomex.com/", - "companyId": "glomex" - }, - "glotgrx.com": { - "name": "glotgrx.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "gm_delivery": { - "name": "GM Delivery", - "categoryId": 4, - "url": "http://a.gmdelivery.com/", - "companyId": "gm_delivery" - }, - "gmo": { - "name": "GMO", - "categoryId": 4, - "url": "https://www.gmo.media/", - "companyId": "gmo_media" - }, - "gmx_net": { - "name": "gmx.net", - "categoryId": 8, - "url": null, - "companyId": null - }, - "go.com": { - "name": "go.com", - "categoryId": 8, - "url": "go.com", - "companyId": "disney" - }, - "godaddy_affiliate_program": { - "name": "GoDaddy Affiliate Program", - "categoryId": 4, - "url": "http://www.godaddy.com/", - "companyId": "godaddy" - }, - "godaddy_site_analytics": { - "name": "GoDaddy Site Analytics", - "categoryId": 6, - "url": "https://www.godaddy.com/gdshop/hosting/stats_", - "companyId": "godaddy" - }, - "godaddy_site_seal": { - "name": "GoDaddy Site Seal", - "categoryId": 5, - "url": "http://www.godaddy.com/", - "companyId": "godaddy" - }, - "godatafeed": { - "name": "GoDataFeed", - "categoryId": 6, - "url": "http://www.godatafeed.com", - "companyId": "godatafeed" - }, - "goingup": { - "name": "GoingUp", - "categoryId": 6, - "url": "http://www.goingup.com/", - "companyId": "goingup" - }, - "gomez": { - "name": "Gomez", - "categoryId": 6, - "url": "http://www.gomez.com/", - "companyId": "dynatrace" - }, - "goodadvert": { - "name": "GoodADVERT", - "categoryId": 4, - "url": "http://goodadvert.ru/", - "companyId": "goodadvert" - }, - "google": { - "name": "Google", - "categoryId": 4, - "url": "https://www.google.com/", - "companyId": "google" - }, - "google_ads_measurement": { - "name": "Google Ads Measurement", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_adsense": { - "name": "Google Adsense", - "categoryId": 4, - "url": "https://www.google.com/adsense/", - "companyId": "google" - }, - "google_adservices": { - "name": "Google AdServices", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_adwords_conversion": { - "name": "Google AdWords Conversion", - "categoryId": 4, - "url": "https://adwords.google.com/", - "companyId": "google" - }, - "google_adwords_user_lists": { - "name": "Google Adwords User Lists", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_analytics": { - "name": "Google Analytics", - "categoryId": 6, - "url": "http://www.google.com/analytics/", - "companyId": "google" - }, - "google_appspot": { - "name": "Google Appspot", - "categoryId": 10, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_beacons": { - "name": "Google Beacons", - "categoryId": 6, - "url": "https://google.xyz", - "companyId": "google" - }, - "google_custom_search": { - "name": "Google Custom Search Ads", - "categoryId": 4, - "url": "https://developers.google.com/custom-search-ads/", - "companyId": "google" - }, - "google_custom_search_engine": { - "name": "Google Programmable Search Engine", - "categoryId": 5, - "url": "https://programmablesearchengine.google.com/about/", - "companyId": "google" - }, - "google_email": { - "name": "Google Email", - "categoryId": 13, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_fonts": { - "name": "Google Fonts", - "categoryId": 9, - "url": "https://fonts.google.com/", - "companyId": "google" - }, - "google_ima": { - "name": "Google IMA", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_photos": { - "name": "Google Photos", - "categoryId": 9, - "url": "https://photos.google.com/", - "companyId": "google" - }, - "google_pingback": { - "name": "Google Pingback", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_plus": { - "name": "Google+ Platform", - "categoryId": 7, - "url": "http://www.google.com/+1/button/", - "companyId": "google" - }, - "google_publisher_tags": { - "name": "Google Publisher Tags", - "categoryId": 6, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_remarketing": { - "name": "Google Dynamic Remarketing", - "categoryId": 4, - "url": "http://adwords.google.com/", - "companyId": "google" - }, - "google_safeframe": { - "name": "Google Safeframe", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_servers": { - "name": "Google Servers", - "categoryId": 8, - "url": "https://support.google.com/faqs/answer/174717?hl=en", - "companyId": "google" - }, - "google_shopping_reviews": { - "name": "Google Shopping Reviews", - "categoryId": 2, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_syndication": { - "name": "Google Syndication", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_tag_manager": { - "name": "Google Tag Manager", - "categoryId": 5, - "url": "https://marketingplatform.google.com/about/tag-manager/", - "companyId": "google" - }, - "google_translate": { - "name": "Google Translate", - "categoryId": 2, - "url": "https://translate.google.com/manager", - "companyId": "google" - }, - "google_travel_adds": { - "name": "Google Travel Adds", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_trusted_stores": { - "name": "Google Trusted Stores", - "categoryId": 6, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_users": { - "name": "Google User Content", - "categoryId": 9, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_website_optimizer": { - "name": "Google Website Optimizer", - "categoryId": 6, - "url": "https://www.google.com/analytics/siteopt/prev", - "companyId": "google" - }, - "google_widgets": { - "name": "Google Widgets", - "categoryId": 2, - "url": "http://www.google.com", - "companyId": "google" - }, - "googleapis.com": { - "name": "Google APIs", - "categoryId": 9, - "url": "https://www.googleapis.com/", - "companyId": "google" - }, - "goooal": { - "name": "Goooal", - "categoryId": 6, - "url": "http://mailchimp.com/", - "companyId": "mailchimp" - }, - "gorilla_nation": { - "name": "Gorilla Nation", - "categoryId": 4, - "url": "http://www.gorillanationmedia.com", - "companyId": "gorilla_nation_media" - }, - "gosquared": { - "name": "GoSquared", - "categoryId": 6, - "url": "http://www.gosquared.com/livestats/", - "companyId": "gosquared" - }, - "gostats": { - "name": "GoStats", - "categoryId": 6, - "url": "http://gostats.com/", - "companyId": "gostats" - }, - "govmetric": { - "name": "GovMetric", - "categoryId": 6, - "url": "http://www.govmetric.com/", - "companyId": "govmetric" - }, - "grabo_affiliate": { - "name": "Grabo Affiliate", - "categoryId": 4, - "url": "http://grabo.bg/", - "companyId": "grabo_media" - }, - "grandslammedia": { - "name": "GrandSlamMedia", - "categoryId": 4, - "url": "http://www.grandslammedia.com/", - "companyId": "grand_slam_media" - }, - "granify": { - "name": "Granify", - "categoryId": 6, - "url": "http://granify.com/", - "companyId": "granify" - }, - "grapeshot": { - "name": "Grapeshot", - "categoryId": 4, - "url": "https://www.grapeshot.com/", - "companyId": "oracle" - }, - "graph_comment": { - "name": "Graph Comment", - "categoryId": 5, - "url": "https://graphcomment.com/en/", - "companyId": "graph_comment" - }, - "gravatar": { - "name": "Gravatar", - "categoryId": 7, - "url": "http://en.gravatar.com/", - "companyId": "automattic" - }, - "gravitec": { - "name": "Gravitec", - "categoryId": 6, - "url": "https://gravitec.net/", - "companyId": "gravitec" - }, - "gravity_insights": { - "name": "Gravity Insights", - "categoryId": 6, - "url": "http://www.gravity.com/", - "companyId": "verizon" - }, - "greatviews.de": { - "name": "GreatViews", - "categoryId": 4, - "url": "http://greatviews.de/", - "companyId": "parship" - }, - "green_and_red": { - "name": "Green and Red", - "categoryId": 4, - "url": "http://www.green-red.com/", - "companyId": "green_&_red_technologies" - }, - "green_certified_site": { - "name": "Green Certified Site", - "categoryId": 2, - "url": "http://www.advenity.com/", - "companyId": "advenity" - }, - "green_story": { - "name": "Green Story", - "categoryId": 6, - "url": "https://greenstory.ca/", - "companyId": "green_story" - }, - "greentube.com": { - "name": "Greentube Internet Entertainment Solutions", - "categoryId": 7, - "url": "https://www.greentube.com/", - "companyId": null - }, - "greystripe": { - "name": "Greystripe", - "categoryId": 4, - "url": "http://www.greystripe.com/", - "companyId": "conversant" - }, - "groove": { - "name": "Groove", - "categoryId": 2, - "url": "http://www.groovehq.com/", - "companyId": "groove_networks" - }, - "groovinads": { - "name": "GroovinAds", - "categoryId": 4, - "url": "http://www.groovinads.com/en", - "companyId": "groovinads" - }, - "groundtruth": { - "name": "GroundTruth", - "categoryId": 4, - "url": "http://www.groundtruth.com/", - "companyId": "groundtruth" - }, - "groupm_server": { - "name": "GroupM Server", - "categoryId": 4, - "url": "http://www.groupm.com/", - "companyId": "wpp" - }, - "gsi_media": { - "name": "GSI Media", - "categoryId": 4, - "url": "http://gsimedia.net", - "companyId": "gsi_media_network" - }, - "gstatic": { - "name": "Google Static", - "categoryId": 9, - "url": "http://www.google.com", - "companyId": "google" - }, - "gtop": { - "name": "GTop", - "categoryId": 6, - "url": "http://www.gtopstats.com", - "companyId": "gtopstats" - }, - "gugaboo": { - "name": "Gugaboo", - "categoryId": 4, - "url": "https://www.gubagoo.com/", - "companyId": "gubagoo" - }, - "guj.de": { - "name": "Gruner + Jahr", - "categoryId": 4, - "url": "https://www.guj.de/", - "companyId": "gruner_jahr_ag" - }, - "gujems": { - "name": "G+J e|MS", - "categoryId": 4, - "url": "http://www.gujmedia.de/", - "companyId": "gruner_jahr_ag" - }, - "gumgum": { - "name": "gumgum", - "categoryId": 4, - "url": "http://gumgum.com/", - "companyId": "gumgum" - }, - "gumroad": { - "name": "Gumroad", - "categoryId": 7, - "url": "https://gumroad.com/", - "companyId": "gumroad" - }, - "gunggo": { - "name": "Gunggo", - "categoryId": 4, - "url": "http://www.gunggo.com/", - "companyId": "gunggo" - }, - "h12_ads": { - "name": "H12 Ads", - "categoryId": 4, - "url": "http://www.h12-media.com/", - "companyId": "h12_media_ads" - }, - "hacker_news_button": { - "name": "Hacker News Button", - "categoryId": 7, - "url": "http://news.ycombinator.com/", - "companyId": "hacker_news" - }, - "haendlerbund.de": { - "name": "Händlerbund", - "categoryId": 2, - "url": "https://www.haendlerbund.de/en", - "companyId": null - }, - "halogen_network": { - "name": "Halogen Network", - "categoryId": 7, - "url": "http://www.halogennetwork.com/", - "companyId": "social_chorus" - }, - "happy_fox_chat": { - "name": "Happy Fox Chat", - "categoryId": 2, - "url": "https://happyfoxchat.com/", - "companyId": "happy_fox_chat" - }, - "harren_media": { - "name": "Harren Media", - "categoryId": 4, - "url": "http://www.harrenmedia.com/index.html", - "companyId": "harren_media" - }, - "hatchbuck": { - "name": "Hatchbuck", - "categoryId": 6, - "url": "http://www.hatchbuck.com/", - "companyId": "hatchbuck" - }, - "head_hunter": { - "name": "Head Hunter", - "categoryId": 6, - "url": "https://hh.ru/", - "companyId": "head_hunter" - }, - "healte.de": { - "name": "healte.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "heap": { - "name": "Heap", - "categoryId": 6, - "url": "https://heapanalytics.com/", - "companyId": "heap" - }, - "heatmap": { - "name": "Heatmap", - "categoryId": 6, - "url": "https://heatmap.me/", - "companyId": "heatmap" - }, - "heimspiel": { - "name": "HEIM:SPIEL Medien GmbH", - "categoryId": 8, - "url": "http://www.heimspiel.de", - "companyId": null - }, - "hello_bar": { - "name": "Hello Bar", - "categoryId": 7, - "url": "https://www.hellobar.com/", - "companyId": "crazy_egg" - }, - "hellosociety": { - "name": "HelloSociety", - "categoryId": 6, - "url": "http://hellosociety.com", - "companyId": "hellosociety" - }, - "here": { - "name": "HERE", - "categoryId": 8, - "url": "https://www.here.com/", - "companyId": null - }, - "heroku": { - "name": "Heroku", - "categoryId": 10, - "url": null, - "companyId": null - }, - "heureka-widget": { - "name": "Heureka-Widget", - "categoryId": 4, - "url": "https://www.heurekashopping.cz/", - "companyId": "heureka" - }, - "heybubble": { - "name": "HeyBubble", - "categoryId": 2, - "url": "https://www.heybubble.com/", - "companyId": "heybubble" - }, - "heyos": { - "name": "Heyos", - "categoryId": 4, - "url": "http://www.heyos.com/", - "companyId": "heyos" - }, - "hi-media_performance": { - "name": "Hi-Media Performance", - "categoryId": 4, - "url": "http://www.hi-mediaperformance.co.uk/", - "companyId": "hi-media_performance" - }, - "hiconversion": { - "name": "HiConversion", - "categoryId": 4, - "url": "http://www.hiconversion.com", - "companyId": "hiconversion" - }, - "highwebmedia.com": { - "name": "highwebmedia.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "highwinds": { - "name": "Highwinds", - "categoryId": 6, - "url": "https://www.highwinds.com/", - "companyId": "highwinds" - }, - "hiiir": { - "name": "Hiiir", - "categoryId": 4, - "url": "http://adpower.hiiir.com/", - "companyId": "hiiir" - }, - "hiro": { - "name": "HIRO", - "categoryId": 4, - "url": "http://www.hiro-media.com/", - "companyId": "hiro_media" - }, - "histats": { - "name": "Histats", - "categoryId": 4, - "url": "http://www.histats.com/", - "companyId": "histats" - }, - "hit-parade": { - "name": "Hit-Parade", - "categoryId": 4, - "url": "http://www.hit-parade.com/", - "companyId": "hit-parade" - }, - "hit.ua": { - "name": "HIT.UA", - "categoryId": 4, - "url": "http://hit.ua/", - "companyId": "hit.ua" - }, - "hitslink": { - "name": "HitsLink", - "categoryId": 4, - "url": "http://www.hitslink.com/", - "companyId": "net_applications" - }, - "hitsniffer": { - "name": "HitSniffer", - "categoryId": 4, - "url": "http://hitsniffer.com/", - "companyId": "hit_sniffer" - }, - "hittail": { - "name": "HitTail", - "categoryId": 4, - "url": "http://www.hittail.com/", - "companyId": "hittail" - }, - "hivedx.com": { - "name": "hiveDX", - "categoryId": 4, - "url": "https://www.hivedx.com/", - "companyId": null - }, - "hiveworks": { - "name": "Hive Networks", - "categoryId": 4, - "url": "https://hiveworkscomics.com/", - "companyId": "hive_works" - }, - "hoholikik.club": { - "name": "hoholikik.club", - "categoryId": 12, - "url": null, - "companyId": null - }, - "hola_player": { - "name": "Hola Player", - "categoryId": 0, - "url": "https://holacdn.com/", - "companyId": "hola_cdn" - }, - "homeaway": { - "name": "HomeAway", - "categoryId": 8, - "url": null, - "companyId": null - }, - "honeybadger": { - "name": "Honeybadger", - "categoryId": 6, - "url": "https://www.honeybadger.io/", - "companyId": "honeybadger" - }, - "hooklogic": { - "name": "HookLogic", - "categoryId": 4, - "url": "http://hooklogic.com/", - "companyId": "criteo" - }, - "hop-cube": { - "name": "Hop-Cube", - "categoryId": 4, - "url": "http://www.hop-cube.com/", - "companyId": "hop-cube" - }, - "hotdogsandads.com": { - "name": "hotdogsandads.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "hotjar": { - "name": "Hotjar", - "categoryId": 6, - "url": "http://www.hotjar.com/", - "companyId": "hotjar" - }, - "hotkeys": { - "name": "HotKeys", - "categoryId": 4, - "url": "http://www.demandmedia.com/", - "companyId": "leaf_group" - }, - "hotlog.ru": { - "name": "HotLog", - "categoryId": 4, - "url": "https://hotlog.ru/", - "companyId": "hotlog" - }, - "hotwords": { - "name": "HOTWords", - "categoryId": 4, - "url": "http://hotwords.com/", - "companyId": "hotwords" - }, - "howtank.com": { - "name": "howtank", - "categoryId": 7, - "url": "https://www.howtank.com/", - "companyId": null - }, - "hqentertainmentnetwork.com": { - "name": "HQ Entertainment Network", - "categoryId": 4, - "url": "https://hqentertainmentnetwork.com/", - "companyId": null - }, - "hsoub": { - "name": "Hsoub", - "categoryId": 4, - "url": "http://www.hsoub.com/", - "companyId": "hsoub" - }, - "hstrck.com": { - "name": "HEIM:SPIEL Medien GmbH", - "categoryId": 8, - "url": "https://www.heimspiel.de/", - "companyId": null - }, - "httpool": { - "name": "HTTPool", - "categoryId": 4, - "url": "http://www.httpool.com/", - "companyId": "httpool" - }, - "hubrus": { - "name": "HUBRUS", - "categoryId": 4, - "url": "http://www.hubrus.com/", - "companyId": "hubrus" - }, - "hubspot": { - "name": "HubSpot", - "categoryId": 6, - "url": "http://www.hubspot.com/", - "companyId": "hubspot" - }, - "hubspot_forms": { - "name": "HubSpot Forms", - "categoryId": 2, - "url": "http://www.hubspot.com", - "companyId": "hubspot" - }, - "hubvisor.io": { - "name": "Hubvisor", - "categoryId": 4, - "url": "https://hubvisor.io/", - "companyId": null - }, - "hucksterbot": { - "name": "HucksterBot", - "categoryId": 4, - "url": "http://hucksterbot.ru/", - "companyId": "hucksterbot" - }, - "hupso": { - "name": "Hupso", - "categoryId": 7, - "url": "http://www.hupso.com/", - "companyId": "hupso" - }, - "hurra_tracker": { - "name": "Hurra Tracker", - "categoryId": 4, - "url": "http://www.hurra.com/en/", - "companyId": "hurra_communications" - }, - "hybrid.ai": { - "name": "Hybrid.ai", - "categoryId": 4, - "url": "https://hybrid.ai/", - "companyId": "hybrid_adtech" - }, - "hype_exchange": { - "name": "Hype Exchange", - "categoryId": 4, - "url": "http://www.hypeexchange.com/", - "companyId": "hype_exchange" - }, - "hypercomments": { - "name": "HyperComments", - "categoryId": 1, - "url": "http://www.hypercomments.com/", - "companyId": "hypercomments" - }, - "hyves_widgets": { - "name": "Hyves Widgets", - "categoryId": 4, - "url": "http://www.hyves.nl/", - "companyId": "hyves" - }, - "hyvyd": { - "name": "Hyvyd GmbH", - "categoryId": 8, - "url": null, - "companyId": null - }, - "i-behavior": { - "name": "i-Behavior", - "categoryId": 4, - "url": "http://www.i-behavior.com/", - "companyId": "kbm_group" - }, - "i-mobile": { - "name": "i-mobile", - "categoryId": 4, - "url": "https://www2.i-mobile.co.jp/en/index.aspx", - "companyId": "i-mobile" - }, - "i.ua": { - "name": "i.ua", - "categoryId": 4, - "url": "http://www.i.ua/", - "companyId": "i.ua" - }, - "i10c.net": { - "name": "i10c.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "i2i.jp": { - "name": "i2i.jp", - "categoryId": 6, - "url": "http://www.i2i.jp/", - "companyId": "i2i.jp" - }, - "iab_consent": { - "name": "IAB Consent", - "categoryId": 5, - "url": "https://iabtechlab.com/standards/gdpr-transparency-and-consent-framework/", - "companyId": "iab" - }, - "iadvize": { - "name": "iAdvize", - "categoryId": 2, - "url": "http://www.iadvize.com/", - "companyId": "iadvize" - }, - "ibm_customer_experience": { - "name": "IBM Digital Analytics", - "categoryId": 6, - "url": "http://www.coremetrics.com/", - "companyId": "ibm" - }, - "icerocket_tracker": { - "name": "IceRocket Tracker", - "categoryId": 7, - "url": "http://tracker.icerocket.com/", - "companyId": "meltwater_icerocket" - }, - "icf_technology": { - "name": "ICF Technology", - "categoryId": 2, - "url": "http://www.icftechnology.com/", - "companyId": null - }, - "iclick": { - "name": "iClick", - "categoryId": 4, - "url": "http://optimix.asia/", - "companyId": "iclick_interactive" - }, - "icrossing": { - "name": "iCrossing", - "categoryId": 4, - "url": "http://www.icrossing.com/", - "companyId": "hearst" - }, - "icstats": { - "name": "ICStats", - "categoryId": 6, - "url": "http://www.icstats.nl/", - "companyId": "icstats" - }, - "icuazeczpeoohx.com": { - "name": "icuazeczpeoohx.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "id-news.net": { - "name": "Ippen Digital", - "categoryId": 4, - "url": "https://www.ippen-digital.de/", - "companyId": null - }, - "id_services": { - "name": "ID Services", - "categoryId": 6, - "url": "https://id.services/", - "companyId": "id_services" - }, - "ideal_media": { - "name": "Ideal Media", - "categoryId": 4, - "url": "http://idealmedia.com/", - "companyId": "ideal_media" - }, - "idealo_com": { - "name": "idealo.com", - "categoryId": 4, - "url": "http://idealo.com/", - "companyId": null - }, - "ideoclick": { - "name": "IdeoClick", - "categoryId": 4, - "url": "http://ideoclick.com", - "companyId": "ideoclick" - }, - "idio": { - "name": "Idio", - "categoryId": 4, - "url": "https://www.idio.ai/", - "companyId": "idio" - }, - "ie8eamus.com": { - "name": "ie8eamus.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ientry": { - "name": "iEntry", - "categoryId": 4, - "url": "http://www.ientry.com/", - "companyId": "ientry" - }, - "iflychat": { - "name": "iFlyChat", - "categoryId": 2, - "url": "https://iflychat.com/", - "companyId": "iflychat" - }, - "ignitionone": { - "name": "IgnitionOne", - "categoryId": 6, - "url": "https://www.ignitionone.com/", - "companyId": "zeta" - }, - "igodigital": { - "name": "iGoDigital", - "categoryId": 2, - "url": "http://igodigital.com/", - "companyId": "salesforce" - }, - "ihs_markit": { - "name": "IHS Markit", - "categoryId": 6, - "url": "https://ihsmarkit.com/index.html", - "companyId": "ihs" - }, - "ihs_markit_online_shopper_insigh": { - "name": "IHS Markit Online Shopper Insigh", - "categoryId": 6, - "url": "http://www.visicogn.com/vcu.htm", - "companyId": "ihs" - }, - "ihvmcqojoj.com": { - "name": "ihvmcqojoj.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "iias.eu": { - "name": "Insight Image", - "categoryId": 3, - "url": "http://insightimage.com/", - "companyId": null - }, - "ijento": { - "name": "iJento", - "categoryId": 6, - "url": "http://www.ijento.com/", - "companyId": "ijento" - }, - "imad": { - "name": "imad", - "categoryId": 4, - "url": "http://www.imad.co.kr/", - "companyId": "i'mad_republic" - }, - "image_advantage": { - "name": "Image Advantage", - "categoryId": 4, - "url": "http://www.worthathousandwords.com/", - "companyId": "image_advantage" - }, - "image_space_media": { - "name": "Image Space Media", - "categoryId": 4, - "url": "http://www.imagespacemedia.com/", - "companyId": "image_space_media" - }, - "imgix.net": { - "name": "ImgIX", - "categoryId": 9, - "url": "https://www.imgix.com/", - "companyId": null - }, - "imgur": { - "name": "Imgur", - "categoryId": 8, - "url": "https://imgur.com/", - "companyId": "imgur" - }, - "imho_vi": { - "name": "imho vi", - "categoryId": 4, - "url": "http://www.imho.ru", - "companyId": "imho" - }, - "immanalytics": { - "name": "Immanalytics", - "categoryId": 2, - "url": "https://www.roku.com/", - "companyId": "roku" - }, - "immobilienscout24_de": { - "name": "immobilienscout24.de", - "categoryId": 8, - "url": "http://www.scout24.com/", - "companyId": "scout24" - }, - "imonomy": { - "name": "imonomy", - "categoryId": 6, - "url": "http://imonomy.com/", - "companyId": "imonomy" - }, - "impact_radius": { - "name": "Impact Radius", - "categoryId": 5, - "url": "http://www.impactradius.com/", - "companyId": "impact_radius" - }, - "impresiones_web": { - "name": "Impresiones Web", - "categoryId": 4, - "url": "http://www.iw-advertising.com/", - "companyId": "impresiones_web" - }, - "improve_digital": { - "name": "Improve Digital", - "categoryId": 4, - "url": "http://www.improvedigital.com/", - "companyId": "improve_digital" - }, - "improvely": { - "name": "Improvely", - "categoryId": 6, - "url": "https://www.improvely.com/", - "companyId": "awio_web_services" - }, - "inbenta": { - "name": "Inbenta", - "categoryId": 6, - "url": "https://www.inbenta.com/en/", - "companyId": "inbenta" - }, - "inboxsdk.com": { - "name": "Inbox SDK", - "categoryId": 8, - "url": "https://www.inboxsdk.com/", - "companyId": null - }, - "indeed": { - "name": "Indeed", - "categoryId": 4, - "url": "http://www.indeed.com/", - "companyId": "indeed" - }, - "index_exchange": { - "name": "Index Exchange", - "categoryId": 4, - "url": "http://www.casalemedia.com/", - "companyId": "index_exchange" - }, - "indieclick": { - "name": "IndieClick", - "categoryId": 4, - "url": "http://www.indieclick.com/", - "companyId": "leaf_group" - }, - "industry_brains": { - "name": "Industry Brains", - "categoryId": 4, - "url": "http://www.industrybrains.com/", - "companyId": "industrybrains" - }, - "infectious_media": { - "name": "Impression Desk", - "categoryId": 4, - "url": "https://impressiondesk.com/", - "companyId": "infectious_media" - }, - "infinite_analytics": { - "name": "Infinite Analytics", - "categoryId": 6, - "url": "http://infiniteanalytics.com/products/", - "companyId": "infinite_analytics" - }, - "infinity_tracking": { - "name": "Infinity Tracking", - "categoryId": 6, - "url": "http://www.infinity-tracking.com", - "companyId": "infinity_tracking" - }, - "influads": { - "name": "InfluAds", - "categoryId": 4, - "url": "http://www.influads.com/", - "companyId": "influads" - }, - "infolinks": { - "name": "InfoLinks", - "categoryId": 4, - "url": "http://www.infolinks.com/", - "companyId": "infolinks" - }, - "infonline": { - "name": "INFOnline", - "categoryId": 6, - "url": "http://www.infonline.de/", - "companyId": "infonline" - }, - "informer_technologies": { - "name": "Informer Technologies", - "categoryId": 6, - "url": "http://www.informer.com/", - "companyId": "informer_technologies" - }, - "infusionsoft": { - "name": "Infusionsoft by Keap", - "categoryId": 4, - "url": "https://keap.com/", - "companyId": "infusionsoft" - }, - "innity": { - "name": "Innity", - "categoryId": 4, - "url": "http://www.innity.com/", - "companyId": "innity" - }, - "innogames.de": { - "name": "InnoGames", - "categoryId": 8, - "url": "https://www.innogames.com/", - "companyId": null - }, - "innovid": { - "name": "Innovid", - "categoryId": 4, - "url": "https://www.innovid.com/", - "companyId": "innovid" - }, - "inside": { - "name": "inside", - "categoryId": 7, - "url": "http://www.inside.tm/", - "companyId": "powerfront" - }, - "insider": { - "name": "Insider", - "categoryId": 6, - "url": "http://useinsider.com/", - "companyId": "insider" - }, - "insightexpress": { - "name": "InsightExpress", - "categoryId": 6, - "url": "https://www.millwardbrowndigital.com/", - "companyId": "millward_brown" - }, - "inskin_media": { - "name": "InSkin Media", - "categoryId": 4, - "url": "http://www.inskinmedia.com/", - "companyId": "inskin_media" - }, - "inspectlet": { - "name": "Inspectlet", - "categoryId": 6, - "url": "https://www.inspectlet.com/", - "companyId": "inspectlet" - }, - "inspsearchapi.com": { - "name": "Infospace Search", - "categoryId": 4, - "url": "http://infospace.com/", - "companyId": "system1" - }, - "instagram_com": { - "name": "Instagram", - "categoryId": 8, - "url": "https://www.facebook.com/", - "companyId": "facebook" - }, - "instant_check_mate": { - "name": "Instant Check Mate", - "categoryId": 2, - "url": "https://www.instantcheckmate.com/", - "companyId": "instant_check_mate" - }, - "instart_logic": { - "name": "Instart Logic", - "categoryId": 4, - "url": "https://www.instartlogic.com/", - "companyId": "instart_logic_inc" - }, - "insticator": { - "name": "Insticator", - "categoryId": 4, - "url": "https://www.insticator.com/landingpage", - "companyId": "insticator" - }, - "instinctive": { - "name": "Instinctive", - "categoryId": 4, - "url": "https://instinctive.io/", - "companyId": "instinctive" - }, - "intango": { - "name": "Intango", - "categoryId": 4, - "url": "https://intango.com/", - "companyId": "intango" - }, - "integral_ad_science": { - "name": "Integral Ad Science", - "categoryId": 4, - "url": "https://integralads.com/", - "companyId": "integral_ad_science" - }, - "integral_marketing": { - "name": "Integral Marketing", - "categoryId": 4, - "url": "http://integral-marketing.com/", - "companyId": "integral_marketing" - }, - "intelliad": { - "name": "intelliAd", - "categoryId": 6, - "url": "http://www.intelliad.de/", - "companyId": "intelliad" - }, - "intelligencefocus": { - "name": "IntelligenceFocus", - "categoryId": 6, - "url": "http://www.intelligencefocus.com", - "companyId": "intelligencefocus" - }, - "intelligent_reach": { - "name": "Intelligent Reach", - "categoryId": 4, - "url": "http://www.intelligentreach.com/", - "companyId": "intelligent_reach" - }, - "intense_debate": { - "name": "Intense Debate", - "categoryId": 2, - "url": "http://intensedebate.com/", - "companyId": "automattic" - }, - "intent_iq": { - "name": "Intent IQ", - "categoryId": 4, - "url": "http://datonics.com/", - "companyId": "almondnet" - }, - "intent_media": { - "name": "Intent", - "categoryId": 4, - "url": "https://intent.com/", - "companyId": "intent_media" - }, - "intercom": { - "name": "Intercom", - "categoryId": 2, - "url": "http://intercom.io/", - "companyId": "intercom" - }, - "interedy.info": { - "name": "interedy.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "intergi": { - "name": "Intergi", - "categoryId": 4, - "url": "http://www.intergi.com/", - "companyId": "intergi_entertainment" - }, - "intermarkets.net": { - "name": "Intermarkets", - "categoryId": 4, - "url": "http://intermarkets.net/", - "companyId": "intermarkets" - }, - "intermundo_media": { - "name": "InterMundo Media", - "categoryId": 4, - "url": "http://intermundomedia.com/", - "companyId": "intermundo_media" - }, - "internet_billboard": { - "name": "Internet BillBoard", - "categoryId": 4, - "url": "http://www.ibillboard.com/en/", - "companyId": "internet_billboard" - }, - "internetaudioads": { - "name": "InternetAudioAds", - "categoryId": 0, - "url": "http://www.internetaudioads.com/", - "companyId": "internetaudioads" - }, - "internetbrands": { - "name": "InternetBrands", - "categoryId": 7, - "url": "http://www.internetbrands.com/", - "companyId": "internet_brands" - }, - "interpolls": { - "name": "Interpolls", - "categoryId": 4, - "url": "http://www.interpolls.com/", - "companyId": "interpolls" - }, - "interyield": { - "name": "Interyield", - "categoryId": 4, - "url": "http://www.advertise.com/publisher-solutions/", - "companyId": "advertise.com" - }, - "intilery": { - "name": "Intilery", - "categoryId": 6, - "url": "http://www.intilery.com", - "companyId": "intilery" - }, - "intimate_merger": { - "name": "Intimate Merger", - "categoryId": 6, - "url": "https://corp.intimatemerger.com/", - "companyId": "intimate_merger" - }, - "investingchannel": { - "name": "Investing Channel", - "categoryId": 8, - "url": "http://www.investingchannel.com/", - "companyId": "investingchannel" - }, - "inviziads": { - "name": "InviziAds", - "categoryId": 4, - "url": "http://www.inviziads.com", - "companyId": "inviziads" - }, - "invoca": { - "name": "Invoca", - "categoryId": 4, - "url": "http://www.invoca.com/", - "companyId": "invoca" - }, - "invodo": { - "name": "Invodo", - "categoryId": 6, - "url": "http://www.invodo.com/", - "companyId": "invodo" - }, - "ionicframework.com": { - "name": "Ionic", - "categoryId": 8, - "url": "https://ionicframework.com/", - "companyId": null - }, - "iotec": { - "name": "iotec", - "categoryId": 4, - "url": "https://www.iotecglobal.com/", - "companyId": "iotec" - }, - "iovation": { - "name": "iovation", - "categoryId": 5, - "url": "http://www.iovation.com/", - "companyId": "iovation" - }, - "ip-label": { - "name": "ip-label", - "categoryId": 6, - "url": "http://www.ip-label.co.uk/", - "companyId": "ip-label" - }, - "ip_targeting": { - "name": "IP Targeting", - "categoryId": 6, - "url": "https://www.iptargeting.com/", - "companyId": "el_toro" - }, - "ip_tracker": { - "name": "IP Tracker", - "categoryId": 6, - "url": "http://www.ip-tracker.org/", - "companyId": "ip_tracker" - }, - "iperceptions": { - "name": "iPerceptions", - "categoryId": 2, - "url": "http://www.iperceptions.com/", - "companyId": "iperceptions" - }, - "ipfingerprint": { - "name": "IPFingerprint", - "categoryId": 6, - "url": "http://www.ipfingerprint.com/", - "companyId": "ipfingerprint" - }, - "ipg_mediabrands": { - "name": "IPG Mediabrands", - "categoryId": 4, - "url": "https://www.ipgmediabrands.com/", - "companyId": "ipg_mediabrands" - }, - "ipify": { - "name": "ipify", - "categoryId": 8, - "url": "https://www.ipify.org/", - "companyId": null - }, - "ipinfo": { - "name": "Ipinfo", - "categoryId": 2, - "url": "https://ipinfo.io/", - "companyId": "ipinfo.io" - }, - "iplogger": { - "name": "IPLogger", - "categoryId": 6, - "url": "http://iplogger.ru/", - "companyId": "iplogger" - }, - "iprom": { - "name": "iprom", - "categoryId": 4, - "url": "http://www.iprom.si/", - "companyId": "iprom" - }, - "ipromote": { - "name": "iPromote", - "categoryId": 4, - "url": "http://www.ipromote.com/", - "companyId": "ipromote" - }, - "iprospect": { - "name": "iProspect", - "categoryId": 4, - "url": "http://www.iprospect.com/", - "companyId": "dentsu_aegis_network" - }, - "ironsource": { - "name": "ironSource", - "categoryId": 4, - "url": "https://www.ironsrc.com/", - "companyId": "ironsource" - }, - "isocket": { - "name": "isocket", - "categoryId": 4, - "url": "http://www.isocket.com/", - "companyId": "rubicon_project" - }, - "ispot.tv": { - "name": "iSpot.tv", - "categoryId": 4, - "url": "https://www.ispot.tv/", - "companyId": null - }, - "itineraire.info": { - "name": "itineraire.info", - "categoryId": 2, - "url": "https://www.itineraire.info/", - "companyId": null - }, - "itunes_link_maker": { - "name": "iTunes Link Maker", - "categoryId": 4, - "url": "https://www.apple.com/", - "companyId": "apple" - }, - "ity.im": { - "name": "ity.im", - "categoryId": 4, - "url": "http://ity.im/", - "companyId": "ity.im" - }, - "iubenda.com": { - "name": "iubenda", - "categoryId": 5, - "url": "https://www.iubenda.com/", - "companyId": "iubenda" - }, - "ivcbrasil.org.br": { - "name": "IVC Brasil", - "categoryId": 6, - "url": "https://ivcbrasil.org.br/#/home", - "companyId": null - }, - "ividence": { - "name": "Ividence", - "categoryId": 4, - "url": "https://www.ividence.com/home/", - "companyId": "sien" - }, - "iwiw_widgets": { - "name": "iWiW Widgets", - "categoryId": 2, - "url": "http://iwiw.hu", - "companyId": "iwiw" - }, - "ixi_digital": { - "name": "IXI Digital", - "categoryId": 4, - "url": "http://www.equifax.com/home/en_us", - "companyId": "equifax" - }, - "ixquick.com": { - "name": "ixquick", - "categoryId": 8, - "url": "https://www.ixquick.com/", - "companyId": "startpage" - }, - "izooto": { - "name": "iZooto", - "categoryId": 6, - "url": "https://www.izooto.com/", - "companyId": "izooto" - }, - "j-list_affiliate_program": { - "name": "J-List Affiliate Program", - "categoryId": 4, - "url": "http://www.jlist.com/page/affiliates.html", - "companyId": "j-list" - }, - "jaco": { - "name": "Jaco", - "categoryId": 6, - "url": "https://www.walkme.com/", - "companyId": "walkme" - }, - "janrain": { - "name": "Janrain", - "categoryId": 6, - "url": "http://www.janrain.com/", - "companyId": "akamai" - }, - "jeeng": { - "name": "Jeeng", - "categoryId": 4, - "url": "https://jeeng.com/", - "companyId": "jeeng" - }, - "jeeng_widgets": { - "name": "Jeeng Widgets", - "categoryId": 4, - "url": "https://jeeng.com/", - "companyId": "jeeng" - }, - "jet_interactive": { - "name": "Jet Interactive", - "categoryId": 6, - "url": "http://www.jetinteractive.com.au/", - "companyId": "jet_interactive" - }, - "jetlore": { - "name": "Jetlore", - "categoryId": 6, - "url": "http://www.jetlore.com/", - "companyId": "jetlore" - }, - "jetpack": { - "name": "Jetpack", - "categoryId": 6, - "url": "https://jetpack.com/", - "companyId": "automattic" - }, - "jetpack_digital": { - "name": "Jetpack Digital", - "categoryId": 6, - "url": "http://www.jetpack.com/", - "companyId": "jetpack_digital" - }, - "jimdo.com": { - "name": "jimdo.com", - "categoryId": 10, - "url": null, - "companyId": null - }, - "jink": { - "name": "Jink", - "categoryId": 4, - "url": "http://www.jink.de/", - "companyId": "jink" - }, - "jirafe": { - "name": "Jirafe", - "categoryId": 6, - "url": "http://jirafe.com/", - "companyId": "jirafe" - }, - "jivochat": { - "name": "JivoSite", - "categoryId": 2, - "url": "https://www.jivochat.com/", - "companyId": "jivochat" - }, - "jivox": { - "name": "Jivox", - "categoryId": 4, - "url": "http://www.jivox.com/", - "companyId": "jivox" - }, - "jobs_2_careers": { - "name": "Jobs 2 Careers", - "categoryId": 4, - "url": "http://www.jobs2careers.com/", - "companyId": "jobs_2_careers" - }, - "joinhoney": { - "name": "Honey", - "categoryId": 8, - "url": "https://www.joinhoney.com/", - "companyId": null - }, - "jornaya": { - "name": "Jornaya", - "categoryId": 6, - "url": "http://leadid.com/", - "companyId": "jornaya" - }, - "jquery": { - "name": "jQuery", - "categoryId": 9, - "url": "https://jquery.org/", - "companyId": "js_foundation" - }, - "js_communications": { - "name": "JS Communications", - "categoryId": 4, - "url": "http://www.jssearch.net/", - "companyId": "js_communications" - }, - "jsdelivr": { - "name": "jsDelivr", - "categoryId": 9, - "url": "https://www.jsdelivr.com/", - "companyId": null - }, - "jse_coin": { - "name": "JSE Coin", - "categoryId": 4, - "url": "https://jsecoin.com/", - "companyId": "jse_coin" - }, - "jsuol.com.br": { - "name": "jsuol.com.br", - "categoryId": 4, - "url": null, - "companyId": null - }, - "juggcash": { - "name": "JuggCash", - "categoryId": 3, - "url": "http://www.juggcash.com", - "companyId": "juggcash" - }, - "juiceadv": { - "name": "JuiceADV", - "categoryId": 4, - "url": "http://juiceadv.com/", - "companyId": "juiceadv" - }, - "juicyads": { - "name": "JuicyAds", - "categoryId": 3, - "url": "http://www.juicyads.com/", - "companyId": "juicyads" - }, - "jumplead": { - "name": "Jumplead", - "categoryId": 6, - "url": "https://jumplead.com/", - "companyId": "jumplead" - }, - "jumpstart_tagging_solutions": { - "name": "Jumpstart Tagging Solutions", - "categoryId": 6, - "url": "http://www.hearst.com/", - "companyId": "hearst" - }, - "jumptap": { - "name": "Jumptap", - "categoryId": 4, - "url": "http://www.jumptap.com/", - "companyId": "verizon" - }, - "jumptime": { - "name": "JumpTime", - "categoryId": 6, - "url": "http://www.jumptime.com/", - "companyId": "openx" - }, - "just_answer": { - "name": "Just Answer", - "categoryId": 2, - "url": "https://www.justanswer.com/", - "companyId": "just_answer" - }, - "just_premium": { - "name": "Just Premium", - "categoryId": 4, - "url": "http://justpremium.com/", - "companyId": "just_premium" - }, - "just_relevant": { - "name": "Just Relevant", - "categoryId": 4, - "url": "http://www.justrelevant.com/", - "companyId": "just_relevant" - }, - "jvc.gg": { - "name": "Jeuxvideo CDN", - "categoryId": 9, - "url": "http://www.jeuxvideo.com/", - "companyId": null - }, - "jw_player": { - "name": "JW Player", - "categoryId": 0, - "url": "https://www.jwplayer.com/", - "companyId": "jw_player" - }, - "jw_player_ad_solutions": { - "name": "JW Player Ad Solutions", - "categoryId": 4, - "url": "http://www.longtailvideo.com/adsolution/", - "companyId": "jw_player" - }, - "kaeufersiegel.de": { - "name": "Käufersiegel", - "categoryId": 2, - "url": "https://www.kaeufersiegel.de/", - "companyId": null - }, - "kairion.de": { - "name": "kairion", - "categoryId": 4, - "url": "https://kairion.de/", - "companyId": "prosieben_sat1" - }, - "kaloo.ga": { - "name": "Kalooga", - "categoryId": 4, - "url": "https://www.kalooga.com/", - "companyId": "kalooga" - }, - "kalooga_widget": { - "name": "Kalooga Widget", - "categoryId": 4, - "url": "http://kalooga.com/", - "companyId": "kalooga" - }, - "kaltura": { - "name": "Kaltura", - "categoryId": 0, - "url": "http://corp.kaltura.com/", - "companyId": "kaltura" - }, - "kameleoon": { - "name": "Kameleoon", - "categoryId": 6, - "url": "http://www.kameleoon.com/", - "companyId": "kameleoon" - }, - "kampyle": { - "name": "Medallia", - "categoryId": 2, - "url": "http://www.kampyle.com/", - "companyId": "medallia" - }, - "kanoodle": { - "name": "Kanoodle", - "categoryId": 4, - "url": "http://www.kanoodle.com/", - "companyId": "kanoodle" - }, - "kantar_media": { - "name": "Kantar Media", - "categoryId": 4, - "url": "https://www.kantarmedia.com/", - "companyId": "wpp" - }, - "kargo": { - "name": "Kargo", - "categoryId": 4, - "url": "http://www.kargo.com/", - "companyId": "kargo" - }, - "kaspersky-labs.com": { - "name": "Kaspersky Labs", - "categoryId": 12, - "url": "https://www.kaspersky.com/", - "companyId": "AO Kaspersky Lab" - }, - "kataweb.it": { - "name": "KataWeb", - "categoryId": 4, - "url": "http://www.kataweb.it/", - "companyId": null - }, - "katchup": { - "name": "Katchup", - "categoryId": 4, - "url": "http://www.katchup.fr/", - "companyId": "katchup" - }, - "kauli": { - "name": "Kauli", - "categoryId": 4, - "url": "http://kau.li/", - "companyId": "kauli" - }, - "kavanga": { - "name": "Kavanga", - "categoryId": 4, - "url": "http://kavanga.ru/", - "companyId": "kavanga" - }, - "keen_io": { - "name": "Keen IO", - "categoryId": 6, - "url": "https://keen.io", - "companyId": "keen_io" - }, - "kelkoo": { - "name": "Kelkoo", - "categoryId": 4, - "url": "http://www.kelkoo.com/", - "companyId": "kelkoo" - }, - "kenshoo": { - "name": "Kenshoo", - "categoryId": 6, - "url": "http://www.kenshoo.com/", - "companyId": "kenshoo" - }, - "keymetric": { - "name": "KeyMetric", - "categoryId": 6, - "url": "http://keymetric.net/", - "companyId": "keymetric" - }, - "keytiles": { - "name": "Keytiles", - "categoryId": 6, - "url": "http://keytiles.com/", - "companyId": "keytiles" - }, - "keywee": { - "name": "Keywee", - "categoryId": 6, - "url": "https://keywee.co/", - "companyId": "keywee" - }, - "keywordmax": { - "name": "KeywordMax", - "categoryId": 4, - "url": "http://www.keywordmax.com/", - "companyId": "digital_river" - }, - "khoros": { - "name": "Khoros", - "categoryId": 7, - "url": "http://www.massrelevance.com/", - "companyId": "khoros" - }, - "khzbeucrltin.com": { - "name": "khzbeucrltin.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "kickfactory": { - "name": "Kickfactory", - "categoryId": 4, - "url": "https://kickfactory.com/", - "companyId": "kickfactory" - }, - "kickfire": { - "name": "Kickfire", - "categoryId": 4, - "url": "http://www.visistat.com/", - "companyId": "kickfire" - }, - "king.com": { - "name": "King.com", - "categoryId": 4, - "url": "http://www.king.com/", - "companyId": "king.com" - }, - "king_com": { - "name": "King.com", - "categoryId": 8, - "url": "https://king.com/", - "companyId": "activision_blizzard" - }, - "kinja.com": { - "name": "Kinja", - "categoryId": 6, - "url": "https://kinja.com/", - "companyId": "gizmodo" - }, - "kiosked": { - "name": "Kiosked", - "categoryId": 4, - "url": "http://www.kiosked.com/", - "companyId": "kiosked" - }, - "kissmetrics.com": { - "name": "Kissmetrics", - "categoryId": 6, - "url": "https://www.kissmetrics.com/", - "companyId": "kissmetrics" - }, - "kitara_media": { - "name": "Kitara Media", - "categoryId": 4, - "url": "http://www.kitaramedia.com/", - "companyId": "kitara_media" - }, - "kixer": { - "name": "Kixer", - "categoryId": 4, - "url": "http://www.kixer.com", - "companyId": "kixer" - }, - "klarna.com": { - "name": "Klarna", - "categoryId": 2, - "url": "https://www.klarna.com/", - "companyId": null - }, - "klaviyo": { - "name": "Klaviyo", - "categoryId": 6, - "url": "https://www.klaviyo.com/", - "companyId": "klaviyo" - }, - "klikki": { - "name": "Klikki", - "categoryId": 4, - "url": "http://www.klikki.com/", - "companyId": "klikki" - }, - "kliksaya": { - "name": "KlikSaya", - "categoryId": 4, - "url": "http://www.kliksaya.com", - "companyId": "kliksaya" - }, - "kmeleo": { - "name": "Kméléo", - "categoryId": 4, - "url": "http://www.6peo.com/", - "companyId": "6peo" - }, - "knoopstat": { - "name": "Knoopstat", - "categoryId": 6, - "url": "http://www.knoopstat.nl", - "companyId": "knoopstat" - }, - "knotch": { - "name": "Knotch", - "categoryId": 2, - "url": "http://knotch.it", - "companyId": "knotch" - }, - "komoona": { - "name": "Komoona", - "categoryId": 4, - "url": "http://www.komoona.com/", - "companyId": "komoona" - }, - "kontera_contentlink": { - "name": "Kontera ContentLink", - "categoryId": 4, - "url": "http://www.kontera.com/", - "companyId": "singtel" - }, - "kontextr": { - "name": "Kontextr", - "categoryId": 4, - "url": "https://www.kontextr.com/", - "companyId": "kontext" - }, - "kontextua": { - "name": "Kontextua", - "categoryId": 4, - "url": "http://www.kontextua.com/", - "companyId": "kontextua" - }, - "korrelate": { - "name": "Korrelate", - "categoryId": 4, - "url": "http://korrelate.com/", - "companyId": "korrelate" - }, - "kortx": { - "name": "Kortx", - "categoryId": 6, - "url": "http://www.kortx.io/", - "companyId": "kortx" - }, - "kount": { - "name": "Kount", - "categoryId": 6, - "url": "https://kount.com/", - "companyId": null - }, - "krux_digital": { - "name": "Salesforce DMP", - "categoryId": 4, - "url": "https://www.salesforce.com/products/marketing-cloud/data-management/?mc=DMP", - "companyId": "salesforce" - }, - "kupona": { - "name": "Kupona", - "categoryId": 4, - "url": "http://www.kupona-media.de/en/retargeting-and-performance-media-width-kupona", - "companyId": "kupona" - }, - "kxcdn.com": { - "name": "Keycdn", - "categoryId": 9, - "url": "https://www.keycdn.com/", - "companyId": null - }, - "kyto": { - "name": "Kyto", - "categoryId": 6, - "url": "https://www.kyto.com/", - "companyId": "kyto" - }, - "ladsp.com": { - "name": "Logicad", - "categoryId": 4, - "url": "https://www.logicad.com/", - "companyId": "logicad" - }, - "lanista_concepts": { - "name": "Lanista Concepts", - "categoryId": 4, - "url": "http://lanistaconcepts.com/", - "companyId": "lanista_concepts" - }, - "latimes": { - "name": "Los Angeles Times", - "categoryId": 8, - "url": "http://www.latimes.com/", - "companyId": "latimes" - }, - "launch_darkly": { - "name": "Launch Darkly", - "categoryId": 5, - "url": "https://launchdarkly.com/index.html", - "companyId": "launch_darkly" - }, - "launchbit": { - "name": "LaunchBit", - "categoryId": 4, - "url": "https://www.launchbit.com/", - "companyId": "launchbit" - }, - "layer-ad.org": { - "name": "Layer-ADS.net", - "categoryId": 4, - "url": "http://layer-ads.net/", - "companyId": null - }, - "lazada": { - "name": "Lazada", - "categoryId": 4, - "url": "https://www.lazada.com/", - "companyId": "lazada" - }, - "lcx_digital": { - "name": "LCX Digital", - "categoryId": 4, - "url": "http://www.lcx.com/", - "companyId": "lcx_digital" - }, - "le_monde.fr": { - "name": "Le Monde.fr", - "categoryId": 8, - "url": "http://www.lemonde.fr/", - "companyId": "le_monde.fr" - }, - "lead_liaison": { - "name": "Lead Liaison", - "categoryId": 6, - "url": "https://www.leadliaison.com", - "companyId": "lead_liaison" - }, - "leadback": { - "name": "Leadback", - "categoryId": 6, - "url": "http://leadback.ru/?utm_source=leadback_widget&utm_medium=eas-balt.ru&utm_campaign=self_ad", - "companyId": "leadback" - }, - "leaddyno": { - "name": "LeadDyno", - "categoryId": 4, - "url": "http://www.leaddyno.com", - "companyId": "leaddyno" - }, - "leadforensics": { - "name": "LeadForensics", - "categoryId": 4, - "url": "http://www.leadforensics.com/", - "companyId": "lead_forensics" - }, - "leadgenic": { - "name": "LeadGENIC", - "categoryId": 4, - "url": "https://leadgenic.com/", - "companyId": "leadgenic" - }, - "leadhit": { - "name": "LeadHit", - "categoryId": 2, - "url": "http://leadhit.ru/", - "companyId": "leadhit" - }, - "leadin": { - "name": "Leadin", - "categoryId": 6, - "url": "https://www.hubspot.com/", - "companyId": "hubspot" - }, - "leading_reports": { - "name": "Leading Reports", - "categoryId": 4, - "url": "https://www.leadingreports.de/", - "companyId": "leading_reports" - }, - "leadinspector": { - "name": "LeadInspector", - "categoryId": 6, - "url": "https://www.leadinspector.de/", - "companyId": "leadinspector" - }, - "leadlander": { - "name": "LeadLander", - "categoryId": 6, - "url": "http://www.leadlander.com/", - "companyId": "leadlander" - }, - "leadlife": { - "name": "LeadLife", - "categoryId": 2, - "url": "http://leadlife.com/", - "companyId": "leadlife" - }, - "leadpages": { - "name": "Leadpages", - "categoryId": 6, - "url": "https://www.leadpages.net/", - "companyId": "leadpages" - }, - "leadplace": { - "name": "LeadPlace", - "categoryId": 6, - "url": "https://temelio.com", - "companyId": "leadplace" - }, - "leads_by_web.com": { - "name": "Leads by Web.com", - "categoryId": 4, - "url": "http://www.leadsbyweb.com", - "companyId": "web.com_group" - }, - "leadscoreapp": { - "name": "LeadScoreApp", - "categoryId": 2, - "url": "http://leadscoreapp.com", - "companyId": "leadscoreapp" - }, - "leadsius": { - "name": "Leadsius", - "categoryId": 4, - "url": "http://www.leadsius.com/", - "companyId": "leadsius" - }, - "leady": { - "name": "Leady", - "categoryId": 4, - "url": "http://www.leady.cz/", - "companyId": "leady" - }, - "leiki": { - "name": "Leiki", - "categoryId": 4, - "url": "http://www.leiki.com", - "companyId": "leiki" - }, - "lengow": { - "name": "Lengow", - "categoryId": 4, - "url": "http://www.lengow.com/", - "companyId": "lengow" - }, - "lenmit.com": { - "name": "lenmit.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lentainform.com": { - "name": "lentainform.com", - "categoryId": 8, - "url": "https://www.lentainform.com/", - "companyId": null - }, - "lenua.de": { - "name": "Lenua System", - "categoryId": 4, - "url": "http://lenua.de/", - "companyId": "synatix" - }, - "let_reach": { - "name": "Let Reach", - "categoryId": 2, - "url": "https://letreach.com/", - "companyId": "let_reach" - }, - "letv": { - "name": "LeTV", - "categoryId": 6, - "url": "http://www.le.com/", - "companyId": "letv" - }, - "level3_communications": { - "name": "Level 3 Communications, Inc.", - "categoryId": 8, - "url": "http://www.level3.com/en/", - "companyId": "level3_communications" - }, - "licensebuttons.net": { - "name": "licensebuttons.net", - "categoryId": 9, - "url": "https://licensebuttons.net/", - "companyId": null - }, - "lifestreet_media": { - "name": "LifeStreet Media", - "categoryId": 4, - "url": "http://lifestreetmedia.com/", - "companyId": "lifestreet_media" - }, - "ligatus": { - "name": "Ligatus", - "categoryId": 4, - "url": "http://www.ligatus.com/", - "companyId": "outbrain" - }, - "limk": { - "name": "Limk", - "categoryId": 4, - "url": "https://limk.com/", - "companyId": "limk" - }, - "line_apps": { - "name": "Line", - "categoryId": 6, - "url": "https://line.me/en-US/", - "companyId": "line" - }, - "linezing": { - "name": "LineZing", - "categoryId": 4, - "url": "http://www.linezing.com/", - "companyId": "linezing" - }, - "linkbucks": { - "name": "Linkbucks", - "categoryId": 4, - "url": "http://www.linkbucks.com/", - "companyId": "linkbucks" - }, - "linkconnector": { - "name": "LinkConnector", - "categoryId": 4, - "url": "http://www.linkconnector.com", - "companyId": "linkconnector" - }, - "linkedin": { - "name": "LinkedIn", - "categoryId": 8, - "url": "https://www.linkedin.com/", - "companyId": "microsoft" - }, - "linkedin_ads": { - "name": "LinkedIn Ads", - "categoryId": 4, - "url": "http://www.linkedin.com/", - "companyId": "microsoft" - }, - "linkedin_analytics": { - "name": "LinkedIn Analytics", - "categoryId": 6, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "linkedin_marketing_solutions": { - "name": "LinkedIn Marketing Solutions", - "categoryId": 4, - "url": "https://business.linkedin.com/marketing-solutions", - "companyId": "microsoft" - }, - "linkedin_widgets": { - "name": "LinkedIn Widgets", - "categoryId": 7, - "url": "https://www.linkedin.com", - "companyId": "microsoft" - }, - "linker": { - "name": "Linker", - "categoryId": 4, - "url": "https://linker.hr/", - "companyId": "linker" - }, - "linkprice": { - "name": "LinkPrice", - "categoryId": 4, - "url": "http://www.linkprice.com/", - "companyId": "linkprice" - }, - "linkpulse": { - "name": "Linkpulse", - "categoryId": 6, - "url": "http://www.linkpulse.com/", - "companyId": "linkpulse" - }, - "linksalpha": { - "name": "LinksAlpha", - "categoryId": 7, - "url": "http://www.linksalpha.com", - "companyId": "linksalpha" - }, - "linksmart": { - "name": "LinkSmart", - "categoryId": 4, - "url": "http://www.linksmart.com/", - "companyId": "sovrn" - }, - "linkstorm": { - "name": "Linkstorm", - "categoryId": 2, - "url": "http://www.linkstorms.com/", - "companyId": "linkstorm" - }, - "linksynergy.com": { - "name": "Rakuten LinkShare", - "categoryId": 4, - "url": "https://rakutenmarketing.com/affiliate", - "companyId": "rakuten" - }, - "linkup": { - "name": "LinkUp", - "categoryId": 6, - "url": "http://www.linkup.com/", - "companyId": "linkup" - }, - "linkwise": { - "name": "Linkwise", - "categoryId": 4, - "url": "http://linkwi.se/global-en/", - "companyId": "linkwise" - }, - "linkwithin": { - "name": "LinkWithin", - "categoryId": 7, - "url": "http://www.linkwithin.com/", - "companyId": "linkwithin" - }, - "liquidm_technology_gmbh": { - "name": "LiquidM Technology GmbH", - "categoryId": 4, - "url": "https://liquidm.com/", - "companyId": "liquidm" - }, - "liqwid": { - "name": "Liqwid", - "categoryId": 4, - "url": "https://liqwid.com/", - "companyId": "liqwid" - }, - "list.ru": { - "name": "Rating@Mail.Ru", - "categoryId": 7, - "url": "http://list.ru/", - "companyId": "megafon" - }, - "listrak": { - "name": "Listrak", - "categoryId": 2, - "url": "http://www.listrak.com/", - "companyId": "listrak" - }, - "live2support": { - "name": "Live2Support", - "categoryId": 2, - "url": "http://www.live2support.com/", - "companyId": "live2support" - }, - "live800": { - "name": "Live800", - "categoryId": 2, - "url": "http://live800.com", - "companyId": "live800" - }, - "live_agent": { - "name": "Live Agent", - "categoryId": 2, - "url": "https://www.ladesk.com/", - "companyId": "liveagent" - }, - "live_help_now": { - "name": "Live Help Now", - "categoryId": 2, - "url": "http://www.livehelpnow.net/", - "companyId": "live_help_now" - }, - "live_intent": { - "name": "Live Intent", - "categoryId": 6, - "url": "http://www.liveintent.com/", - "companyId": "liveintent" - }, - "live_journal": { - "name": "Live Journal", - "categoryId": 6, - "url": "http://www.livejournal.com/", - "companyId": "livejournal" - }, - "liveadexchanger.com": { - "name": "liveadexchanger.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "livechat": { - "name": "LiveChat", - "categoryId": 2, - "url": "http://www.livechatinc.com", - "companyId": "livechat" - }, - "livechatnow": { - "name": "LiveChatNow", - "categoryId": 2, - "url": "http://www.livechatnow.com/", - "companyId": "livechatnow!" - }, - "liveclicker": { - "name": "Liveclicker", - "categoryId": 2, - "url": "http://www.liveclicker.com", - "companyId": "liveclicker" - }, - "livecounter": { - "name": "Livecounter", - "categoryId": 6, - "url": "http://www.livecounter.dk/", - "companyId": "livecounter" - }, - "livefyre": { - "name": "Livefyre", - "categoryId": 1, - "url": "http://www.livefyre.com/", - "companyId": "adobe" - }, - "liveinternet": { - "name": "LiveInternet", - "categoryId": 1, - "url": "http://www.liveinternet.ru/", - "companyId": "liveinternet" - }, - "liveperson": { - "name": "LivePerson", - "categoryId": 2, - "url": "http://www.liveperson.com/", - "companyId": "liveperson" - }, - "liveramp": { - "name": "LiveRamp", - "categoryId": 4, - "url": "https://liveramp.com/", - "companyId": "acxiom" - }, - "livere": { - "name": "LiveRe", - "categoryId": 7, - "url": "http://www.livere.com/", - "companyId": "livere" - }, - "livesportmedia.eu": { - "name": "Livesport Media", - "categoryId": 8, - "url": "http://www.livesportmedia.eu/", - "companyId": null - }, - "livestream": { - "name": "Livestream", - "categoryId": 0, - "url": "http://vimeo.com/", - "companyId": "vimeo" - }, - "livetex.ru": { - "name": "LiveTex", - "categoryId": 2, - "url": "https://livetex.ru/", - "companyId": "livetex" - }, - "lkqd": { - "name": "LKQD", - "categoryId": 4, - "url": "http://www.lkqd.com/", - "companyId": "nexstar" - }, - "loadbee.com": { - "name": "Loadbee", - "categoryId": 4, - "url": "https://company.loadbee.com/de/loadbee-home", - "companyId": null - }, - "loadercdn.com": { - "name": "loadercdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "loadsource.org": { - "name": "loadsource.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "localytics": { - "name": "Localytics", - "categoryId": 6, - "url": "http://www.localytics.com/", - "companyId": "localytics" - }, - "lockerdome": { - "name": "LockerDome", - "categoryId": 7, - "url": "https://lockerdome.com", - "companyId": "lockerdome" - }, - "lockerz_share": { - "name": "AddToAny", - "categoryId": 7, - "url": "http://www.addtoany.com/", - "companyId": "addtoany" - }, - "logan_media": { - "name": "Logan Media", - "categoryId": 6, - "url": "http://loganmedia.mobi/", - "companyId": "logan_media" - }, - "logdna": { - "name": "LogDNA", - "categoryId": 4, - "url": "http://www.answerbook.com/", - "companyId": "logdna" - }, - "loggly": { - "name": "Loggly", - "categoryId": 6, - "url": "http://loggly.com/", - "companyId": "loggly" - }, - "logly": { - "name": "logly", - "categoryId": 6, - "url": "http://logly.co.jp/", - "companyId": "logly" - }, - "logsss.com": { - "name": "logsss.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lomadee": { - "name": "Lomadee", - "categoryId": 4, - "url": "http://lomadee.com", - "companyId": "lomadee" - }, - "longtail_video_analytics": { - "name": "JW Player Analytics", - "categoryId": 4, - "url": "http://www.longtailvideo.com/", - "companyId": "jw_player" - }, - "loomia": { - "name": "Loomia", - "categoryId": 4, - "url": "http://www.loomia.com/", - "companyId": "loomia" - }, - "loop11": { - "name": "Loop11", - "categoryId": 6, - "url": "https://360i.com/", - "companyId": "360i" - }, - "loopfuse_oneview": { - "name": "LoopFuse OneView", - "categoryId": 4, - "url": "http://www.loopfuse.com/", - "companyId": "loopfuse" - }, - "lotame": { - "name": "Lotame", - "categoryId": 4, - "url": "http://www.lotame.com/", - "companyId": "lotame" - }, - "lottex_inc": { - "name": "vidcpm.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lucid": { - "name": "Lucid", - "categoryId": 4, - "url": "https://luc.id/", - "companyId": "luc.id" - }, - "lucid_media": { - "name": "Lucid Media", - "categoryId": 4, - "url": "http://www.lucidmedia.com/", - "companyId": "singtel" - }, - "lucini": { - "name": "Lucini", - "categoryId": 4, - "url": "http://www.lucinilucini.com/", - "companyId": "lucini_&_lucini_communications" - }, - "lucky_orange": { - "name": "Lucky Orange", - "categoryId": 6, - "url": "http://www.luckyorange.com/", - "companyId": "lucky_orange" - }, - "luckypushh.com": { - "name": "luckypushh.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lxr100": { - "name": "LXR100", - "categoryId": 4, - "url": "http://www.netelixir.com/lxr100_PPC_management_tool.html", - "companyId": "netelixir" - }, - "lynchpin_analytics": { - "name": "Lynchpin Analytics", - "categoryId": 4, - "url": "http://www.lynchpin.com/", - "companyId": "lynchpin_analytics" - }, - "lytics": { - "name": "Lytics", - "categoryId": 6, - "url": "https://www.lytics.com/", - "companyId": "lytics" - }, - "lyuoaxruaqdo.com": { - "name": "lyuoaxruaqdo.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "m-pathy": { - "name": "m-pathy", - "categoryId": 4, - "url": "http://www.m-pathy.com/", - "companyId": "m-pathy" - }, - "m._p._newmedia": { - "name": "M. P. NEWMEDIA", - "categoryId": 4, - "url": "http://www.mp-newmedia.com/", - "companyId": "sticky" - }, - "m4n": { - "name": "M4N", - "categoryId": 4, - "url": "http://www.zanox.com/us/", - "companyId": "axel_springer" - }, - "mad_ads_media": { - "name": "Mad Ads Media", - "categoryId": 4, - "url": "http://www.madadsmedia.com/", - "companyId": "mad_ads_media" - }, - "madeleine.de": { - "name": "madeleine.de", - "categoryId": 4, - "url": null, - "companyId": null - }, - "madison_logic": { - "name": "Madison Logic", - "categoryId": 4, - "url": "http://www.madisonlogic.com/", - "companyId": "madison_logic" - }, - "madnet": { - "name": "MADNET", - "categoryId": 4, - "url": "http://madnet.ru/en", - "companyId": "madnet" - }, - "mads": { - "name": "MADS", - "categoryId": 4, - "url": "http://www.mads.com/", - "companyId": "mads" - }, - "magna_advertise": { - "name": "Magna Advertise", - "categoryId": 4, - "url": "http://magna.ru/", - "companyId": "magna_advertise" - }, - "magnetic": { - "name": "Magnetic", - "categoryId": 4, - "url": "http://www.magnetic.is", - "companyId": "magnetic" - }, - "magnetise_group": { - "name": "Magnetise Group", - "categoryId": 4, - "url": "http://magnetisegroup.com/", - "companyId": "magnetise_group" - }, - "magnify360": { - "name": "Magnify360", - "categoryId": 6, - "url": "http://www.magnify360.com/", - "companyId": "magnify360" - }, - "magnuum.com": { - "name": "magnuum.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "mail.ru_banner": { - "name": "Mail.Ru Banner Network", - "categoryId": 4, - "url": "http://mail.ru/", - "companyId": "megafon" - }, - "mail.ru_counter": { - "name": "Mail.Ru Counter", - "categoryId": 2, - "url": "https://corp.megafon.com/", - "companyId": "megafon" - }, - "mail.ru_group": { - "name": "Mail.Ru Group", - "categoryId": 7, - "url": "http://mail.ru/", - "companyId": "megafon" - }, - "mailchimp_tracking": { - "name": "MailChimp Tracking", - "categoryId": 4, - "url": "http://mailchimp.com/", - "companyId": "mailchimp" - }, - "mailerlite.com": { - "name": "Mailerlite", - "categoryId": 10, - "url": "https://www.mailerlite.com/", - "companyId": "mailerlite" - }, - "mailtrack.io": { - "name": "MailTrack.io", - "categoryId": 4, - "url": "https://mailtrack.io", - "companyId": "mailtrack" - }, - "mainadv": { - "name": "mainADV", - "categoryId": 4, - "url": "http://www.mainadv.com/", - "companyId": "mainadv" - }, - "makazi": { - "name": "Makazi", - "categoryId": 4, - "url": "http://www.makazi.com/en/", - "companyId": "makazi_group" - }, - "makeappdev.xyz": { - "name": "makeappdev.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "makesource.cool": { - "name": "makesource.cool", - "categoryId": 11, - "url": null, - "companyId": null - }, - "mango": { - "name": "Mango", - "categoryId": 4, - "url": "https://www.mango-office.ru/", - "companyId": "mango_office" - }, - "manycontacts": { - "name": "ManyContacts", - "categoryId": 4, - "url": "https://www.manycontacts.com/", - "companyId": "manycontacts" - }, - "mapandroute.de": { - "name": "Map and Route", - "categoryId": 2, - "url": "http://www.mapandroute.de/", - "companyId": null - }, - "mapbox": { - "name": "Mapbox", - "categoryId": 2, - "url": "https://www.mapbox.com/", - "companyId": null - }, - "maploco": { - "name": "MapLoco", - "categoryId": 4, - "url": "http://www.maploco.com/", - "companyId": "maploco" - }, - "marchex": { - "name": "Marchex", - "categoryId": 4, - "url": "http://www.industrybrains.com/", - "companyId": "marchex" - }, - "marimedia": { - "name": "Marimedia", - "categoryId": 4, - "url": "http://www.marimedia.net/", - "companyId": "tremor_video" - }, - "marin_search_marketer": { - "name": "Marin Search Marketer", - "categoryId": 4, - "url": "http://www.marinsoftware.com/", - "companyId": "marin_software" - }, - "mark_+_mini": { - "name": "Mark & Mini", - "categoryId": 4, - "url": "http://www.markandmini.com/index.cfm", - "companyId": "edm_group" - }, - "market_thunder": { - "name": "Market Thunder", - "categoryId": 4, - "url": "https://www.makethunder.com/", - "companyId": "market_thunder" - }, - "marketgid": { - "name": "MarketGid", - "categoryId": 4, - "url": "http://www.mgid.com/", - "companyId": "marketgid_usa" - }, - "marketing_automation": { - "name": "Marketing Automation", - "categoryId": 4, - "url": "https://en.frodx.com", - "companyId": "frodx" - }, - "marketo": { - "name": "Marketo", - "categoryId": 4, - "url": "http://www.marketo.com/", - "companyId": "marketo" - }, - "markmonitor": { - "name": "MarkMonitor", - "categoryId": 4, - "url": "https://www.markmonitor.com/", - "companyId": "markmonitor" - }, - "marktest": { - "name": "Marktest", - "categoryId": 4, - "url": "http://www.marktest.com/", - "companyId": "marktest_group" - }, - "marshadow.io": { - "name": "marshadow.io", - "categoryId": 4, - "url": null, - "companyId": null - }, - "martini_media": { - "name": "Martini Media", - "categoryId": 4, - "url": "http://martinimediainc.com/", - "companyId": "martini_media" - }, - "maru-edu": { - "name": "Maru-EDU", - "categoryId": 2, - "url": "https://www.maruedr.com", - "companyId": "maruedr" - }, - "marvellous_machine": { - "name": "Marvellous Machine", - "categoryId": 6, - "url": "https://www.marvellousmachine.net/", - "companyId": "marvellous_machine" - }, - "master_banner_network": { - "name": "Master Banner Network", - "categoryId": 4, - "url": "http://www.mbn.com.ua/", - "companyId": "master_banner_network" - }, - "mastertarget": { - "name": "MasterTarget", - "categoryId": 4, - "url": "http://mastertarget.ru/", - "companyId": "mastertarget" - }, - "matelso": { - "name": "Matelso", - "categoryId": 6, - "url": "https://www.matelso.de", - "companyId": "matelso" - }, - "mather_analytics": { - "name": "Mather Analytics", - "categoryId": 6, - "url": "https://www.mathereconomics.com/", - "companyId": "mather_economics" - }, - "mathjax.org": { - "name": "MathJax", - "categoryId": 9, - "url": "https://www.mathjax.org/", - "companyId": null - }, - "matiro": { - "name": "Matiro", - "categoryId": 6, - "url": "http://matiro.com/", - "companyId": "matiro" - }, - "matomo": { - "name": "Matomo", - "categoryId": 6, - "url": "https://matomo.org/s", - "companyId": "matomo" - }, - "matomy_market": { - "name": "Matomy Market", - "categoryId": 4, - "url": "http://www.matomymarket.com/", - "companyId": "matomy_media" - }, - "maxbounty": { - "name": "MaxBounty", - "categoryId": 5, - "url": "http://www.maxbounty.com/", - "companyId": "maxbounty" - }, - "maxcdn": { - "name": "MaxCDN", - "categoryId": 9, - "url": "https://www.maxcdn.com/", - "companyId": null - }, - "maxlab": { - "name": "Maxlab", - "categoryId": 4, - "url": "http://maxlab.ru", - "companyId": "maxlab" - }, - "maxmind": { - "name": "MaxMind", - "categoryId": 4, - "url": "http://www.maxmind.com/", - "companyId": "maxmind" - }, - "maxonclick_com": { - "name": "maxonclick.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "maxpoint_interactive": { - "name": "MaxPoint Interactive", - "categoryId": 4, - "url": "http://www.maxpointinteractive.com/", - "companyId": "maxpoint_interactive" - }, - "maxymiser": { - "name": "Oracle Maxymiser", - "categoryId": 4, - "url": "https://www.oracle.com/marketingcloud/products/testing-and-optimization/index.html", - "companyId": "oracle" - }, - "mbr_targeting": { - "name": "mbr targeting", - "categoryId": 4, - "url": "https://mbr-targeting.com/", - "companyId": "stroer" - }, - "mbuy": { - "name": "MBuy", - "categoryId": 4, - "url": "http://www.adbuyer.com/", - "companyId": "mbuy" - }, - "mcabi": { - "name": "mCabi", - "categoryId": 4, - "url": "https://mcabi.mcloudglobal.com/#", - "companyId": "mcabi" - }, - "mcafee_secure": { - "name": "McAfee Secure", - "categoryId": 5, - "url": "http://www.mcafeesecure.com/us/", - "companyId": "mcafee" - }, - "mconet": { - "name": "MCOnet", - "categoryId": 4, - "url": "http://mconet.biz/", - "companyId": "mconet" - }, - "mdotlabs": { - "name": "MdotLabs", - "categoryId": 4, - "url": "http://www.mdotlabs.com/", - "companyId": "comscore" - }, - "media-clic": { - "name": "Media-clic", - "categoryId": 4, - "url": "http://www.media-clic.com/", - "companyId": "media-click" - }, - "media-imdb.com": { - "name": "IMDB CDN", - "categoryId": 9, - "url": "https://www.imdb.com/", - "companyId": "amazon_associates" - }, - "media.net": { - "name": "Media.net", - "categoryId": 4, - "url": "http://www.media.net/", - "companyId": "media.net" - }, - "media_impact": { - "name": "Media Impact", - "categoryId": 4, - "url": "https://mediaimpact.de/index.html", - "companyId": "media_impact" - }, - "media_innovation_group": { - "name": "Xaxis", - "categoryId": 4, - "url": "https://www.xaxis.com/", - "companyId": "media_innovation_group" - }, - "media_today": { - "name": "Media Today", - "categoryId": 4, - "url": "http://mediatoday.ru/", - "companyId": "media_today" - }, - "mediaad": { - "name": "MediaAd", - "categoryId": 4, - "url": "https://mediaad.org", - "companyId": "mediaad" - }, - "mediaglu": { - "name": "Mediaglu", - "categoryId": 4, - "url": "http://mlnadvertising.com/", - "companyId": "appnexus" - }, - "mediahub": { - "name": "MediaHub", - "categoryId": 4, - "url": "http://www.mediahub.com/", - "companyId": "mediahub" - }, - "medialand": { - "name": "Medialand", - "categoryId": 4, - "url": "http://medialand.ru", - "companyId": "medialand" - }, - "medialead": { - "name": "Medialead", - "categoryId": 4, - "url": "https://www.medialead.de/", - "companyId": "the_reach_group" - }, - "mediamath": { - "name": "MediaMath", - "categoryId": 4, - "url": "http://www.mediamath.com/", - "companyId": "mediamath" - }, - "mediametrics": { - "name": "Mediametrics", - "categoryId": 7, - "url": "http://mediametrics.ru", - "companyId": "mediametrics" - }, - "median": { - "name": "Median", - "categoryId": 4, - "url": "http://median.hu", - "companyId": "median" - }, - "mediapass": { - "name": "MediaPass", - "categoryId": 4, - "url": "http://www.mediapass.com/", - "companyId": "mediapass" - }, - "mediapost_communications": { - "name": "Mediapost Communications", - "categoryId": 6, - "url": "https://vrm.mediapostcommunication.net/", - "companyId": "mediapost_communications" - }, - "mediarithmics.com": { - "name": "Mediarithmics", - "categoryId": 4, - "url": "http://www.mediarithmics.com/en/", - "companyId": "mediarithmics" - }, - "mediascope": { - "name": "Mediascope", - "categoryId": 6, - "url": "http://mediascope.net/", - "companyId": "mediascope" - }, - "mediashakers": { - "name": "MediaShakers", - "categoryId": 4, - "url": "http://www.mediashakers.com/", - "companyId": "mediashakers" - }, - "mediashift": { - "name": "MediaShift", - "categoryId": 4, - "url": "http://www.mediashift.com/", - "companyId": "mediashift" - }, - "mediator.media": { - "name": "Mediator", - "categoryId": 6, - "url": "https://mediator.media/", - "companyId": "mycom_bv" - }, - "mediav": { - "name": "MediaV", - "categoryId": 4, - "url": "https://www.mediav.com/", - "companyId": "mediav" - }, - "mediawhiz": { - "name": "Mediawhiz", - "categoryId": 4, - "url": "http://www.mediawhiz.com/", - "companyId": "matomy_media" - }, - "medigo": { - "name": "Medigo", - "categoryId": 4, - "url": "https://www.mediego.com/en/", - "companyId": "mediego" - }, - "medley": { - "name": "Medley", - "categoryId": 4, - "url": "http://medley.com/", - "companyId": "friendfinder_networks" - }, - "medyanet": { - "name": "MedyaNet", - "categoryId": 4, - "url": "http://www.medyanet.com.tr/", - "companyId": "medyanet" - }, - "meebo_bar": { - "name": "Meebo Bar", - "categoryId": 7, - "url": "http://bar.meebo.com/", - "companyId": "google" - }, - "meetrics": { - "name": "Meetrics", - "categoryId": 4, - "url": "http://www.meetrics.de/", - "companyId": "meetrics" - }, - "megaindex": { - "name": "MegaIndex", - "categoryId": 4, - "url": "http://www.megaindex.ru", - "companyId": "megaindex" - }, - "mein-bmi.com": { - "name": "mein-bmi.com", - "categoryId": 12, - "url": "https://www.mein-bmi.com/", - "companyId": null - }, - "melissa": { - "name": "Melissa", - "categoryId": 6, - "url": "https://www.melissa.com/", - "companyId": "melissa_global_intelligence" - }, - "melt": { - "name": "Melt", - "categoryId": 4, - "url": "http://meltdsp.com/", - "companyId": "melt" - }, - "menlo": { - "name": "Menlo", - "categoryId": 4, - "url": "http://www.menlotechnologies.cn/", - "companyId": "menlotechnologies" - }, - "mentad": { - "name": "MentAd", - "categoryId": 4, - "url": "http://www.mentad.com/", - "companyId": "mentad" - }, - "mercado": { - "name": "Mercado", - "categoryId": 4, - "url": "https://www.mercadolivre.com.br/", - "companyId": "mercado_livre" - }, - "merchantadvantage": { - "name": "MerchantAdvantage", - "categoryId": 4, - "url": "http://www.merchantadvantage.com/channelmanagement.cfm", - "companyId": "merchantadvantage" - }, - "merchenta": { - "name": "Merchenta", - "categoryId": 4, - "url": "http://www.merchenta.com/", - "companyId": "merchenta" - }, - "mercury_media": { - "name": "Mercury Media", - "categoryId": 4, - "url": "http://trackingsoft.com/", - "companyId": "mercury_media" - }, - "merkle_research": { - "name": "Merkle Research", - "categoryId": 6, - "url": "http://www.dentsuaegisnetwork.com/", - "companyId": "dentsu_aegis_network" - }, - "merkle_rkg": { - "name": "Merkle RKG", - "categoryId": 6, - "url": "https://www.merkleinc.com/what-we-do/digital-agency-services/rkg-now-fully-integrated-merkle", - "companyId": "dentsu_aegis_network" - }, - "messenger.com": { - "name": "Facebook Messenger", - "categoryId": 7, - "url": "https://messenger.com", - "companyId": "facebook" - }, - "meta_network": { - "name": "Meta Network", - "categoryId": 7, - "url": "http://www.metanetwork.com/", - "companyId": "meta_network" - }, - "metaffiliation.com": { - "name": "Netaffiliation", - "categoryId": 4, - "url": "http://netaffiliation.com/", - "companyId": "kwanko" - }, - "metapeople": { - "name": "Metapeople", - "categoryId": 4, - "url": "http://www.metapeople.com/us/", - "companyId": "metapeople" - }, - "metrigo": { - "name": "Metrigo", - "categoryId": 4, - "url": "http://metrigo.com/", - "companyId": "metrigo" - }, - "metriweb": { - "name": "MetriWeb", - "categoryId": 4, - "url": "http://www.metriware.be/", - "companyId": "metriware" - }, - "miaozhen": { - "name": "Miaozhen", - "categoryId": 4, - "url": "http://miaozhen.com/en/index.html", - "companyId": "miaozhen" - }, - "microad": { - "name": "MicroAd", - "categoryId": 4, - "url": "https://www.microad.co.jp/", - "companyId": "microad" - }, - "microsoft": { - "name": "Microsoft Services", - "categoryId": 8, - "url": "http://www.microsoft.com/", - "companyId": "microsoft" - }, - "microsoft_adcenter_conversion": { - "name": "Microsoft adCenter Conversion", - "categoryId": 4, - "url": "https://adcenter.microsoft.com/", - "companyId": "microsoft" - }, - "microsoft_analytics": { - "name": "Microsoft Analytics", - "categoryId": 4, - "url": "https://adcenter.microsoft.com", - "companyId": "microsoft" - }, - "microsoft_clarity": { - "name": "Microsoft Clarity", - "categoryId": 6, - "url": "https://clarity.microsoft.com/", - "companyId": "microsoft" - }, - "mindset_media": { - "name": "Mindset Media", - "categoryId": 4, - "url": "http://www.mindset-media.com/", - "companyId": "google" - }, - "mindspark": { - "name": "Mindspark", - "categoryId": 6, - "url": "http://www.mindspark.com/", - "companyId": "iac_apps" - }, - "mindviz_tracker": { - "name": "MindViz Tracker", - "categoryId": 4, - "url": "http://mvtracker.com/", - "companyId": "mindviz" - }, - "minewhat": { - "name": "MineWhat", - "categoryId": 4, - "url": "http://www.minewhat.com", - "companyId": "minewhat" - }, - "mints_app": { - "name": "Mints App", - "categoryId": 2, - "url": "https://mintsapp.io/", - "companyId": "mints_app" - }, - "minute.ly": { - "name": "minute.ly", - "categoryId": 0, - "url": "http://minute.ly/", - "companyId": "minute.ly" - }, - "minute.ly_video": { - "name": "minute.ly video", - "categoryId": 0, - "url": "http://minute.ly/", - "companyId": "minute.ly" - }, - "mirando": { - "name": "Mirando", - "categoryId": 4, - "url": "http://mirando.de", - "companyId": "mirando" - }, - "mirtesen.ru": { - "name": "mirtesen.ru", - "categoryId": 7, - "url": "https://mirtesen.ru/", - "companyId": null - }, - "mister_bell": { - "name": "Mister Bell", - "categoryId": 4, - "url": "http://misterbell.fr/", - "companyId": "mister_bell" - }, - "mixi": { - "name": "mixi", - "categoryId": 7, - "url": "http://mixi.jp/", - "companyId": "mixi" - }, - "mixpanel": { - "name": "Mixpanel", - "categoryId": 6, - "url": "http://mixpanel.com/", - "companyId": "mixpanel" - }, - "mixpo": { - "name": "Mixpo", - "categoryId": 4, - "url": "http://dynamicvideoad.mixpo.com/", - "companyId": "mixpo" - }, - "mluvii": { - "name": "Mluvii", - "categoryId": 2, - "url": "https://www.mluvii.com", - "companyId": "mluvii" - }, - "mncdn.com": { - "name": "MediaNova CDN", - "categoryId": 9, - "url": "https://www.medianova.com/", - "companyId": null - }, - "moat": { - "name": "Moat", - "categoryId": 4, - "url": "http://www.moat.com/", - "companyId": "oracle" - }, - "mobicow": { - "name": "Mobicow", - "categoryId": 4, - "url": "http://www.mobicow.com/", - "companyId": "mobicow" - }, - "mobify": { - "name": "Mobify", - "categoryId": 4, - "url": "http://www.mobify.com/", - "companyId": "mobify" - }, - "mobtrks.com": { - "name": "mobtrks.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "mocean_mobile": { - "name": "mOcean Mobile", - "categoryId": 4, - "url": "http://www.moceanmobile.com/", - "companyId": "pubmatic" - }, - "mochapp": { - "name": "MoChapp", - "categoryId": 2, - "url": "http://www.mochapp.com/", - "companyId": "mochapp" - }, - "modern_impact": { - "name": "Modern Impact", - "categoryId": 4, - "url": "http://www.modernimpact.com/", - "companyId": "modern_impact" - }, - "modernus": { - "name": "Modernus", - "categoryId": 6, - "url": "http://www.modernus.is", - "companyId": "modernus" - }, - "modulepush.com": { - "name": "modulepush.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "mogo_interactive": { - "name": "Mogo Interactive", - "categoryId": 4, - "url": "http://www.mogomarketing.com/", - "companyId": "mogo_interactive" - }, - "mokono_analytics": { - "name": "Mokono Analytics", - "categoryId": 4, - "url": "http://www.populis.com", - "companyId": "populis" - }, - "monero_miner": { - "name": "Monero Miner", - "categoryId": 8, - "url": "http://devappgrant.space/", - "companyId": null - }, - "monetate": { - "name": "Monetate", - "categoryId": 6, - "url": "http://monetate.com", - "companyId": "monetate" - }, - "monetize_me": { - "name": "Monetize Me", - "categoryId": 4, - "url": "http://www.monetize-me.com/", - "companyId": "monetize_me" - }, - "moneytizer": { - "name": "Moneytizer", - "categoryId": 4, - "url": "https://www.themoneytizer.com/", - "companyId": "the_moneytizer" - }, - "mongoose_metrics": { - "name": "Mongoose Metrics", - "categoryId": 4, - "url": "http://www.mongoosemetrics.com/", - "companyId": "mongoose_metrics" - }, - "monitis": { - "name": "Monitis", - "categoryId": 6, - "url": "http://www.monitis.com/", - "companyId": "monitis" - }, - "monitus": { - "name": "Monitus", - "categoryId": 6, - "url": "http://www.monitus.net/", - "companyId": "monitus" - }, - "monotype_gmbh": { - "name": "Monotype GmbH", - "categoryId": 9, - "url": "http://www.monotype.com/", - "companyId": "monotype" - }, - "monotype_imaging": { - "name": "Fonts.com Store", - "categoryId": 2, - "url": "https://www.fonts.com/", - "companyId": "monotype" - }, - "monsido": { - "name": "Monsido", - "categoryId": 6, - "url": "https://monsido.com/", - "companyId": "monsido" - }, - "monster_advertising": { - "name": "Monster Advertising", - "categoryId": 4, - "url": "http://www.monster.com/", - "companyId": "monster_worldwide" - }, - "mooxar": { - "name": "Mooxar", - "categoryId": 4, - "url": "http://mooxar.com/", - "companyId": "mooxar" - }, - "mopinion.com": { - "name": "Mopinion", - "categoryId": 2, - "url": "https://mopinion.com/", - "companyId": "mopinion" - }, - "mopub": { - "name": "MoPub", - "categoryId": 4, - "url": "https://www.mopub.com/", - "companyId": "twitter" - }, - "more_communication": { - "name": "More Communication", - "categoryId": 4, - "url": "http://www.more-com.co.jp/", - "companyId": "more_communication" - }, - "moreads": { - "name": "moreAds", - "categoryId": 4, - "url": "https://www.moras.jp", - "companyId": "moreads" - }, - "motigo_webstats": { - "name": "Motigo Webstats", - "categoryId": 7, - "url": "http://webstats.motigo.com/", - "companyId": "motigo" - }, - "motionpoint": { - "name": "MotionPoint", - "categoryId": 6, - "url": "http://www.motionpoint.com/", - "companyId": "motionpoint_corporation" - }, - "mouseflow": { - "name": "Mouseflow", - "categoryId": 6, - "url": "http://mouseflow.com/", - "companyId": "mouseflow" - }, - "mousestats": { - "name": "MouseStats", - "categoryId": 4, - "url": "http://www.mousestats.com/", - "companyId": "mousestats" - }, - "mousetrace": { - "name": "MouseTrace", - "categoryId": 6, - "url": "http://www.mousetrace.com/", - "companyId": "mousetrace" - }, - "mov.ad": { - "name": "Mov.ad ", - "categoryId": 8, - "url": null, - "companyId": null - }, - "movable_ink": { - "name": "Movable Ink", - "categoryId": 2, - "url": "https://movableink.com/", - "companyId": "movable_ink" - }, - "movable_media": { - "name": "Movable Media", - "categoryId": 4, - "url": "http://www.movablemedia.com/", - "companyId": "movable_media" - }, - "moz": { - "name": "Moz", - "categoryId": 8, - "url": "https://moz.com/", - "companyId": null - }, - "mozoo": { - "name": "MoZoo", - "categoryId": 4, - "url": "http://mozoo.com/", - "companyId": "mozoo" - }, - "mrp": { - "name": "MRP", - "categoryId": 4, - "url": "https://www.mrpfd.com/", - "companyId": "mrp" - }, - "mrpdata": { - "name": "MRP", - "categoryId": 6, - "url": "http://mrpdata.com/Account/Login?ReturnUrl=%2F", - "companyId": "fifth_story" - }, - "mrskincash": { - "name": "MrSkinCash", - "categoryId": 3, - "url": "http://mrskincash.com/", - "companyId": "mrskincash.com" - }, - "msn": { - "name": "Microsoft Network", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "muscula": { - "name": "Muscula", - "categoryId": 4, - "url": "https://www.universe-surf.de/", - "companyId": "universe_surf" - }, - "mux_inc": { - "name": "Mux", - "categoryId": 0, - "url": "https://mux.com/", - "companyId": "mux_inc" - }, - "mybloglog": { - "name": "MyBlogLog", - "categoryId": 7, - "url": "http://www.mybloglog.com/", - "companyId": "verizon" - }, - "mybuys": { - "name": "MyBuys", - "categoryId": 4, - "url": "http://www.mybuys.com/", - "companyId": "magnetic" - }, - "mycdn.me": { - "name": "Mail.Ru CDN", - "categoryId": 9, - "url": "https://corp.megafon.com/", - "companyId": "megafon" - }, - "mycliplister.com": { - "name": "Cliplister", - "categoryId": 2, - "url": "https://www.cliplister.com/", - "companyId": null - }, - "mycounter.ua": { - "name": "MyCounter.ua", - "categoryId": 6, - "url": "http://mycounter.ua", - "companyId": "mycounter.ua" - }, - "myfonts": { - "name": "MyFonts", - "categoryId": 6, - "url": "http://www.myfonts.com/", - "companyId": "myfonts" - }, - "myfonts_counter": { - "name": "MyFonts", - "categoryId": 6, - "url": "http://www.myfonts.com/", - "companyId": "myfonts" - }, - "mypagerank": { - "name": "MyPagerank", - "categoryId": 6, - "url": "http://www.mypagerank.net/", - "companyId": "mypagerank" - }, - "mystat": { - "name": "MyStat", - "categoryId": 7, - "url": "http://mystat.hu/", - "companyId": "myst_statistics" - }, - "mythings": { - "name": "myThings", - "categoryId": 4, - "url": "http://www.mythings.com/", - "companyId": "mythings" - }, - "mytop_counter": { - "name": "Mytop Counter", - "categoryId": 7, - "url": "http://mytop-in.net/", - "companyId": "mytop-in" - }, - "nakanohito.jp": { - "name": "Nakanohito", - "categoryId": 4, - "url": "http://nakanohito.jp/", - "companyId": "userinsight" - }, - "namogoo": { - "name": "Namoogoo", - "categoryId": 4, - "url": "https://www.namogoo.com/", - "companyId": null - }, - "nanigans": { - "name": "Nanigans", - "categoryId": 4, - "url": "http://www.nanigans.com/", - "companyId": "nanigans" - }, - "nano_interactive": { - "name": "Nano Interactive", - "categoryId": 4, - "url": "http://www.nanointeractive.com/home/de", - "companyId": "nano_interactive" - }, - "nanorep": { - "name": "nanoRep", - "categoryId": 2, - "url": "http://www.nanorep.com/", - "companyId": "logmein" - }, - "narando": { - "name": "Narando", - "categoryId": 0, - "url": "https://narando.com/", - "companyId": "narando" - }, - "narrativ": { - "name": "Narrativ", - "categoryId": 4, - "url": "https://narrativ.com/", - "companyId": "narrativ" - }, - "narrative_io": { - "name": "Narrative", - "categoryId": 6, - "url": "http://www.narrative.io/", - "companyId": "narrative.io" - }, - "natimatica": { - "name": "Natimatica", - "categoryId": 4, - "url": "http://natimatica.com/", - "companyId": "natimatica" - }, - "nativeads.com": { - "name": "native ads", - "categoryId": 4, - "url": "https://nativeads.com/", - "companyId": null - }, - "nativeroll": { - "name": "Nativeroll", - "categoryId": 0, - "url": "http://nativeroll.tv/", - "companyId": "native_roll" - }, - "nativo": { - "name": "Nativo", - "categoryId": 4, - "url": "http://www.nativo.net/", - "companyId": "nativo" - }, - "navegg_dmp": { - "name": "Navegg", - "categoryId": 6, - "url": "https://www.navegg.com/en/", - "companyId": "navegg" - }, - "naver.com": { - "name": "Naver", - "categoryId": 4, - "url": "https://www.naver.com/", - "companyId": "naver" - }, - "naver_search": { - "name": "Naver Search", - "categoryId": 2, - "url": "http://www.naver.com/", - "companyId": "naver" - }, - "nbc_news": { - "name": "NBC News", - "categoryId": 8, - "url": "https://www.nbcnews.com/", - "companyId": null - }, - "ncol": { - "name": "NCOL", - "categoryId": 4, - "url": "http://www.ncol.com/", - "companyId": "ncol" - }, - "needle": { - "name": "Needle", - "categoryId": 2, - "url": "http://www.needle.com", - "companyId": "needle" - }, - "nekudo.com": { - "name": "Nekudo", - "categoryId": 2, - "url": "https://nekudo.com/", - "companyId": "nekudo" - }, - "neodata": { - "name": "Neodata", - "categoryId": 4, - "url": "http://neodatagroup.com/", - "companyId": "neodata" - }, - "neory": { - "name": "NEORY ", - "categoryId": 4, - "url": "https://www.neory.com/", - "companyId": "neory" - }, - "nerfherdersolo_com": { - "name": "nerfherdersolo.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "net-metrix": { - "name": "NET-Metrix", - "categoryId": 6, - "url": "http://www.net-metrix.ch/", - "companyId": "net-metrix" - }, - "net-results": { - "name": "Net-Results", - "categoryId": 4, - "url": "http://www.net-results.com/", - "companyId": "net-results" - }, - "net_avenir": { - "name": "Net Avenir", - "categoryId": 4, - "url": "http://www.netavenir.com/", - "companyId": "net_avenir" - }, - "net_communities": { - "name": "Net Communities", - "categoryId": 4, - "url": "http://www.netcommunities.com/", - "companyId": "net_communities" - }, - "net_visibility": { - "name": "NET Visibility", - "categoryId": 4, - "url": "http://www.netvisibility.co.uk", - "companyId": "net_visibility" - }, - "netbiscuits": { - "name": "Netbiscuits", - "categoryId": 6, - "url": "http://www.netbiscuits.net/", - "companyId": "netbiscuits" - }, - "netbooster_group": { - "name": "NetBooster Group", - "categoryId": 4, - "url": "http://www.netbooster.com/", - "companyId": "netbooster_group" - }, - "netflix": { - "name": "Netflix", - "categoryId": 8, - "url": null, - "companyId": null - }, - "netletix": { - "name": "Netletix", - "categoryId": 4, - "url": "http://www.netletix.com//", - "companyId": "ip_de" - }, - "netminers": { - "name": "Netminers", - "categoryId": 6, - "url": "http://netminers.dk/", - "companyId": "netminers" - }, - "netmining": { - "name": "Netmining", - "categoryId": 4, - "url": "http://www.netmining.com/", - "companyId": "zeta" - }, - "netmonitor": { - "name": "NetMonitor", - "categoryId": 6, - "url": "http://www.netmanager.net/en/", - "companyId": "netmonitor" - }, - "netratings_sitecensus": { - "name": "NetRatings SiteCensus", - "categoryId": 4, - "url": "http://www.nielsen-online.com/intlpage.html", - "companyId": "nielsen" - }, - "netrk.net": { - "name": "nfxTrack", - "categoryId": 6, - "url": "https://netrk.net/", - "companyId": "netzeffekt" - }, - "netseer": { - "name": "NetSeer", - "categoryId": 4, - "url": "http://www.netseer.com/", - "companyId": "netseer" - }, - "netshelter": { - "name": "NetShelter", - "categoryId": 4, - "url": "http://www.netshelter.net/", - "companyId": "netshelter" - }, - "netsprint_audience": { - "name": "Netsprint Audience", - "categoryId": 6, - "url": "http://audience.netsprint.eu/", - "companyId": "netsprint" - }, - "networkedblogs": { - "name": "NetworkedBlogs", - "categoryId": 7, - "url": "http://w.networkedblogs.com/", - "companyId": "networkedblogs" - }, - "neustar_adadvisor": { - "name": "Neustar AdAdvisor", - "categoryId": 4, - "url": "http://www.targusinfo.com/", - "companyId": "neustar" - }, - "new_relic": { - "name": "New Relic", - "categoryId": 6, - "url": "http://newrelic.com/", - "companyId": "new_relic" - }, - "newscgp.com": { - "name": "News Connect", - "categoryId": 4, - "url": "https://newscorp.com/", - "companyId": "news_corp" - }, - "newsmax": { - "name": "Newsmax", - "categoryId": 4, - "url": "http://www.newsmax.com/", - "companyId": "newsmax" - }, - "newstogram": { - "name": "Newstogram", - "categoryId": 4, - "url": "http://www.newstogram.com/", - "companyId": "dailyme" - }, - "newsupdatedir.info": { - "name": "newsupdatedir.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "newsupdatewe.info": { - "name": "newsupdatewe.info", - "categoryId": 12, - "url": null, - "companyId": null - }, - "newtention": { - "name": "Newtention", - "categoryId": 4, - "url": "http://www.newtention.de/", - "companyId": "next_audience" - }, - "nexage": { - "name": "Nexage", - "categoryId": 4, - "url": "http://www.nexage.com/", - "companyId": "verizon" - }, - "nexeps.com": { - "name": "neXeps", - "categoryId": 4, - "url": "http://nexeps.com/", - "companyId": null - }, - "next_performance": { - "name": "Next Performance", - "categoryId": 4, - "url": "http://www.nextperformance.com/", - "companyId": "nextperf" - }, - "next_user": { - "name": "Next User", - "categoryId": 4, - "url": "https://www.nextuser.com/", - "companyId": "next_user" - }, - "nextag_roi_optimizer": { - "name": "Nextag ROI Optimizer", - "categoryId": 4, - "url": "http://www.nextag.com/", - "companyId": "nextag" - }, - "nextclick": { - "name": "Nextclick", - "categoryId": 4, - "url": "http://nextclick.pl/", - "companyId": "leadbullet" - }, - "nextstat": { - "name": "NextSTAT", - "categoryId": 6, - "url": "http://www.nextstat.com/", - "companyId": "nextstat" - }, - "neytiv": { - "name": "Neytiv", - "categoryId": 6, - "url": "http://neytiv.com/", - "companyId": "neytiv" - }, - "ngage_inc.": { - "name": "NGage INC.", - "categoryId": 6, - "url": "https://www.nginx.com/", - "companyId": "nginx" - }, - "nice264.com": { - "name": "Nice264", - "categoryId": 0, - "url": "http://nice264.com/", - "companyId": null - }, - "nimblecommerce": { - "name": "NimbleCommerce", - "categoryId": 4, - "url": "http://www.nimblecommerce.com/", - "companyId": "nimblecommerce" - }, - "ninja_access_analysis": { - "name": "Ninja Access Analysis", - "categoryId": 6, - "url": "http://www.ninja.co.jp/analysis/", - "companyId": "samurai_factory" - }, - "nirror": { - "name": "Nirror", - "categoryId": 6, - "url": "https://www.nirror.com/", - "companyId": "nirror" - }, - "nitropay": { - "name": "NitroPay", - "categoryId": 4, - "url": "https://nitropay.com/", - "companyId": "gg_software" - }, - "nk.pl_widgets": { - "name": "NK.pl Widgets", - "categoryId": 4, - "url": "http://nk.pl", - "companyId": "nk.pl" - }, - "noaa.gov": { - "name": "National Oceanic and Atmospheric Administration", - "categoryId": 8, - "url": "https://noaa.gov/", - "companyId": null - }, - "noddus": { - "name": "Noddus", - "categoryId": 4, - "url": "https://www.enterprise.noddus.com/", - "companyId": "noddus" - }, - "nolix": { - "name": "Nolix", - "categoryId": 4, - "url": "http://nolix.ru/", - "companyId": "nolix" - }, - "nonstop_consulting": { - "name": "Resolution Media", - "categoryId": 4, - "url": "https://resolutionmedia.com/", - "companyId": "resolution_media" - }, - "noop.style": { - "name": "noop.style", - "categoryId": 11, - "url": null, - "companyId": null - }, - "nosto.com": { - "name": "nosto", - "categoryId": 6, - "url": "http://www.nosto.com/", - "companyId": null - }, - "notify": { - "name": "Notify", - "categoryId": 4, - "url": "http://notify.ag/en/", - "companyId": null - }, - "notifyfox": { - "name": "Notifyfox", - "categoryId": 6, - "url": "https://notifyfox.com/", - "companyId": "notifyfox" - }, - "now_interact": { - "name": "Now Interact", - "categoryId": 6, - "url": "http://nowinteract.com/", - "companyId": "now_interact" - }, - "npario": { - "name": "nPario", - "categoryId": 6, - "url": "http://npario.com/", - "companyId": "npario" - }, - "nplexmedia": { - "name": "nPlexMedia", - "categoryId": 4, - "url": "http://www.nplexmedia.com/", - "companyId": "nplexmedia" - }, - "nrelate": { - "name": "nRelate", - "categoryId": 2, - "url": "http://nrelate.com/", - "companyId": "iac_apps" - }, - "ns8": { - "name": "NS8", - "categoryId": 4, - "url": "https://www.ns8.com/", - "companyId": null - }, - "nt.vc": { - "name": "Next Tuesday GmbH", - "categoryId": 8, - "url": "http://www.nexttuesday.de/", - "companyId": null - }, - "ntent": { - "name": "NTENT", - "categoryId": 4, - "url": "http://www.verticalsearchworks.com", - "companyId": "ntent" - }, - "nttcom_online_marketing_solutions": { - "name": "NTTCom Online Marketing Solutions", - "categoryId": 6, - "url": "http://www.digitalforest.co.jp/", - "companyId": "nttcom_online_marketing_solutions" - }, - "nuffnang": { - "name": "Nuffnang", - "categoryId": 4, - "url": "http://nuffnang.com/", - "companyId": "nuffnang" - }, - "nugg.ad": { - "name": "Nugg.Ad", - "categoryId": 4, - "url": "http://www.nugg.ad/", - "companyId": "nugg.ad" - }, - "nui_media": { - "name": "NUI Media", - "categoryId": 4, - "url": "http://adjuggler.com/", - "companyId": "nui_media" - }, - "numbers.md": { - "name": "Numbers.md", - "categoryId": 6, - "url": "https://numbers.md/", - "companyId": "numbers.md" - }, - "numerator": { - "name": "Numerator", - "categoryId": 5, - "url": "http://www.channeliq.com/", - "companyId": "numerator" - }, - "ny_times_tagx": { - "name": "NY Times TagX", - "categoryId": 6, - "url": "https://www.nytimes.com/", - "companyId": "the_new_york_times" - }, - "nyacampwk.com": { - "name": "nyacampwk.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "nyetm2mkch.com": { - "name": "nyetm2mkch.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "nyt.com": { - "name": "The New York Times", - "categoryId": 8, - "url": "https://www.nytimes.com/", - "companyId": "the_new_york_times" - }, - "o12zs3u2n.com": { - "name": "o12zs3u2n.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "o2.pl": { - "name": "o2.pl", - "categoryId": 8, - "url": "https://www.o2.pl/", - "companyId": "o2.pl" - }, - "o2online.de": { - "name": "o2online.de", - "categoryId": 8, - "url": "https://www.o2online.de/", - "companyId": null - }, - "oath_inc": { - "name": "Oath", - "categoryId": 8, - "url": "https://www.oath.com/", - "companyId": "verizon" - }, - "observer": { - "name": "Observer", - "categoryId": 4, - "url": "http://www.observerapp.com", - "companyId": "observer" - }, - "ocioso": { - "name": "Ocioso", - "categoryId": 7, - "url": "http://ocioso.com.br/", - "companyId": "ocioso" - }, - "oclasrv.com": { - "name": "oclasrv.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "octapi.net": { - "name": "octapi.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "octavius": { - "name": "Octavius", - "categoryId": 4, - "url": "http://octavius.rocks/", - "companyId": "octavius" - }, - "office.com": { - "name": "office.com", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "office.net": { - "name": "office.net", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "office365.com": { - "name": "office365.com", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "oghub.io": { - "name": "OG Hub", - "categoryId": 11, - "url": null, - "companyId": null - }, - "oh_my_stats": { - "name": "Oh My Stats", - "categoryId": 6, - "url": "https://ohmystats.com/", - "companyId": "oh_my_stats" - }, - "ohana_advertising_network": { - "name": "Ohana Advertising Network", - "categoryId": 4, - "url": "http://adohana.com/", - "companyId": "ohana_advertising_network" - }, - "olapic": { - "name": "Olapic", - "categoryId": 4, - "url": "https://www.olapic.com/", - "companyId": "olapic" - }, - "olark": { - "name": "Olark", - "categoryId": 2, - "url": "http://www.olark.com/", - "companyId": "olark" - }, - "olx-st.com": { - "name": "OLX", - "categoryId": 8, - "url": "http://www.olx.com/", - "companyId": null - }, - "omarsys.com": { - "name": "Omarsys", - "categoryId": 4, - "url": "http://omarsys.com/", - "companyId": "xcaliber" - }, - "ometria": { - "name": "Ometria", - "categoryId": 4, - "url": "http://www.ometria.com/", - "companyId": "ometria" - }, - "omg": { - "name": "OMG", - "categoryId": 7, - "url": "http://uk.omgpm.com/", - "companyId": "optimise_media" - }, - "omniconvert.com": { - "name": "Omniconvert", - "categoryId": 4, - "url": "https://www.omniconvert.com/", - "companyId": "omniconvert" - }, - "omniscienta": { - "name": "Omniscienta", - "categoryId": 4, - "url": "http://www.omniscienta.com/", - "companyId": null - }, - "oms": { - "name": "OMS", - "categoryId": 4, - "url": "http://oms.eu/", - "companyId": null - }, - "onaudience": { - "name": "OnAudience", - "categoryId": 4, - "url": "http://www.onaudience.com/", - "companyId": "cloud_technologies" - }, - "oneall": { - "name": "Oneall", - "categoryId": 7, - "url": "http://www.oneall.com/", - "companyId": "oneall" - }, - "onefeed": { - "name": "Onefeed", - "categoryId": 6, - "url": "http://www.onefeed.co.uk", - "companyId": "onefeed" - }, - "onesignal": { - "name": "OneSignal", - "categoryId": 5, - "url": "https://onesignal.com/", - "companyId": "onesignal" - }, - "onestat": { - "name": "OneStat", - "categoryId": 6, - "url": "http://www.onestat.com/", - "companyId": "onestat_international_b.v." - }, - "onet.pl": { - "name": "onet", - "categoryId": 8, - "url": "https://www.onet.pl/", - "companyId": null - }, - "onetag": { - "name": "OneTag", - "categoryId": 4, - "url": "https://www.onetag.com/", - "companyId": "onetag" - }, - "onetrust": { - "name": "OneTrust", - "categoryId": 5, - "url": "https://www.onetrust.com/", - "companyId": "onetrust" - }, - "onfocus.io": { - "name": "OnFocus", - "categoryId": 4, - "url": "http://onfocus.io/", - "companyId": "onfocus" - }, - "onlinewebstat": { - "name": "Onlinewebstat", - "categoryId": 6, - "url": "http://www.onlinewebstats.com/index.php?lang=en", - "companyId": "onlinewebstat" - }, - "onswipe": { - "name": "Onswipe", - "categoryId": 4, - "url": "http://www.onswipe.com/", - "companyId": "onswipe" - }, - "onthe.io": { - "name": "OnThe.io", - "categoryId": 6, - "url": "https://t.onthe.io/media", - "companyId": "onthe.io" - }, - "ontraport_autopilot": { - "name": "Ontraport Autopilot", - "categoryId": 4, - "url": "http://www.moon-ray.com/", - "companyId": "ontraport" - }, - "ooyala.com": { - "name": "Ooyala Player", - "categoryId": 0, - "url": "https://www.ooyala.com/", - "companyId": "telstra" - }, - "ooyala_analytics": { - "name": "Ooyala Analytics", - "categoryId": 6, - "url": "https://www.telstraglobal.com/", - "companyId": "telstra" - }, - "open_adexchange": { - "name": "Open AdExchange", - "categoryId": 4, - "url": "http://openadex.dk/", - "companyId": "open_adexchange" - }, - "open_adstream": { - "name": "Open Adstream", - "categoryId": 4, - "url": "https://www.appnexus.com/en", - "companyId": "appnexus" - }, - "open_share_count": { - "name": "Open Share Count", - "categoryId": 4, - "url": "http://opensharecount.com/", - "companyId": "open_share_count" - }, - "openload": { - "name": "Openload", - "categoryId": 9, - "url": "https://openload.co/", - "companyId": null - }, - "openstat": { - "name": "OpenStat", - "categoryId": 6, - "url": "https://www.openstat.ru/", - "companyId": "openstat" - }, - "opentracker": { - "name": "Opentracker", - "categoryId": 6, - "url": "http://www.opentracker.net/", - "companyId": "opentracker" - }, - "openwebanalytics": { - "name": "Open Web Analytics", - "categoryId": 6, - "url": "http://www.openwebanalytics.com/", - "companyId": "open_web_analytics" - }, - "openx": { - "name": "OpenX", - "categoryId": 4, - "url": "https://www.openx.com", - "companyId": "openx" - }, - "operative_media": { - "name": "Operative Media", - "categoryId": 4, - "url": "http://www.operative.com/", - "companyId": "operative_media" - }, - "opinary": { - "name": "Opinary", - "categoryId": 2, - "url": "http://opinary.com/", - "companyId": "opinary" - }, - "opinionbar": { - "name": "OpinionBar", - "categoryId": 2, - "url": "http://www.metrixlab.com", - "companyId": "metrixlab" - }, - "oplytic": { - "name": "Oplytic", - "categoryId": 6, - "url": "http://www.oplytic.com", - "companyId": "oplytic" - }, - "opta.net": { - "name": "Opta", - "categoryId": 6, - "url": "http://www.optasports.de/", - "companyId": "opta_sports" - }, - "optaim": { - "name": "OptAim", - "categoryId": 4, - "url": "http://optaim.com/", - "companyId": "optaim" - }, - "optanaon": { - "name": "Optanaon by OneTrust", - "categoryId": 5, - "url": "https://www.cookielaw.org/", - "companyId": "onetrust" - }, - "optify": { - "name": "Optify", - "categoryId": 4, - "url": "http://www.optify.net", - "companyId": "optify" - }, - "optimatic": { - "name": "Optimatic", - "categoryId": 0, - "url": "http://www.optimatic.com/", - "companyId": "optimatic" - }, - "optimax_media_delivery": { - "name": "Optimax Media Delivery", - "categoryId": 4, - "url": "http://optmd.com/", - "companyId": "optimax_media_delivery" - }, - "optimicdn.com": { - "name": "OptimiCDN", - "categoryId": 9, - "url": "https://en.optimicdn.com/", - "companyId": null - }, - "optimizely": { - "name": "Optimizely", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimizely_error_log": { - "name": "Optimizely Error Log", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimizely_geo_targeting": { - "name": "Optimizely Geographical Targeting", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimizely_logging": { - "name": "Optimizely Logging", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimonk": { - "name": "Optimonk", - "categoryId": 6, - "url": "https://www.optimonk.com/", - "companyId": "optimonk" - }, - "optinmonster": { - "name": "OptInMonster", - "categoryId": 2, - "url": "https://optinmonster.com/", - "companyId": "optinmonster" - }, - "optinproject.com": { - "name": "OptinProject", - "categoryId": 4, - "url": "https://www.optincollect.com/en", - "companyId": "optincollect" - }, - "optomaton": { - "name": "Optomaton", - "categoryId": 4, - "url": "http://www.optomaton.com/", - "companyId": "ve" - }, - "ora.tv": { - "name": "Ora.TV", - "categoryId": 4, - "url": "http://www.ora.tv/", - "companyId": "ora.tv" - }, - "oracle_live_help": { - "name": "Oracle Live Help", - "categoryId": 2, - "url": "http://www.oracle.com/us/products/applications/atg/live-help-on-demand/index.html", - "companyId": "oracle" - }, - "oracle_rightnow": { - "name": "Oracle RightNow", - "categoryId": 8, - "url": "http://www.oracle.com/", - "companyId": "oracle" - }, - "orange": { - "name": "Orange", - "categoryId": 4, - "url": "http://www.orange.co.uk/", - "companyId": "orange_mobile" - }, - "orange142": { - "name": "Orange142", - "categoryId": 4, - "url": "http://www.orange142.com/", - "companyId": "orange142" - }, - "orange_france": { - "name": "Orange France", - "categoryId": 8, - "url": "https://www.orange.fr/", - "companyId": "orange_france" - }, - "orangesoda": { - "name": "OrangeSoda", - "categoryId": 4, - "url": "http://www.orangesoda.com/", - "companyId": "orangesoda" - }, - "orc_international": { - "name": "ORC International", - "categoryId": 4, - "url": "https://orcinternational.com/", - "companyId": "engine_group" - }, - "order_groove": { - "name": "Order Groove", - "categoryId": 4, - "url": "http://ordergroove.com/", - "companyId": "order_groove" - }, - "orel_site": { - "name": "Orel Site", - "categoryId": 2, - "url": "https://www.orelsite.ru/", - "companyId": "orel_site" - }, - "otclick": { - "name": "otClick", - "categoryId": 4, - "url": "http://otclick-adv.ru/", - "companyId": "otclick" - }, - "othersearch.info": { - "name": "FlowSurf", - "categoryId": 8, - "url": null, - "companyId": null - }, - "otm-r.com": { - "name": "OTM", - "categoryId": 4, - "url": "http://otm-r.com/", - "companyId": null - }, - "otto.de": { - "name": "Otto Group", - "categoryId": 8, - "url": null, - "companyId": null - }, - "outbrain": { - "name": "Outbrain", - "categoryId": 4, - "url": "https://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_amplify": { - "name": "Outbrain Amplify", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_analytics": { - "name": "Outbrain Analytics", - "categoryId": 6, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_logger": { - "name": "Outbrain Logger", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_pixel": { - "name": "Outbrain Pixel", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_utilities": { - "name": "Outbrain Utilities", - "categoryId": 6, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_widgets": { - "name": "Outbrain Widgets", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "overheat.it": { - "name": "overheat", - "categoryId": 6, - "url": "https://overheat.io/", - "companyId": null - }, - "owa": { - "name": "OWA", - "categoryId": 6, - "url": "http://oewa.at/", - "companyId": "the_austrian_web_analysis" - }, - "owneriq": { - "name": "OwnerIQ", - "categoryId": 4, - "url": "http://www.owneriq.com/", - "companyId": "owneriq" - }, - "ownpage": { - "name": "Ownpage", - "categoryId": 2, - "url": "http://www.ownpage.fr/index.en.html", - "companyId": null - }, - "owox.com": { - "name": "OWOX", - "categoryId": 6, - "url": "https://www.owox.com/", - "companyId": "owox_inc" - }, - "oxamedia": { - "name": "OxaMedia", - "categoryId": 2, - "url": "http://www.oxamedia.com/", - "companyId": "oxamedia" - }, - "oxomi.com": { - "name": "Oxomi", - "categoryId": 4, - "url": "https://oxomi.com/", - "companyId": null - }, - "pageanalytics.space": { - "name": "pageanalytics.space", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pagefair": { - "name": "PageFair", - "categoryId": 2, - "url": "https://pagefair.com/", - "companyId": "blockthrough" - }, - "pagescience": { - "name": "PageScience", - "categoryId": 4, - "url": "http://www.precisionhealthmedia.com/index.html", - "companyId": "pagescience" - }, - "paid-to-promote": { - "name": "Paid-To-Promote", - "categoryId": 4, - "url": "http://www.paid-to-promote.net/", - "companyId": "paid-to-promote" - }, - "paperg": { - "name": "PaperG", - "categoryId": 4, - "url": "http://www.paperg.com/", - "companyId": "paperg" - }, - "pardot": { - "name": "Pardot", - "categoryId": 6, - "url": "http://www.pardot.com/", - "companyId": "pardot" - }, - "parsely": { - "name": "Parse.ly", - "categoryId": 6, - "url": "https://www.parse.ly/", - "companyId": "parse.ly" - }, - "partner-ads": { - "name": "Partner-Ads", - "categoryId": 4, - "url": "http://www.partner-ads.com/", - "companyId": "partner-ads" - }, - "passionfruit": { - "name": "Passionfruit", - "categoryId": 4, - "url": "http://passionfruitads.com/", - "companyId": "passionfruit" - }, - "pathful": { - "name": "Pathful", - "categoryId": 6, - "url": "http://www.pathful.com/", - "companyId": "pathful" - }, - "pay-hit": { - "name": "Pay-Hit", - "categoryId": 4, - "url": "http://pay-hit.com/", - "companyId": "pay-hit" - }, - "payclick": { - "name": "PayClick", - "categoryId": 4, - "url": "http://payclick.it/", - "companyId": "payclick" - }, - "paykickstart": { - "name": "PayKickstart", - "categoryId": 6, - "url": "https://paykickstart.com/", - "companyId": "paykickstart" - }, - "paypal": { - "name": "PayPal", - "categoryId": 2, - "url": "https://www.paypal.com", - "companyId": "ebay" - }, - "pcvark.com": { - "name": "pcvark.com", - "categoryId": 11, - "url": "https://pcvark.com/", - "companyId": null - }, - "peer39": { - "name": "Peer39", - "categoryId": 4, - "url": "http://www.peer39.com/", - "companyId": "peer39" - }, - "peer5.com": { - "name": "Peer5", - "categoryId": 9, - "url": "https://www.peer5.com/", - "companyId": "peer5" - }, - "peerius": { - "name": "Peerius", - "categoryId": 2, - "url": "http://www.peerius.com/", - "companyId": "peerius" - }, - "pendo.io": { - "name": "pendo", - "categoryId": 6, - "url": "https://www.pendo.io/", - "companyId": null - }, - "pepper.com": { - "name": "Pepper", - "categoryId": 4, - "url": "https://www.pepper.com/", - "companyId": "6minutes" - }, - "pepperjam": { - "name": "Pepperjam", - "categoryId": 4, - "url": "http://www.pepperjam.com", - "companyId": "pepperjam" - }, - "pepsia": { - "name": "Pepsia", - "categoryId": 6, - "url": "http://pepsia.com/en/", - "companyId": "pepsia" - }, - "perfdrive.com": { - "name": "perfdrive.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "perfect_audience": { - "name": "Perfect Audience", - "categoryId": 4, - "url": "https://www.perfectaudience.com/", - "companyId": "perfect_audience" - }, - "perfect_market": { - "name": "Perfect Market", - "categoryId": 4, - "url": "http://perfectmarket.com/", - "companyId": "perfect_market" - }, - "perform_group": { - "name": "Perform Group", - "categoryId": 5, - "url": "http://www.performgroup.co.uk/", - "companyId": "perform_group" - }, - "performable": { - "name": "Performable", - "categoryId": 6, - "url": "http://www.performable.com/", - "companyId": "hubspot" - }, - "performancing_metrics": { - "name": "Performancing Metrics", - "categoryId": 6, - "url": "http://pmetrics.performancing.com", - "companyId": "performancing" - }, - "performax": { - "name": "Performax", - "categoryId": 4, - "url": "https://www.performax.cz/", - "companyId": "performax" - }, - "perimeterx.net": { - "name": "Perimeterx", - "categoryId": 6, - "url": "https://www.perimeterx.com/", - "companyId": null - }, - "permutive": { - "name": "Permutive", - "categoryId": 4, - "url": "http://permutive.com/", - "companyId": "permutive" - }, - "persgroep": { - "name": "De Persgroep", - "categoryId": 4, - "url": "https://www.persgroep.be/", - "companyId": "de_persgroep" - }, - "persianstat": { - "name": "PersianStat", - "categoryId": 6, - "url": "http://www.persianstat.com", - "companyId": "persianstat" - }, - "persio": { - "name": "Persio", - "categoryId": 4, - "url": "http://www.pers.io/", - "companyId": "pers.io" - }, - "personyze": { - "name": "Personyze", - "categoryId": 2, - "url": "http://personyze.com/", - "companyId": "personyze" - }, - "petametrics": { - "name": "LiftIgniter", - "categoryId": 2, - "url": "https://www.liftigniter.com/", - "companyId": "liftigniter" - }, - "pheedo": { - "name": "Pheedo", - "categoryId": 4, - "url": "http://pheedo.com/", - "companyId": "pheedo" - }, - "phonalytics": { - "name": "Phonalytics", - "categoryId": 2, - "url": "http://www.phonalytics.com/", - "companyId": "phonalytics" - }, - "phunware": { - "name": "Phunware", - "categoryId": 4, - "url": "https://www.phunware.com", - "companyId": "phunware" - }, - "piguiqproxy.com": { - "name": "piguiqproxy.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pilot": { - "name": "Pilot", - "categoryId": 6, - "url": "http://www.pilot.de/en/home.html", - "companyId": "pilot_gmbh" - }, - "pingdom": { - "name": "Pingdom", - "categoryId": 6, - "url": "https://www.pingdom.com/", - "companyId": "pingdom" - }, - "pinterest": { - "name": "Pinterest", - "categoryId": 7, - "url": "http://pinterest.com/", - "companyId": "pinterest" - }, - "pinterest_conversion_tracker": { - "name": "Pinterest Conversion Tracker", - "categoryId": 6, - "url": "http://pinterest.com/", - "companyId": "pinterest" - }, - "pipz": { - "name": "Pipz", - "categoryId": 4, - "url": "https://pipz.com/br/", - "companyId": "pipz_automation" - }, - "piwik": { - "name": "Tombstone (Matomo/Piwik before the split)", - "categoryId": 6, - "url": "http://piwik.org/", - "companyId": "matomo" - }, - "piwik_pro_analytics_suite": { - "name": "Piwik PRO Analytics Suite", - "categoryId": 6, - "url": "https://piwik.pro/", - "companyId": "piwik_pro" - }, - "pixalate": { - "name": "Pixalate", - "categoryId": 4, - "url": "http://www.pixalate.com/", - "companyId": "pixalate" - }, - "pixel_union": { - "name": "Pixel Union", - "categoryId": 4, - "url": "https://www.pixelunion.net/", - "companyId": "pixel_union" - }, - "pixfuture": { - "name": "PixFuture", - "categoryId": 4, - "url": "http://www.pixfuture.com", - "companyId": "pixfuture" - }, - "piximedia": { - "name": "Piximedia", - "categoryId": 4, - "url": "http://www.piximedia.com/piximedia?en", - "companyId": "piximedia" - }, - "pizzaandads_com": { - "name": "pizzaandads.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "placester": { - "name": "Placester", - "categoryId": 4, - "url": "https://placester.com/", - "companyId": "placester" - }, - "pladform.ru": { - "name": "Pladform", - "categoryId": 4, - "url": "https://distribution.pladform.ru/", - "companyId": "pladform" - }, - "plan.net_experience_cloud": { - "name": "Plan.net Experience Cloud", - "categoryId": 6, - "url": "https://www.serviceplan.com/", - "companyId": "serviceplan" - }, - "platform360": { - "name": "Platform360", - "categoryId": 4, - "url": "http://www.platform360.co/#home", - "companyId": null - }, - "platformone": { - "name": "Platform One", - "categoryId": 4, - "url": "https://www.platform-one.co.jp/", - "companyId": "daconsortium" - }, - "play_by_mamba": { - "name": "Play by Mamba", - "categoryId": 4, - "url": "http://play.mamba.ru/", - "companyId": "mamba" - }, - "playbuzz.com": { - "name": "Playbuzz", - "categoryId": 2, - "url": "https://www.playbuzz.com/", - "companyId": "playbuzz" - }, - "plenty_of_fish": { - "name": "Plenty Of Fish", - "categoryId": 6, - "url": "http://www.pof.com/", - "companyId": "plentyoffish" - }, - "plex_metrics": { - "name": "Plex Metrics", - "categoryId": 6, - "url": "https://www.plex.tv/", - "companyId": "plex" - }, - "plista": { - "name": "Plista", - "categoryId": 4, - "url": "http://www.plista.com", - "companyId": "plista" - }, - "plugrush": { - "name": "PlugRush", - "categoryId": 4, - "url": "http://www.plugrush.com/", - "companyId": "plugrush" - }, - "pluso.ru": { - "name": "Pluso", - "categoryId": 7, - "url": "https://share.pluso.ru/", - "companyId": "pluso" - }, - "plutusads": { - "name": "Plutusads", - "categoryId": 4, - "url": "http://plutusads.com", - "companyId": "plutusads" - }, - "pmddby.com": { - "name": "pmddby.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "pnamic.com": { - "name": "pnamic.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "po.st": { - "name": "Po.st", - "categoryId": 7, - "url": "https://www.po.st/", - "companyId": "rythmone" - }, - "pocket": { - "name": "Pocket", - "categoryId": 6, - "url": "http://getpocket.com/", - "companyId": "pocket" - }, - "pocketcents": { - "name": "PocketCents", - "categoryId": 4, - "url": "http://pocketcents.com/", - "companyId": "pocketcents" - }, - "pointific": { - "name": "Pointific", - "categoryId": 6, - "url": "http://www.pontiflex.com/", - "companyId": "pontiflex" - }, - "pointroll": { - "name": "PointRoll", - "categoryId": 4, - "url": "http://www.pointroll.com/", - "companyId": "gannett_digital_media_network" - }, - "poirreleast.club": { - "name": "poirreleast.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "polar.me": { - "name": "Polar", - "categoryId": 4, - "url": "https://polar.me/", - "companyId": "polar_inc" - }, - "polldaddy": { - "name": "Polldaddy", - "categoryId": 2, - "url": "http://polldaddy.com/", - "companyId": "automattic" - }, - "polyad": { - "name": "PolyAd", - "categoryId": 4, - "url": "http://polyad.net", - "companyId": "polyad" - }, - "polyfill.io": { - "name": "Polyfill", - "categoryId": 8, - "url": "https://polyfill.io/", - "companyId": "polyfill.io" - }, - "popads": { - "name": "PopAds", - "categoryId": 4, - "url": "https://www.popads.net/", - "companyId": "popads" - }, - "popcash": { - "name": "Popcash", - "categoryId": 4, - "url": "http://popcash.net/", - "companyId": "popcash_network" - }, - "popcorn_metrics": { - "name": "Popcorn Metrics", - "categoryId": 6, - "url": "https://www.popcornmetrics.com/", - "companyId": "popcorn_metrics" - }, - "popin.cc": { - "name": "popIn", - "categoryId": 7, - "url": "https://www.popin.cc/", - "companyId": "popin" - }, - "popmyads": { - "name": "PopMyAds", - "categoryId": 4, - "url": "http://popmyads.com/", - "companyId": "popmyads" - }, - "poponclick": { - "name": "PopOnClick", - "categoryId": 4, - "url": "http://poponclick.com", - "companyId": "poponclick" - }, - "populis": { - "name": "Populis", - "categoryId": 4, - "url": "http://www.populis.com", - "companyId": "populis" - }, - "pornhub": { - "name": "PornHub", - "categoryId": 3, - "url": "https://www.pornhub.com/", - "companyId": "pornhub" - }, - "pornwave": { - "name": "Pornwave", - "categoryId": 3, - "url": "http://pornwave.com", - "companyId": "pornwave.com" - }, - "porta_brazil": { - "name": "Porta Brazil", - "categoryId": 4, - "url": "http://brasil.gov.br/", - "companyId": "portal_brazil" - }, - "post_affiliate_pro": { - "name": "Post Affiliate Pro", - "categoryId": 4, - "url": "http://www.qualityunit.com/", - "companyId": "qualityunit" - }, - "powerlinks": { - "name": "PowerLinks", - "categoryId": 4, - "url": "http://www.powerlinks.com/", - "companyId": "powerlinks" - }, - "powerreviews": { - "name": "PowerReviews", - "categoryId": 2, - "url": "http://www.powerreviews.com/", - "companyId": "powerreviews" - }, - "powr.io": { - "name": "POWr", - "categoryId": 6, - "url": "https://www.powr.io/", - "companyId": "powr" - }, - "pozvonim": { - "name": "Pozvonim", - "categoryId": 4, - "url": "https://pozvonim.com/", - "companyId": "pozvonim" - }, - "prebid": { - "name": "Prebid", - "categoryId": 4, - "url": "http://prebid.org/", - "companyId": null - }, - "precisionclick": { - "name": "PrecisionClick", - "categoryId": 4, - "url": "http://www.precisionclick.com/", - "companyId": "precisionclick" - }, - "predicta": { - "name": "Predicta", - "categoryId": 4, - "url": "http://predicta.com.br/", - "companyId": "predicta" - }, - "premonix": { - "name": "Premonix", - "categoryId": 4, - "url": "http://www.premonix.com/", - "companyId": "premonix" - }, - "press": { - "name": "Press+", - "categoryId": 4, - "url": "http://www.mypressplus.com/", - "companyId": "press+" - }, - "pressly": { - "name": "Pressly", - "categoryId": 4, - "url": "https://www.pressly.com/", - "companyId": "pressly" - }, - "pricegrabber": { - "name": "PriceGrabber", - "categoryId": 4, - "url": "http://www.pricegrabber.com", - "companyId": "pricegrabber" - }, - "pricespider": { - "name": "Pricespider", - "categoryId": 4, - "url": "http://www.pricespider.com/", - "companyId": "price_spider" - }, - "prismamediadigital.com": { - "name": "Prisma Media Digital", - "categoryId": 4, - "url": "http://www.pmdrecrute.com/", - "companyId": "prisma_media_digital" - }, - "privy.com": { - "name": "Privy", - "categoryId": 2, - "url": "https://privy.com/", - "companyId": "privy" - }, - "proclivity": { - "name": "Proclivity", - "categoryId": 4, - "url": "http://www.proclivitysystems.com/", - "companyId": "proclivity_media" - }, - "prodperfect": { - "name": "ProdPerfect", - "categoryId": 6, - "url": "https://prodperfect.com/", - "companyId": "prodperfect" - }, - "productsup": { - "name": "ProductsUp", - "categoryId": 4, - "url": "https://productsup.io/", - "companyId": "productsup" - }, - "profiliad": { - "name": "Profiliad", - "categoryId": 6, - "url": "http://profiliad.com/", - "companyId": "profiliad" - }, - "profitshare": { - "name": "Profitshare", - "categoryId": 6, - "url": "https://profitshare.ro/", - "companyId": "profitshare" - }, - "proformics": { - "name": "Proformics", - "categoryId": 6, - "url": "http://proformics.com/", - "companyId": "proformics_digital" - }, - "programattik": { - "name": "Programattik", - "categoryId": 4, - "url": "http://www.programattik.com/", - "companyId": "ttnet" - }, - "project_wonderful": { - "name": "Project Wonderful", - "categoryId": 4, - "url": "http://www.projectwonderful.com/", - "companyId": "project_wonderful" - }, - "propel_marketing": { - "name": "Propel Marketing", - "categoryId": 4, - "url": "http://propelmarketing.com/", - "companyId": "propel_marketing" - }, - "propeller_ads": { - "name": "Propeller Ads", - "categoryId": 4, - "url": "http://www.propellerads.com/", - "companyId": "propeller_ads" - }, - "propermedia": { - "name": "Proper Media", - "categoryId": 4, - "url": "https://proper.io/", - "companyId": "propermedia" - }, - "props": { - "name": "Props", - "categoryId": 4, - "url": "http://props.id/", - "companyId": "props" - }, - "propvideo_net": { - "name": "propvideo.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "prospecteye": { - "name": "ProspectEye", - "categoryId": 4, - "url": "https://www.prospecteye.com/", - "companyId": "prospecteye" - }, - "prosperent": { - "name": "Prosperent", - "categoryId": 4, - "url": "http://prosperent.com", - "companyId": "prosperent" - }, - "prostor": { - "name": "Prostor", - "categoryId": 4, - "url": "http://prostor-lite.ru/", - "companyId": "prostor" - }, - "provide_support": { - "name": "Provide Support", - "categoryId": 2, - "url": "http://www.providesupport.com/", - "companyId": "provide_support" - }, - "proximic": { - "name": "Proximic", - "categoryId": 4, - "url": "http://www.proximic.com/", - "companyId": "proximic" - }, - "proxistore.com": { - "name": "Proxistore", - "categoryId": 4, - "url": "https://www.proxistore.com/", - "companyId": "proxistore" - }, - "pscp.tv": { - "name": "Periscope", - "categoryId": 7, - "url": "https://www.pscp.tv/", - "companyId": "periscope" - }, - "pstatic.net": { - "name": "Naver CDN", - "categoryId": 9, - "url": "https://www.naver.com/", - "companyId": "naver" - }, - "psyma": { - "name": "Psyma", - "categoryId": 4, - "url": "http://www.psyma.com/", - "companyId": "psyma" - }, - "pt_engine": { - "name": "Pt engine", - "categoryId": 6, - "url": "http://www.ptengine.jp/", - "companyId": "pt_engine" - }, - "pub-fit": { - "name": "Pub-Fit", - "categoryId": 4, - "url": "http://www.pub-fit.com/", - "companyId": "pub-fit" - }, - "pub.network": { - "name": "pub.network", - "categoryId": 4, - "url": null, - "companyId": null - }, - "pubble": { - "name": "Pubble", - "categoryId": 2, - "url": "http://www.pubble.co/", - "companyId": "pubble" - }, - "pubdirecte": { - "name": "Pubdirecte", - "categoryId": 4, - "url": "http://www.pubdirecte.com/", - "companyId": "pubdirecte" - }, - "pubgears": { - "name": "PubGears", - "categoryId": 4, - "url": "http://pubgears.com/", - "companyId": "pubgears" - }, - "public_ideas": { - "name": "Public Ideas", - "categoryId": 4, - "url": "http://www.publicidees.co.uk/", - "companyId": "public-idees" - }, - "publicidad.net": { - "name": "Publicidad.net", - "categoryId": 4, - "url": "http://www.en.publicidad.net/", - "companyId": "publicidad.net" - }, - "publir": { - "name": "Publir", - "categoryId": 4, - "url": "http://www.publir.com", - "companyId": "publir" - }, - "pubmatic": { - "name": "PubMatic", - "categoryId": 4, - "url": "http://www.pubmatic.com/", - "companyId": "pubmatic" - }, - "pubnub.com": { - "name": "PubNub", - "categoryId": 8, - "url": "https://www.pubnub.com/", - "companyId": null - }, - "puboclic": { - "name": "Puboclic", - "categoryId": 4, - "url": "http://www.puboclic.com/", - "companyId": "puboclic" - }, - "pulpix.com": { - "name": "Pulpix", - "categoryId": 4, - "url": "https://www.pulpix.com/", - "companyId": "adyoulike" - }, - "pulpo_media": { - "name": "Pulpo Media", - "categoryId": 4, - "url": "http://www.pulpomedia.com/home.html", - "companyId": "pulpo_media" - }, - "pulse360": { - "name": "Pulse360", - "categoryId": 4, - "url": "http://www.pulse360.com", - "companyId": "pulse360" - }, - "pulse_insights": { - "name": "Pulse Insights", - "categoryId": 6, - "url": "http://pulseinsights.com/", - "companyId": "pulse_insights" - }, - "pulsepoint": { - "name": "PulsePoint", - "categoryId": 4, - "url": "http://www.contextweb.com/", - "companyId": "pulsepoint_ad_exchange" - }, - "punchtab": { - "name": "PunchTab", - "categoryId": 4, - "url": "http://www.punchtab.com/", - "companyId": "punchtab" - }, - "purch": { - "name": "Purch", - "categoryId": 4, - "url": "http://www.purch.com/", - "companyId": "purch" - }, - "pure_chat": { - "name": "Pure Chat", - "categoryId": 2, - "url": "https://www.purechat.com", - "companyId": "pure_chat" - }, - "pureprofile": { - "name": "Pureprofile", - "categoryId": 6, - "url": "https://www.pureprofile.com/us/", - "companyId": "pureprofile" - }, - "purlive": { - "name": "PurLive", - "categoryId": 4, - "url": "http://www.purlive.com/", - "companyId": "purlive" - }, - "puserving.com": { - "name": "puserving.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "push.world": { - "name": "Push.world", - "categoryId": 2, - "url": "https://push.world/en", - "companyId": "push.world" - }, - "push_engage": { - "name": "Push Engage", - "categoryId": 2, - "url": "https://www.pushengage.com/", - "companyId": "push_engage" - }, - "pushame.com": { - "name": "pushame.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushbullet": { - "name": "Pushbullet", - "categoryId": 2, - "url": "https://www.pushbullet.com/", - "companyId": "pushbullet" - }, - "pushcrew": { - "name": "VWO Engage", - "categoryId": 2, - "url": "https://vwo.com/engage/", - "companyId": "wingify" - }, - "pusher.com": { - "name": "Pusher", - "categoryId": 6, - "url": "https://pusher.com/", - "companyId": null - }, - "pushnative.com": { - "name": "pushnative.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushnews": { - "name": "Pushnews", - "categoryId": 4, - "url": "https://www.pushnews.eu/", - "companyId": "pushnews" - }, - "pushno.com": { - "name": "pushno.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushwhy.com": { - "name": "pushwhy.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushwoosh.com": { - "name": "Pushwoosh", - "categoryId": 2, - "url": "https://www.pushwoosh.com/", - "companyId": "pushwoosh" - }, - "pvclouds.com": { - "name": "pvclouds.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "q1media": { - "name": "Q1Media", - "categoryId": 4, - "url": "http://q1media.com/", - "companyId": "q1media" - }, - "q_division": { - "name": "Q-Division", - "categoryId": 4, - "url": "https://q-division.de/", - "companyId": null - }, - "qbaka": { - "name": "Qbaka", - "categoryId": 6, - "url": "https://qbaka.com/", - "companyId": "qbaka" - }, - "qcri_analytics": { - "name": "QCRI Analytics", - "categoryId": 6, - "url": "http://qcri.org/", - "companyId": "qatar_computing_research_institute" - }, - "qeado": { - "name": "Qeado", - "categoryId": 6, - "url": "https://www.qeado.com/", - "companyId": "qeado" - }, - "qihoo_360": { - "name": "Qihoo 360", - "categoryId": 6, - "url": "https://www.360totalsecurity.com/en/", - "companyId": "qihoo_360_technology" - }, - "qq.com": { - "name": "qq.com", - "categoryId": 8, - "url": "http://www.qq.com/", - "companyId": "qq.com" - }, - "qrius": { - "name": "Qrius", - "categoryId": 7, - "url": "http://www.qrius.me/", - "companyId": "mediafed" - }, - "qualaroo": { - "name": "Qualaroo", - "categoryId": 6, - "url": null, - "companyId": null - }, - "qualia": { - "name": "Qualia", - "categoryId": 4, - "url": "http://www.bluecava.com/", - "companyId": "qualia" - }, - "qualtrics": { - "name": "Qualtrics", - "categoryId": 6, - "url": "http://www.qualtrics.com/", - "companyId": "qualtrics" - }, - "quantcast": { - "name": "Quantcast", - "categoryId": 4, - "url": "http://www.quantcast.com/", - "companyId": "quantcast" - }, - "quantcount": { - "name": "Quantcount", - "categoryId": 6, - "url": "http://www.quantcast.com", - "companyId": "quantcast" - }, - "quantum_metric": { - "name": "Quantum Metric", - "categoryId": 6, - "url": "https://www.quantummetric.com/", - "companyId": "quantum_metric" - }, - "quartic.pl": { - "name": "Quartic", - "categoryId": 6, - "url": "https://www.quarticon.com/", - "companyId": "quarticon" - }, - "qubit": { - "name": "Qubit Opentag", - "categoryId": 6, - "url": "http://www.qubit.com/", - "companyId": "qubit" - }, - "questback": { - "name": "Questback", - "categoryId": 2, - "url": "http://www1.questback.com/", - "companyId": "questback" - }, - "queue-it": { - "name": "Queue-it", - "categoryId": 6, - "url": "https://queue-it.com/", - "companyId": null - }, - "quick-counter.net": { - "name": "Quick-counter.net", - "categoryId": 6, - "url": "http://www.quick-counter.net/", - "companyId": "quick-counter.net" - }, - "quigo_adsonar": { - "name": "Quigo AdSonar", - "categoryId": 4, - "url": "http://www.quigo.com", - "companyId": "verizon" - }, - "quinstreet": { - "name": "QuinStreet", - "categoryId": 4, - "url": "http://www.quinstreet.com/", - "companyId": "quinstreet" - }, - "quintelligence": { - "name": "Quintelligence", - "categoryId": 6, - "url": "http://www.quintelligence.com/", - "companyId": "quintelligence" - }, - "quisma": { - "name": "Quisma", - "categoryId": 4, - "url": "http://www.quisma.com/en/", - "companyId": "wpp" - }, - "quora.com": { - "name": "Quora", - "categoryId": 7, - "url": "https://quora.com/", - "companyId": null - }, - "r_advertising": { - "name": "R-Advertising", - "categoryId": 4, - "url": "http://www.r-advertising.com/", - "companyId": "r-advertising" - }, - "rackcdn.com": { - "name": "Rackspace", - "categoryId": 9, - "url": "https://www.rackspace.com/", - "companyId": null - }, - "radarurl": { - "name": "RadarURL", - "categoryId": 6, - "url": "http://radarurl.com/", - "companyId": "radarurl" - }, - "radial": { - "name": "Radial", - "categoryId": 4, - "url": "http://www.clearsaleing.com/", - "companyId": "radial" - }, - "radiumone": { - "name": "RadiumOne", - "categoryId": 4, - "url": "http://www.radiumone.com/index.html", - "companyId": "rythmone" - }, - "raisenow": { - "name": "RaiseNow", - "categoryId": 6, - "url": "https://www.raisenow.com/de", - "companyId": "raisenow" - }, - "rakuten_display": { - "name": "Rakuten Display", - "categoryId": 4, - "url": "https://rakutenmarketing.com/display", - "companyId": "rakuten" - }, - "rakuten_globalmarket": { - "name": "Rakuten", - "categoryId": 4, - "url": "https://www.rakuten.co.jp/", - "companyId": "rakuten" - }, - "rakuten_widget": { - "name": "Rakuten Widget", - "categoryId": 4, - "url": "http://global.rakuten.com/corp/", - "companyId": "rakuten" - }, - "rambler": { - "name": "Rambler", - "categoryId": 6, - "url": "https://www.rambler.ru/", - "companyId": "rambler" - }, - "rambler_count": { - "name": "Rambler Count", - "categoryId": 2, - "url": "http://www.rambler.ru/", - "companyId": "rambler" - }, - "rambler_widget": { - "name": "Rambler Widget", - "categoryId": 2, - "url": "http://www.rambler.ru/", - "companyId": "rambler" - }, - "rapidspike": { - "name": "RapidSpike", - "categoryId": 6, - "url": "https://www.rapidspike.com", - "companyId": "rapidspike" - }, - "ravelin": { - "name": "Ravelin", - "categoryId": 6, - "url": "https://www.ravelin.com/", - "companyId": null - }, - "rawgit": { - "name": "RawGit", - "categoryId": 9, - "url": "http://rawgit.com/", - "companyId": null - }, - "raygun": { - "name": "Raygun", - "categoryId": 4, - "url": "https://raygun.com/", - "companyId": "raygun" - }, - "rbc_counter": { - "name": "RBC Counter", - "categoryId": 6, - "url": "http://www.rbc.ru/", - "companyId": "rbc_group" - }, - "rcs.it": { - "name": "RCS", - "categoryId": 4, - "url": "http://www.rcsmediagroup.it/", - "companyId": "rcs" - }, - "rd_station": { - "name": "RD Station", - "categoryId": 6, - "url": "http://www.rdstation.com/en/", - "companyId": "rd_station" - }, - "reachforce": { - "name": "ReachForce", - "categoryId": 6, - "url": "http://www.reachforce.com/", - "companyId": "reachforce" - }, - "reachjunction": { - "name": "ReachJunction", - "categoryId": 4, - "url": "http://www.reachjunction.com/", - "companyId": "reachjunction" - }, - "reachlocal": { - "name": "ReachLocal", - "categoryId": 4, - "url": "http://www.reachlocal.com/", - "companyId": "reachlocal" - }, - "reactful": { - "name": "Reactful", - "categoryId": 4, - "url": "http://www.reactful.com/", - "companyId": "reactful" - }, - "reactivpub": { - "name": "Reactivpub", - "categoryId": 6, - "url": "http://www.reactivpub.com/", - "companyId": "r-advertising" - }, - "reactx": { - "name": "ReactX", - "categoryId": 4, - "url": "http://home.skinected.com", - "companyId": "reactx" - }, - "readerboard": { - "name": "ReaderBoard", - "categoryId": 7, - "url": "http://www.readrboard.com", - "companyId": "centre_phi" - }, - "readme": { - "name": "ReadMe", - "categoryId": 6, - "url": "https://readme.com/", - "companyId": "readme" - }, - "readspeaker.com": { - "name": "ReadSpeaker", - "categoryId": 2, - "url": "https://www.readspeaker.com/", - "companyId": null - }, - "realclick": { - "name": "RealClick", - "categoryId": 4, - "url": "http://www.realclick.co.kr/", - "companyId": "realclick" - }, - "realperson.de": { - "name": "Realperson Chat", - "categoryId": 2, - "url": "http://www.optimise-it.de/", - "companyId": "optimise_it" - }, - "realtime": { - "name": "Realtime", - "categoryId": 2, - "url": "http://www.realtime.co/", - "companyId": "realtime" - }, - "realytics": { - "name": "Realytics", - "categoryId": 6, - "url": "https://www.realytics.io/", - "companyId": "realytics" - }, - "rebel_mouse": { - "name": "Rebel Mouse", - "categoryId": 6, - "url": "https://www.rebelmouse.com/", - "companyId": "rebelmouse" - }, - "recettes.net": { - "name": "Recettes.net", - "categoryId": 8, - "url": "http://www.recettes.net/", - "companyId": "recettes.net" - }, - "recopick": { - "name": "RecoPick", - "categoryId": 4, - "url": "https://recopick.com/", - "companyId": "recopick" - }, - "recreativ": { - "name": "Recreativ", - "categoryId": 4, - "url": "http://recreativ.ru/", - "companyId": "recreativ" - }, - "recruitics": { - "name": "Recruitics", - "categoryId": 6, - "url": "http://recruitics.com/", - "companyId": "recruitics" - }, - "red_ventures": { - "name": "Red Ventures", - "categoryId": 6, - "url": "https://www.redventures.com/", - "companyId": "red_ventures" - }, - "redblue_de": { - "name": "redblue", - "categoryId": 6, - "url": "https://www.redblue.de/", - "companyId": null - }, - "redcdn.pl": { - "name": "redGalaxy CDN", - "categoryId": 9, - "url": "http://www.atendesoftware.pl/", - "companyId": "atende_software" - }, - "reddit": { - "name": "Reddit", - "categoryId": 7, - "url": "http://reddit.com", - "companyId": "reddit" - }, - "redhelper": { - "name": "RedHelper", - "categoryId": 2, - "url": "http://redhelper.com/", - "companyId": "redhelper" - }, - "redlotus": { - "name": "RedLotus", - "categoryId": 4, - "url": "http://triggit.com/", - "companyId": "redlotus" - }, - "redtram": { - "name": "RedTram", - "categoryId": 4, - "url": "http://www.redtram.com/", - "companyId": "redtram" - }, - "redtube.com": { - "name": "redtube.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "redux_media": { - "name": "Redux Media", - "categoryId": 4, - "url": "http://reduxmedia.com/", - "companyId": "redux_media" - }, - "reed_business_information": { - "name": "Reed Business Information", - "categoryId": 6, - "url": "http://www.reedbusiness.com/", - "companyId": "andera_partners" - }, - "reembed.com": { - "name": "reEmbed", - "categoryId": 0, - "url": "https://www.reembed.com/", - "companyId": "reembed" - }, - "reevoo.com": { - "name": "Reevoo", - "categoryId": 4, - "url": "https://www.reevoo.com/en/", - "companyId": "reevoo" - }, - "refericon": { - "name": "Refericon", - "categoryId": 4, - "url": "https://refericon.pl/#", - "companyId": "refericon" - }, - "referlocal": { - "name": "ReferLocal", - "categoryId": 4, - "url": "http://referlocal.com/", - "companyId": "referlocal" - }, - "refersion": { - "name": "Refersion", - "categoryId": 4, - "url": "https://www.refersion.com/", - "companyId": "refersion" - }, - "refined_labs": { - "name": "Refined Labs", - "categoryId": 4, - "url": "http://www.refinedlabs.com", - "companyId": "refined_labs" - }, - "reflektion": { - "name": "Reflektion", - "categoryId": 4, - "url": "http://", - "companyId": "reflektion" - }, - "reformal": { - "name": "Reformal", - "categoryId": 2, - "url": "http://reformal.ru/", - "companyId": "reformal" - }, - "reinvigorate": { - "name": "Reinvigorate", - "categoryId": 6, - "url": "http://www.reinvigorate.net/", - "companyId": "media_temple" - }, - "rekko": { - "name": "Rekko", - "categoryId": 4, - "url": "http://convert.us/", - "companyId": "rekko" - }, - "reklam_store": { - "name": "Reklam Store", - "categoryId": 4, - "url": "http://www.reklamstore.com", - "companyId": "reklam_store" - }, - "reklamport": { - "name": "Reklamport", - "categoryId": 4, - "url": "http://www.reklamport.com/", - "companyId": "reklamport" - }, - "reklamz": { - "name": "ReklamZ", - "categoryId": 4, - "url": "http://www.reklamz.com/", - "companyId": "reklamz" - }, - "rekmob": { - "name": "Rekmob", - "categoryId": 4, - "url": "https://www.rekmob.com/", - "companyId": "rekmob" - }, - "relap": { - "name": "Relap", - "categoryId": 4, - "url": "https://relap.io/", - "companyId": "relap" - }, - "relay42": { - "name": "Relay42", - "categoryId": 5, - "url": "http://synovite.com", - "companyId": "relay42" - }, - "relestar": { - "name": "Relestar", - "categoryId": 6, - "url": "https://relestar.com/", - "companyId": "relestar" - }, - "relevant4.com": { - "name": "relevant4 GmbH", - "categoryId": 8, - "url": "https://www.relevant4.com/", - "companyId": null - }, - "remintrex": { - "name": "Remintrex", - "categoryId": 4, - "url": "http://www.remintrex.com/", - "companyId": null - }, - "remove.video": { - "name": "remove.video", - "categoryId": 12, - "url": null, - "companyId": null - }, - "repost.us": { - "name": "Repost.us", - "categoryId": 4, - "url": "http://www.freerangecontent.com/", - "companyId": "repost" - }, - "republer.com": { - "name": "Republer", - "categoryId": 4, - "url": "http://republer.com/", - "companyId": "republer" - }, - "res-meter": { - "name": "Res-meter", - "categoryId": 6, - "url": "http://respublica.al/res-meter", - "companyId": "respublica" - }, - "research_now": { - "name": "Research Now", - "categoryId": 4, - "url": "http://www.researchnow.com/", - "companyId": "research_now" - }, - "resonate_networks": { - "name": "Resonate Networks", - "categoryId": 4, - "url": "http://www.resonatenetworks.com/", - "companyId": "resonate" - }, - "respond": { - "name": "Respond", - "categoryId": 4, - "url": "http://respondhq.com/", - "companyId": "respond" - }, - "responsetap": { - "name": "ResponseTap", - "categoryId": 4, - "url": "http://www.adinsight.eu/", - "companyId": "responsetap" - }, - "result_links": { - "name": "Result Links", - "categoryId": 4, - "url": "http://www.resultlinks.com/", - "companyId": "result_links" - }, - "resultspage.com": { - "name": "SLI Systems", - "categoryId": 6, - "url": "https://www.sli-systems.com/", - "companyId": "sli_systems" - }, - "retailrocket.net": { - "name": "Retail Rocket", - "categoryId": 4, - "url": "https://retailrocket.net/", - "companyId": "retail_rocket" - }, - "retarget_app": { - "name": "Retarget App", - "categoryId": 4, - "url": "https://retargetapp.com/", - "companyId": "retargetapp" - }, - "retargeter_beacon": { - "name": "ReTargeter Beacon", - "categoryId": 4, - "url": "http://www.retargeter.com/", - "companyId": "retargeter" - }, - "retargeting.cl": { - "name": "Retargeting.cl", - "categoryId": 4, - "url": "http://retargeting.cl/", - "companyId": "retargeting" - }, - "retention_science": { - "name": "Retention Science", - "categoryId": 4, - "url": "http://retentionscience.com/", - "companyId": "retention_science" - }, - "reuters_media": { - "name": "Reuters media", - "categoryId": 9, - "url": "https://reuters.com", - "companyId": null - }, - "revcontent": { - "name": "RevContent", - "categoryId": 4, - "url": "https://www.revcontent.com/", - "companyId": "revcontent" - }, - "reve_marketing": { - "name": "Reve Marketing", - "categoryId": 4, - "url": "http://tellafriend.socialtwist.com/", - "companyId": "reve_marketing" - }, - "revenue": { - "name": "Revenue", - "categoryId": 4, - "url": "https://revenue.com/", - "companyId": "revenue" - }, - "revenuehits": { - "name": "RevenueHits", - "categoryId": 4, - "url": "http://www.revenuehits.com/", - "companyId": "revenuehits" - }, - "revenuemantra": { - "name": "RevenueMantra", - "categoryId": 4, - "url": "http://www.revenuemantra.com/", - "companyId": "revenuemantra" - }, - "revive_adserver": { - "name": "Revive Adserver", - "categoryId": 4, - "url": "https://www.revive-adserver.com/", - "companyId": "revive_adserver" - }, - "revolver_maps": { - "name": "Revolver Maps", - "categoryId": 6, - "url": "http://www.revolvermaps.com/", - "companyId": "revolver_maps" - }, - "revresponse": { - "name": "RevResponse", - "categoryId": 4, - "url": "http://www.netline.com/", - "companyId": "netline" - }, - "rewords": { - "name": "ReWords", - "categoryId": 4, - "url": "http://www.rewords.pl/", - "companyId": "rewords" - }, - "rhythmone": { - "name": "RhythmOne", - "categoryId": 4, - "url": "http://www.adconductor.com/", - "companyId": "rhythmone" - }, - "rhythmone_beacon": { - "name": "Rhythmone Beacon", - "categoryId": 4, - "url": "https://www.rhythmone.com/", - "companyId": "rythmone" - }, - "ria.ru": { - "name": "ria.ru", - "categoryId": 8, - "url": "https://ria.ru/", - "companyId": null - }, - "rich_media_banner_network": { - "name": "Rich Media Banner Network", - "categoryId": 4, - "url": "http://rmbn.ru/", - "companyId": "rich_media_banner_network" - }, - "richrelevance": { - "name": "RichRelevance", - "categoryId": 2, - "url": "http://www.richrelevance.com/", - "companyId": "richrelevance" - }, - "ringier.ch": { - "name": "Ringier", - "categoryId": 6, - "url": "http://ringier.ch/en", - "companyId": "ringier" - }, - "rio_seo": { - "name": "Rio SEO", - "categoryId": 7, - "url": "http://www.meteorsolutions.com", - "companyId": "rio_seo" - }, - "riskfield.com": { - "name": "Riskified", - "categoryId": 2, - "url": "https://www.riskified.com/", - "companyId": "riskfield" - }, - "rncdn3.com": { - "name": "Reflected Networks", - "categoryId": 9, - "url": "http://www.rncdn3.com/", - "companyId": null - }, - "ro2.biz": { - "name": "Ro2.biz", - "categoryId": 4, - "url": "http://ro2.biz/index.php?r=adikku", - "companyId": "ro2.biz" - }, - "roblox": { - "name": "Roblox", - "categoryId": 8, - "url": "https://www.roblox.com/", - "companyId": null - }, - "rockerbox": { - "name": "Rockerbox", - "categoryId": 6, - "url": "https://www.rockerbox.com/privacy", - "companyId": "rockerbox" - }, - "rocket.ia": { - "name": "Rocket.ia", - "categoryId": 4, - "url": "https://rocket.la/", - "companyId": "rocket.la" - }, - "roi_trax": { - "name": "ROI trax", - "categoryId": 4, - "url": "http://www.oneupweb.com/", - "companyId": "oneupweb" - }, - "roistat": { - "name": "Roistat", - "categoryId": 6, - "url": "https://roistat.com", - "companyId": "roistat" - }, - "rollad": { - "name": "Rollad", - "categoryId": 4, - "url": "http://rollad.ru", - "companyId": "rollad" - }, - "rollbar": { - "name": "Rollbar", - "categoryId": 6, - "url": "http://www.rollbar.com/", - "companyId": "rollbar" - }, - "roost": { - "name": "Roost", - "categoryId": 6, - "url": "http://roost.me/", - "companyId": "roost" - }, - "rooster": { - "name": "Rooster", - "categoryId": 6, - "url": "http://www.getrooster.com/", - "companyId": "rooster" - }, - "roq.ad": { - "name": "Roq.ad", - "categoryId": 4, - "url": "https://www.roq.ad/", - "companyId": "roq.ad" - }, - "rotaban": { - "name": "RotaBan", - "categoryId": 4, - "url": "http://www.rotaban.ru/", - "companyId": "rotaban" - }, - "routenplaner-karten.com": { - "name": "Routenplaner Karten", - "categoryId": 2, - "url": "https://www.routenplaner-karten.com/", - "companyId": null - }, - "rovion": { - "name": "Rovion", - "categoryId": 4, - "url": "http://www.rovion.com/", - "companyId": "rovion" - }, - "rsspump": { - "name": "RSSPump", - "categoryId": 2, - "url": "http://www.rsspump.com", - "companyId": "rsspump" - }, - "rtb_house": { - "name": "RTB House", - "categoryId": 4, - "url": "http://en.adpilot.com/", - "companyId": "rtb_house" - }, - "rtblab": { - "name": "RTBmarkt", - "categoryId": 4, - "url": "http://www.rtbmarkt.de/en/home/", - "companyId": "rtbmarkt" - }, - "rtbsuperhub.com": { - "name": "rtbsuperhub.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "rtl_group": { - "name": "RTL Group", - "categoryId": 8, - "url": "http://www.rtlgroup.com/www/htm/home.aspx", - "companyId": "rtl_group" - }, - "rtmark.net": { - "name": "Advertising Technologies Ltd", - "categoryId": 4, - "url": "http://rtmark.net/", - "companyId": "big_wall_vision" - }, - "rubicon": { - "name": "Rubicon", - "categoryId": 4, - "url": "http://rubiconproject.com/", - "companyId": "rubicon_project" - }, - "ruhrgebiet": { - "name": "Ruhrgebiet", - "categoryId": 4, - "url": "https://www.ruhrgebiet-onlineservices.de/", - "companyId": "ruhrgebiet" - }, - "rummycircle": { - "name": "RummyCircle", - "categoryId": 4, - "url": "https://www.rummycircle.com/", - "companyId": "rummycircle" - }, - "run": { - "name": "RUN", - "categoryId": 4, - "url": "http://www.rundsp.com/", - "companyId": "run" - }, - "runative": { - "name": "Runative", - "categoryId": 4, - "url": "https://runative.com/", - "companyId": null - }, - "rune": { - "name": "Rune", - "categoryId": 6, - "url": "http://www.secretrune.com/", - "companyId": "rune_inc." - }, - "runmewivel.com": { - "name": "runmewivel.com", - "categoryId": 10, - "url": null, - "companyId": null - }, - "rythmxchange": { - "name": "Rythmxchange", - "categoryId": 0, - "url": "https://www.rhythmone.com/", - "companyId": "rythmone" - }, - "s24_com": { - "name": "Shopping24 internet group", - "categoryId": 4, - "url": "https://www.s24.com/", - "companyId": null - }, - "s3xified.com": { - "name": "s3xified.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sabavision": { - "name": "SabaVision", - "categoryId": 4, - "url": "http://www.sabavision.com/en/", - "companyId": "sabavision" - }, - "sagemetrics": { - "name": "SageMetrics", - "categoryId": 4, - "url": "http://www.sagemetrics.com", - "companyId": "ipmg" - }, - "sailthru_horizon": { - "name": "Sailthru Horizon", - "categoryId": 4, - "url": "https://www.sailthru.com", - "companyId": "sailthru" - }, - "salecycle": { - "name": "SaleCycle", - "categoryId": 4, - "url": "http://www.salecycle.com/", - "companyId": "salecycle" - }, - "sales_feed": { - "name": "Sales Feed", - "categoryId": 4, - "url": "https://www.salesfeed.com/", - "companyId": "sales_feed" - }, - "sales_manago": { - "name": "SALESmanago", - "categoryId": 6, - "url": "https://www.salesmanago.com/", - "companyId": "sales_manago" - }, - "salesforce.com": { - "name": "Salesforce", - "categoryId": 4, - "url": "https://www.salesforce.com/eu/", - "companyId": "salesforce" - }, - "salesforce_live_agent": { - "name": "Salesforce Live Agent", - "categoryId": 2, - "url": "http://www.salesforce.com/", - "companyId": "salesforce" - }, - "salesfusion": { - "name": "SalesFUSION", - "categoryId": 4, - "url": "http://salesfusion.com/", - "companyId": "salesfusion" - }, - "salespider_media": { - "name": "SaleSpider Media", - "categoryId": 4, - "url": "http://salespidermedia.com/", - "companyId": "salespider_media" - }, - "salesviewer": { - "name": "SalesViewer", - "categoryId": 6, - "url": "https://www.salesviewer.com/", - "companyId": "salesviewer" - }, - "samba.tv": { - "name": "Samba TV", - "categoryId": 4, - "url": "https://samba.tv/", - "companyId": "samba_tv" - }, - "sanoma.fi": { - "name": "Sanoma", - "categoryId": 4, - "url": "https://sanoma.com/", - "companyId": "sanoma" - }, - "sap_crm": { - "name": "SAP CRM", - "categoryId": 6, - "url": "https://www.sap.com/products/crm.html", - "companyId": "sap" - }, - "sap_sales_cloud": { - "name": "SAP Sales Cloud", - "categoryId": 2, - "url": "http://leadforce1.com/", - "companyId": "sap" - }, - "sap_xm": { - "name": "SAP Exchange Media", - "categoryId": 4, - "url": "http://sapexchange.media/", - "companyId": null - }, - "sape.ru": { - "name": "Sape", - "categoryId": 6, - "url": "https://www.sape.ru/en", - "companyId": "sape" - }, - "sapo_ads": { - "name": "SAPO Ads", - "categoryId": 4, - "url": "http://www.sapo.pt/", - "companyId": "sapo" - }, - "sas": { - "name": "SAS", - "categoryId": 6, - "url": "http://www.sas.com/", - "companyId": "sas" - }, - "say.ac": { - "name": "Say.ac", - "categoryId": 4, - "url": "http://say.ac", - "companyId": "say.ac" - }, - "say_media": { - "name": "Say Media", - "categoryId": 4, - "url": "http://www.saymedia.com/", - "companyId": "say_media" - }, - "sayyac": { - "name": "Sayyac", - "categoryId": 6, - "url": "http://www.sayyac.com/", - "companyId": "sayyac" - }, - "scarabresearch": { - "name": "Scarab Research", - "categoryId": 4, - "url": "https://www.scarabresearch.com/", - "companyId": "emarsys" - }, - "schibsted": { - "name": "Schibsted Media Group", - "categoryId": 8, - "url": "http://www.schibsted.com/", - "companyId": "schibsted_asa" - }, - "schneevonmorgen.com": { - "name": "Schnee von Morgen", - "categoryId": 0, - "url": "http://www.schneevonmorgen.com/", - "companyId": null - }, - "scoota": { - "name": "Scoota", - "categoryId": 4, - "url": "http://scoota.com/", - "companyId": "rockabox" - }, - "scorecard_research_beacon": { - "name": "ScoreCard Research Beacon", - "categoryId": 6, - "url": "https://www.scorecardresearch.com/", - "companyId": "comscore" - }, - "scout_analytics": { - "name": "Scout Analytics", - "categoryId": 4, - "url": "http://scoutanalytics.com/", - "companyId": "scout_analytics" - }, - "scribblelive": { - "name": "ScribbleLive", - "categoryId": 8, - "url": null, - "companyId": null - }, - "scribol": { - "name": "Scribol", - "categoryId": 4, - "url": "http://scribol.com/", - "companyId": "scribol" - }, - "scripps_analytics": { - "name": "Scripps Analytics", - "categoryId": 6, - "url": "http://www.scrippsnetworksinteractive.com/", - "companyId": "scripps_networks" - }, - "scroll": { - "name": "Scroll", - "categoryId": 5, - "url": "https://scroll.com/", - "companyId": "scroll" - }, - "scupio": { - "name": "Scupio", - "categoryId": 4, - "url": "http://ad.scupio.com/", - "companyId": "bridgewell" - }, - "search123": { - "name": "Search123", - "categoryId": 4, - "url": "http://www.search123.com/", - "companyId": "search123" - }, - "searchforce": { - "name": "SearchForce", - "categoryId": 4, - "url": "http://www.searchforce.com/", - "companyId": "searchforce" - }, - "searchignite": { - "name": "SearchIgnite", - "categoryId": 4, - "url": "https://searchignite.com/", - "companyId": "zeta" - }, - "searchrev": { - "name": "SearchRev", - "categoryId": 4, - "url": "http://www.searchrev.com/", - "companyId": "searchrev" - }, - "second_media": { - "name": "Second Media", - "categoryId": 4, - "url": "http://www.secondmedia.com/", - "companyId": "second_media" - }, - "securedtouch": { - "name": "SecuredTouch", - "categoryId": 6, - "url": "https://www.securedtouch.com/", - "companyId": null - }, - "securedvisit": { - "name": "SecuredVisit", - "categoryId": 4, - "url": "http://securedvisit.com/", - "companyId": "securedvisit" - }, - "seeding_alliance": { - "name": "Seeding Alliance", - "categoryId": 4, - "url": "http://seeding-alliance.de", - "companyId": "stroer" - }, - "seedtag.com": { - "name": "Seedtag", - "categoryId": 4, - "url": "https://www.seedtag.com/en/", - "companyId": "seedtag" - }, - "seevolution": { - "name": "SeeVolution", - "categoryId": 6, - "url": "http://www.seevolution.com", - "companyId": "seevolution" - }, - "segment": { - "name": "Segment", - "categoryId": 6, - "url": "https://segment.io/", - "companyId": "segment" - }, - "segmento": { - "name": "Segmento", - "categoryId": 4, - "url": "https://segmento.ru/en", - "companyId": "segmento" - }, - "segmint": { - "name": "Segmint", - "categoryId": 6, - "url": "http://www.segmint.com/", - "companyId": "segmint" - }, - "sekindo": { - "name": "Sekindo", - "categoryId": 4, - "url": "http://www.sekindo.com/", - "companyId": "sekindo" - }, - "sellpoints": { - "name": "Sellpoints", - "categoryId": 4, - "url": "https://www.sellpoints.com/", - "companyId": "sellpoints" - }, - "semantiqo.com": { - "name": "Semantiqo", - "categoryId": 4, - "url": "https://semantiqo.com/", - "companyId": null - }, - "semasio": { - "name": "Semasio", - "categoryId": 4, - "url": "http://semasio.com/", - "companyId": "semasio" - }, - "semilo": { - "name": "Semilo", - "categoryId": 4, - "url": "http://www.semilo.nl/", - "companyId": "semilo" - }, - "semknox.com": { - "name": "SEMKNOX GmbH", - "categoryId": 5, - "url": "https://semknox.com/", - "companyId": null - }, - "sendinblue": { - "name": "sendinblue", - "categoryId": 4, - "url": "https://fr.sendinblue.com/", - "companyId": "sendinblue" - }, - "sendpulse.com": { - "name": "SendPulse", - "categoryId": 3, - "url": "https://sendpulse.com/", - "companyId": null - }, - "sendsay": { - "name": "Sendsay", - "categoryId": 2, - "url": "https://sendsay.ru", - "companyId": "sendsay" - }, - "sense_digital": { - "name": "Sense Digital", - "categoryId": 6, - "url": "http://sensedigital.in/", - "companyId": "sense_digital" - }, - "sensors_data": { - "name": "Sensors Data", - "categoryId": 6, - "url": "https://www.sensorsdata.cn/", - "companyId": "sensors_data" - }, - "sentifi.com": { - "name": "Sentifi", - "categoryId": 6, - "url": "https://sentifi.com/", - "companyId": "sentifi" - }, - "sentry": { - "name": "Sentry", - "categoryId": 6, - "url": "https://sentry.io/", - "companyId": "sentry" - }, - "sepyra": { - "name": "Sepyra", - "categoryId": 4, - "url": "http://sepyra.com/", - "companyId": "sepyra" - }, - "sessioncam": { - "name": "SessionCam", - "categoryId": 6, - "url": "http://www.sessioncam.com/", - "companyId": "sessioncam" - }, - "sessionly": { - "name": "Sessionly", - "categoryId": 2, - "url": "https://www.sessionly.io/", - "companyId": "sessionly" - }, - "sevenone_media": { - "name": "SevenOne Media", - "categoryId": 4, - "url": null, - "companyId": null - }, - "sexadnetwork": { - "name": "SexAdNetwork", - "categoryId": 3, - "url": "http://www.sexadnetwork.com/", - "companyId": "sexadnetwork" - }, - "sexinyourcity": { - "name": "SexInYourCity", - "categoryId": 3, - "url": "http://www.sexinyourcity.com/", - "companyId": "sexinyourcity" - }, - "sextracker": { - "name": "SexTracker", - "categoryId": 3, - "url": "http://webmasters.sextracker.com/", - "companyId": "sextracker" - }, - "sexypartners.net": { - "name": "sexypartners.net", - "categoryId": 3, - "url": null, - "companyId": null - }, - "seznam": { - "name": "Seznam", - "categoryId": 6, - "url": "https://onas.seznam.cz/cz/", - "companyId": "seznam" - }, - "shareaholic": { - "name": "Shareaholic", - "categoryId": 6, - "url": "hhttps://www.shareaholic.com/", - "companyId": "shareaholic" - }, - "shareasale": { - "name": "ShareASale", - "categoryId": 4, - "url": "http://www.shareasale.com/", - "companyId": "shareasale" - }, - "sharecompany": { - "name": "ShareCompany", - "categoryId": 2, - "url": "http://sharecompany.nl", - "companyId": "sharecompany" - }, - "sharepoint": { - "name": "Microsoft SharePoint", - "categoryId": 2, - "url": "https://products.office.com/en-us/sharepoint/sharepoint-online-collaboration-software", - "companyId": "microsoft" - }, - "sharethis": { - "name": "ShareThis", - "categoryId": 4, - "url": "http://sharethis.com/", - "companyId": "sharethis" - }, - "sharethrough": { - "name": "ShareThrough", - "categoryId": 4, - "url": "http://www.sharethrough.com/", - "companyId": "sharethrough" - }, - "sharpspring": { - "name": "Sharpspring", - "categoryId": 6, - "url": "https://sharpspring.com/", - "companyId": "sharpspring" - }, - "sheego.de": { - "name": "sheego.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "sheerid": { - "name": "SheerID", - "categoryId": 4, - "url": "http://www.sheerid.com/", - "companyId": "sheerid" - }, - "shinystat": { - "name": "ShinyStat", - "categoryId": 6, - "url": "http://www.shinystat.com/", - "companyId": "shinystat" - }, - "shop_target": { - "name": "Shop Target", - "categoryId": 4, - "url": "http://shoptarget.com.br/", - "companyId": "shopback" - }, - "shopauskunft.de": { - "name": "ShopAuskunft.de", - "categoryId": 2, - "url": "https://shopauskunft.de/", - "companyId": null - }, - "shopgate.com": { - "name": "Shopgate", - "categoryId": 2, - "url": "https://www.shopgate.com/", - "companyId": null - }, - "shopify_stats": { - "name": "Shopify Stats", - "categoryId": 4, - "url": "http://www.shopify.com/", - "companyId": "shopify" - }, - "shopifycdn.com": { - "name": "Shopify CDN", - "categoryId": 9, - "url": "https://www.shopify.com/", - "companyId": "shopify" - }, - "shopifycloud.com": { - "name": "Shopify Cloud", - "categoryId": 2, - "url": "https://www.shopify.com/", - "companyId": "shopify" - }, - "shopper_approved": { - "name": "Shopper Approved", - "categoryId": 2, - "url": "http://www.shopperapproved.com", - "companyId": "shopper_approved" - }, - "shopping_com": { - "name": "Shopping.com", - "categoryId": 4, - "url": "https://partnernetwork.ebay.com/", - "companyId": "ebay_partner_network" - }, - "shopping_flux": { - "name": "Shopping Flux", - "categoryId": 6, - "url": "http://www.shopping-flux.com/", - "companyId": "shopping_flux" - }, - "shoprunner": { - "name": "ShopRunner", - "categoryId": 2, - "url": "https://www.shoprunner.com", - "companyId": "shoprunner" - }, - "shopsocially": { - "name": "ShopSocially", - "categoryId": 2, - "url": "http://shopsocially.com/", - "companyId": "shopsocially" - }, - "shopzilla": { - "name": "Shopzilla", - "categoryId": 4, - "url": "http://www.shopzilla.com/", - "companyId": "shopzilla" - }, - "shortnews": { - "name": "ShortNews.de", - "categoryId": 8, - "url": "http://www.shortnews.de/#", - "companyId": null - }, - "shrink": { - "name": "Shrink", - "categoryId": 2, - "url": "http://shink.in/", - "companyId": "shrink.in" - }, - "shutterstock": { - "name": "Shutterstock", - "categoryId": 8, - "url": "https://www.shutterstock.com/", - "companyId": "shutterstock_inc" - }, - "siblesectiveal.club": { - "name": "siblesectiveal.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sidecar": { - "name": "Sidecar", - "categoryId": 6, - "url": "http://hello.getsidecar.com/", - "companyId": "sidecar" - }, - "sift_science": { - "name": "Sift Science", - "categoryId": 6, - "url": "https://siftscience.com/", - "companyId": "sift_science" - }, - "signal": { - "name": "Signal", - "categoryId": 5, - "url": "https://www.signal.co/", - "companyId": "signal_digital" - }, - "signifyd": { - "name": "Signifyd", - "categoryId": 6, - "url": "https://www.signifyd.com/", - "companyId": "signifyd" - }, - "silverpop": { - "name": "Silverpop", - "categoryId": 2, - "url": "http://www.silverpop.com/", - "companyId": "ibm" - }, - "similardeals.net": { - "name": "SimilarDeals", - "categoryId": 8, - "url": "http://www.similardeals.net/", - "companyId": null - }, - "simplereach": { - "name": "SimpleReach", - "categoryId": 6, - "url": "https://www.nativo.com/simplereach", - "companyId": "nativo" - }, - "simpli.fi": { - "name": "Simpli.fi", - "categoryId": 4, - "url": "http://www.simpli.fi", - "companyId": "simpli.fi" - }, - "sina": { - "name": "Sina", - "categoryId": 6, - "url": "http://www.sina.com/", - "companyId": "sina" - }, - "sina_cdn": { - "name": "Sina CDN", - "categoryId": 9, - "url": "https://www.sina.com.cn/", - "companyId": "sina" - }, - "singlefeed": { - "name": "SingleFeed", - "categoryId": 4, - "url": "https://www.singlefeed.com/", - "companyId": "singlefeed" - }, - "sirdata": { - "name": "Sirdata", - "categoryId": 6, - "url": "http://www.sirdata.com/home/", - "companyId": "sirdata" - }, - "site24x7": { - "name": "Site24x7", - "categoryId": 6, - "url": "https://www.site24x7.com/", - "companyId": "zoho_corp" - }, - "site_booster": { - "name": "Site Booster", - "categoryId": 7, - "url": "https://sitebooster.com/", - "companyId": "site_booster" - }, - "site_stratos": { - "name": "Site Stratos", - "categoryId": 4, - "url": "http://www.infocube.co.jp/", - "companyId": "infocube" - }, - "siteapps": { - "name": "SiteApps", - "categoryId": 2, - "url": "http://siteapps.com", - "companyId": "siteapps" - }, - "sitebro": { - "name": "SiteBro", - "categoryId": 6, - "url": "http://www.sitebro.net/", - "companyId": "sitebro" - }, - "siteheart": { - "name": "SiteHeart", - "categoryId": 2, - "url": "http://siteheart.com/", - "companyId": "siteheart" - }, - "siteimprove": { - "name": "Siteimprove", - "categoryId": 6, - "url": "http://siteimprove.com", - "companyId": "siteimprove" - }, - "siteimprove_analytics": { - "name": "SiteImprove Analytics", - "categoryId": 6, - "url": "http://siteimprove.com", - "companyId": "siteimprove" - }, - "sitelabweb.com": { - "name": "sitelabweb.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sitemeter": { - "name": "SiteMeter", - "categoryId": 6, - "url": "http://www.sitemeter.com/", - "companyId": "sitemeter,_inc." - }, - "sitescout": { - "name": "SiteScout by Centro", - "categoryId": 4, - "url": "http://www.sitescout.com", - "companyId": "centro" - }, - "sitetag": { - "name": "SiteTag", - "categoryId": 2, - "url": "http://www.sitetag.us/", - "companyId": "sitetag" - }, - "sitewit": { - "name": "SiteWit", - "categoryId": 4, - "url": "http://www.sitewit.com/", - "companyId": "sitewit" - }, - "six_apart_advertising": { - "name": "Six Apart Advertising", - "categoryId": 4, - "url": "http://www.sixapart.com/advertising/", - "companyId": "six_apart" - }, - "sixt-neuwagen.de": { - "name": "sixt-neuwagen.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "skadtec.com": { - "name": "GP One GmbH", - "categoryId": 6, - "url": "http://www.gp-one.com/", - "companyId": null - }, - "skimlinks": { - "name": "SkimLinks", - "categoryId": 4, - "url": "http://www.skimlinks.com/", - "companyId": "skimlinks" - }, - "skroutz": { - "name": "Skroutz", - "categoryId": 6, - "url": "https://www.skroutz.gr/", - "companyId": "skroutz" - }, - "skyglue": { - "name": "SkyGlue", - "categoryId": 6, - "url": "http://www.skyglue.com/", - "companyId": "skyglue_technology" - }, - "skype": { - "name": "Skype", - "categoryId": 2, - "url": "http://www.skype.com", - "companyId": "microsoft" - }, - "skysa": { - "name": "Skysa", - "categoryId": 2, - "url": "http://www.skysa.com/", - "companyId": "skysa" - }, - "skyscnr.com": { - "name": "Skyscanner CDN", - "categoryId": 9, - "url": "https://www.skyscanner.net/", - "companyId": null - }, - "slashdot_widget": { - "name": "Slashdot Widget", - "categoryId": 2, - "url": "http://slashdot.org", - "companyId": "slashdot" - }, - "sleeknote": { - "name": "Sleeknote", - "categoryId": 2, - "url": "https://sleeknote.com/", - "companyId": "sleeknote" - }, - "sli_systems": { - "name": "SLI Systems", - "categoryId": 2, - "url": "http://www.sli-systems.com", - "companyId": "sli_systems" - }, - "slice_factory": { - "name": "Slice Factory", - "categoryId": 2, - "url": "http://www.slicefactory.com/", - "companyId": "slice_factory" - }, - "slimcutmedia": { - "name": "SlimCutMedia", - "categoryId": 6, - "url": "http://www.slimcutmedia.com/", - "companyId": "slimcutmedia" - }, - "slingpic": { - "name": "Slingpic", - "categoryId": 4, - "url": "http://slingpic.com/", - "companyId": "affectv" - }, - "smaato": { - "name": "Smaato", - "categoryId": 4, - "url": "http://www.smaato.com/", - "companyId": "smaato" - }, - "smart4ads": { - "name": "smart4ads", - "categoryId": 4, - "url": "http://www.smart4ads.com", - "companyId": "smart4ads" - }, - "smart_adserver": { - "name": "SMART AdServer", - "categoryId": 4, - "url": "https://smartadserver.com/", - "companyId": "smart_adserver" - }, - "smart_call": { - "name": "Smart Call", - "categoryId": 2, - "url": "https://smartcall.kz/", - "companyId": "smart_call" - }, - "smart_content": { - "name": "Smart Content", - "categoryId": 4, - "url": "http://www.getsmartcontent.com", - "companyId": "get_smart_content" - }, - "smart_device_media": { - "name": "Smart Device Media", - "categoryId": 4, - "url": "http://www.smartdevicemedia.com/", - "companyId": "smart_device_media" - }, - "smart_leads": { - "name": "Smart Leads", - "categoryId": 4, - "url": "http://www.cnt.my/", - "companyId": "smart_leads" - }, - "smart_selling": { - "name": "Smart Selling", - "categoryId": 2, - "url": "https://smartselling.cz/", - "companyId": "smart_selling" - }, - "smartad": { - "name": "smartAD", - "categoryId": 4, - "url": "http://smartad.eu/", - "companyId": "smartad" - }, - "smartbn": { - "name": "SmartBN", - "categoryId": 4, - "url": "http://smartbn.ru/", - "companyId": "smartbn" - }, - "smartclick.net": { - "name": "SmartClick", - "categoryId": 4, - "url": "http://smartclick.net/", - "companyId": null - }, - "smartclip": { - "name": "SmartClip", - "categoryId": 4, - "url": "http://www.smartclip.com/", - "companyId": "smartclip" - }, - "smartcontext": { - "name": "SmartContext", - "categoryId": 4, - "url": "http://smartcontext.pl/", - "companyId": "smartcontext" - }, - "smarter_remarketer": { - "name": "SmarterHQ", - "categoryId": 4, - "url": "https://smarterhq.com", - "companyId": "smarterhq" - }, - "smarter_travel": { - "name": "Smarter Travel Media", - "categoryId": 4, - "url": "https://www.smartertravel.com/", - "companyId": "iac_apps" - }, - "smarterclick": { - "name": "Smarterclick", - "categoryId": 4, - "url": "http://www.smarterclick.co.uk/", - "companyId": "smarter_click" - }, - "smartertrack": { - "name": "SmarterTrack", - "categoryId": 4, - "url": "http://www.smartertrack.com/", - "companyId": "smartertrack" - }, - "smartlink.cool": { - "name": "smartlink.cool", - "categoryId": 11, - "url": null, - "companyId": null - }, - "smartlook": { - "name": "Smartlook", - "categoryId": 2, - "url": "https://www.smartlook.com/", - "companyId": "smartlook" - }, - "smartstream.tv": { - "name": "SmartStream.TV", - "categoryId": 4, - "url": "https://www.smartstream.tv/en", - "companyId": "smartstream" - }, - "smartsupp_chat": { - "name": "Smartsupp Chat", - "categoryId": 2, - "url": "https://www.smartsupp.com/", - "companyId": "smartsuppp" - }, - "smi2.ru": { - "name": "smi2.ru", - "categoryId": 6, - "url": "https://smi2.net/", - "companyId": "media2_stat.media" - }, - "smooch": { - "name": "Smooch", - "categoryId": 2, - "url": "https://smooch.io/", - "companyId": "smooch" - }, - "smowtion": { - "name": "Smowtion", - "categoryId": 4, - "url": "http://www.smowtion.com/", - "companyId": "smowtion" - }, - "smx_ventures": { - "name": "SMX Ventures", - "categoryId": 6, - "url": "http://smxeventures.com/", - "companyId": "smx_ventures" - }, - "smyte": { - "name": "Smyte", - "categoryId": 6, - "url": "https://www.smyte.com/", - "companyId": "smyte" - }, - "snacktv": { - "name": "SnackTV", - "categoryId": 6, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "snacktv_player": { - "name": "SnackTV-Player", - "categoryId": 0, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "snap": { - "name": "Snap", - "categoryId": 2, - "url": "http://www.snap.com/", - "companyId": "snap_technologies" - }, - "snap_engage": { - "name": "Snap Engage", - "categoryId": 2, - "url": "https://snapengage.com/", - "companyId": "snap_engage" - }, - "snapchat": { - "name": "Snapchat For Business", - "categoryId": 4, - "url": "https://www.snapchat.com/", - "companyId": "snap_technologies" - }, - "snigelweb": { - "name": "SnigelWeb, Inc.", - "categoryId": 4, - "url": "http://www.snigelweb.com/", - "companyId": "snigelweb_inc" - }, - "snoobi": { - "name": "Snoobi", - "categoryId": 6, - "url": "http://www.snoobi.eu/", - "companyId": "snoobi" - }, - "snoobi_analytics": { - "name": "Snoobi Analytics", - "categoryId": 6, - "url": "http://www.snoobi.com/", - "companyId": "snoobi_oy" - }, - "snowplow": { - "name": "Snowplow", - "categoryId": 6, - "url": "http://snowplowanalytics.com/", - "companyId": "snowplow" - }, - "soasta_mpulse": { - "name": "SOASTA mPulse", - "categoryId": 6, - "url": "http://www.soasta.com/", - "companyId": "akamai" - }, - "sociable_labs": { - "name": "Sociable Labs", - "categoryId": 4, - "url": "http://www.sociablelabs.com/", - "companyId": "sociable_labs" - }, - "social_amp": { - "name": "Social Amp", - "categoryId": 4, - "url": "http://www.merkleinc.com/", - "companyId": "dentsu_aegis_network" - }, - "social_annex": { - "name": "Social Annex", - "categoryId": 4, - "url": "http://www.socialannex.com", - "companyId": "social_annex" - }, - "social_miner": { - "name": "Social Miner", - "categoryId": 7, - "url": "https://socialminer.com/", - "companyId": "social_miner" - }, - "socialbeat": { - "name": "socialbeat", - "categoryId": 4, - "url": "http://www.socialbeat.it/", - "companyId": "socialbeat" - }, - "socialrms": { - "name": "SocialRMS", - "categoryId": 7, - "url": "http://socialinterface.com/socialrms/", - "companyId": "socialinterface" - }, - "sociaplus.com": { - "name": "SociaPlus", - "categoryId": 6, - "url": "https://sociaplus.com/", - "companyId": null - }, - "sociomantic": { - "name": "Sociomantic", - "categoryId": 4, - "url": "http://www.sociomantic.com/", - "companyId": "sociomantic_labs_gmbh" - }, - "sohu": { - "name": "Sohu", - "categoryId": 7, - "url": "http://www.sohu.com", - "companyId": "sohu" - }, - "sojern": { - "name": "Sojern", - "categoryId": 4, - "url": "http://www.sojern.com/", - "companyId": "sojern" - }, - "sokrati": { - "name": "Sokrati", - "categoryId": 4, - "url": "http://sokrati.com/", - "companyId": "sokrati" - }, - "solads.media": { - "name": "solads.media", - "categoryId": 4, - "url": "http://solads.media/", - "companyId": null - }, - "solidopinion": { - "name": "SolidOpinion", - "categoryId": 2, - "url": "https://solidopinion.com/", - "companyId": "solidopinion" - }, - "solve_media": { - "name": "Solve Media", - "categoryId": 4, - "url": "http://solvemedia.com/", - "companyId": "solve_media" - }, - "soma_2": { - "name": "SOMA 2", - "categoryId": 4, - "url": "http://www.webcombi.de/", - "companyId": "soma_2_gmbh" - }, - "somoaudience": { - "name": "SoMo Audience", - "categoryId": 4, - "url": "https://somoaudience.com/", - "companyId": "somoaudience" - }, - "sonobi": { - "name": "Sonobi", - "categoryId": 4, - "url": "http://sonobi.com/", - "companyId": "sonobi" - }, - "sophus3": { - "name": "Sophus3", - "categoryId": 4, - "url": "http://www.sophus3.com/", - "companyId": "sophus3" - }, - "sortable": { - "name": "Sortable", - "categoryId": 4, - "url": "https://sortable.com/", - "companyId": "sortable" - }, - "soundcloud": { - "name": "SoundCloud", - "categoryId": 0, - "url": "http://soundcloud.com/", - "companyId": "soundcloud" - }, - "sourceknowledge_pixel": { - "name": "SourceKnowledge Pixel", - "categoryId": 4, - "url": "http://www.provenpixel.com/", - "companyId": "sourceknowledge" - }, - "sourcepoint": { - "name": "Sourcepoint", - "categoryId": 4, - "url": "https://www.sourcepoint.com/", - "companyId": "sourcepoint" - }, - "sovrn": { - "name": "sovrn", - "categoryId": 4, - "url": "https://www.sovrn.com/", - "companyId": "sovrn" - }, - "sovrn_viewability_solutions": { - "name": "Sovrn Signal", - "categoryId": 4, - "url": "https://www.sovrn.com/publishers/signal/", - "companyId": "sovrn" - }, - "spark_studios": { - "name": "Spark Studios", - "categoryId": 0, - "url": "http://www.sparkstudios.com/", - "companyId": "spark_studios" - }, - "sparkasse.de": { - "name": "sparkasse.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "speakpipe": { - "name": "SpeakPipe", - "categoryId": 2, - "url": "http://www.speakpipe.com/", - "companyId": "speakpipe" - }, - "specific_media": { - "name": "Specific Media", - "categoryId": 4, - "url": "http://www.specificmedia.com", - "companyId": "specific_media" - }, - "spectate": { - "name": "Spectate", - "categoryId": 6, - "url": "http://spectate.com/", - "companyId": "spectate" - }, - "speed_shift_media": { - "name": "Speed Shift Media", - "categoryId": 4, - "url": "http://www.speedshiftmedia.com/", - "companyId": "speed_shift_media" - }, - "speedcurve": { - "name": "SpeedCurve", - "categoryId": 6, - "url": "https://speedcurve.com/", - "companyId": null - }, - "speedyads": { - "name": "SpeedyAds", - "categoryId": 4, - "url": "http://www.entireweb.com/speedyads/", - "companyId": "entireweb" - }, - "speee": { - "name": "Speee", - "categoryId": 4, - "url": "https://speee.jp", - "companyId": "speee" - }, - "sphere": { - "name": "Sphere", - "categoryId": 4, - "url": "http://www.sphere.com/", - "companyId": "verizon" - }, - "spheremall": { - "name": "SphereMall", - "categoryId": 6, - "url": "https://spheremall.com", - "companyId": "spheremall" - }, - "sphereup": { - "name": "SphereUp", - "categoryId": 2, - "url": "http://zoomd.com/", - "companyId": "zoomd" - }, - "spicy": { - "name": "Spicy", - "categoryId": 4, - "url": "http://sspicy.ru/#main", - "companyId": "spicy_ssp" - }, - "spider.ad": { - "name": "Spider.Ad", - "categoryId": 4, - "url": "http://spider.ad/", - "companyId": "spider.ad" - }, - "spider_ads": { - "name": "Spider Ads", - "categoryId": 4, - "url": "http://www.spiderads.eu/", - "companyId": "spiderads" - }, - "spinnakr": { - "name": "Spinnakr", - "categoryId": 6, - "url": "http://spinnakr.com/", - "companyId": "spinnakr" - }, - "spokenlayer": { - "name": "SpokenLayer", - "categoryId": 0, - "url": "http://www.spokenlayer.com", - "companyId": "spokenlayer" - }, - "spongecell": { - "name": "Spongecell", - "categoryId": 4, - "url": "http://www.spongecell.com/", - "companyId": "spongecell" - }, - "sponsorads.de": { - "name": "SponsorAds.de", - "categoryId": 4, - "url": "http://sponsorads.de", - "companyId": "sponsorads.de" - }, - "sportsbet_affiliates": { - "name": "Sportsbet Affiliates", - "categoryId": 4, - "url": "http://www.sportsbetaffiliates.com.au/", - "companyId": "sportsbet_affiliates" - }, - "spot.im": { - "name": "Spot.IM", - "categoryId": 7, - "url": "https://www.spot.im/", - "companyId": "spot.im" - }, - "spoteffect": { - "name": "Spoteffect", - "categoryId": 6, - "url": "http://www.spoteffects.com/home/", - "companyId": "spoteffect" - }, - "spotify": { - "name": "Spotify", - "categoryId": 0, - "url": "https://www.spotify.com/", - "companyId": "spotify" - }, - "spotify_embed": { - "name": "Spotify Embed", - "categoryId": 0, - "url": "https://www.spotify.com", - "companyId": "spotify" - }, - "spotscenered.info": { - "name": "spotscenered.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "spotxchange": { - "name": "SpotX", - "categoryId": 4, - "url": "https://www.spotx.tv/", - "companyId": "rtl_group" - }, - "spoutable": { - "name": "Spoutable", - "categoryId": 4, - "url": "http://spoutable.com/", - "companyId": "spoutable" - }, - "springboard": { - "name": "SpringBoard", - "categoryId": 4, - "url": "http://home.springboardplatform.com/", - "companyId": "springboard" - }, - "springserve": { - "name": "SpringServe", - "categoryId": 4, - "url": "http://springserve.com/", - "companyId": "springserve" - }, - "sprinklr": { - "name": "Sprinklr", - "categoryId": 4, - "url": "https://www.sprinklr.com/", - "companyId": "sprinklr" - }, - "sputnik": { - "name": "Sputnik", - "categoryId": 6, - "url": "https://cnt.sputnik.ru/", - "companyId": "sputnik" - }, - "squadata": { - "name": "Squadata", - "categoryId": 4, - "url": "http://www.email-match.net/", - "companyId": "squadata" - }, - "squarespace.com": { - "name": "Squarespace", - "categoryId": 6, - "url": "https://www.squarespace.com/", - "companyId": null - }, - "srvtrck.com": { - "name": "srvtrck.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "srvvtrk.com": { - "name": "srvvtrk.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sstatic.net": { - "name": "Stack Exchange", - "categoryId": 9, - "url": "https://sstatic.net/", - "companyId": null - }, - "st-hatena": { - "name": "Hatena", - "categoryId": 7, - "url": "http://www.hatena.ne.jp/", - "companyId": "hatena_jp" - }, - "stackadapt": { - "name": "StackAdapt", - "categoryId": 4, - "url": "http://www.stackadapt.com/", - "companyId": "stackadapt" - }, - "stackpathdns.com": { - "name": "StackPath", - "categoryId": 9, - "url": "https://www.stackpath.com/", - "companyId": null - }, - "stailamedia_com": { - "name": "stailamedia.com", - "categoryId": 4, - "url": "http://stailamedia.com/", - "companyId": null - }, - "stalluva.pro": { - "name": "stalluva.pro", - "categoryId": 11, - "url": null, - "companyId": null - }, - "startapp": { - "name": "StartApp", - "categoryId": 4, - "url": "https://www.startapp.com/", - "companyId": null - }, - "stat24": { - "name": "Stat24", - "categoryId": 6, - "url": "http://www.stat24.com/en/", - "companyId": "stat24" - }, - "stat4u": { - "name": "stat4u", - "categoryId": 6, - "url": "http://stat.4u.pl/", - "companyId": "stat4u" - }, - "statcounter": { - "name": "Statcounter", - "categoryId": 6, - "url": "http://www.statcounter.com/", - "companyId": "statcounter" - }, - "stathat": { - "name": "StatHat", - "categoryId": 6, - "url": "http://www.stathat.com/", - "companyId": "stathat" - }, - "statisfy": { - "name": "Statisfy", - "categoryId": 6, - "url": "http://www.statisfy.com/", - "companyId": "statisfy" - }, - "statsy.net": { - "name": "statsy.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "statuscake": { - "name": "StatusCake", - "categoryId": 6, - "url": "https://www.statuscake.com/", - "companyId": "statuscake" - }, - "statuspage.io": { - "name": "Statuspage", - "categoryId": 2, - "url": "https://www.statuspage.io/", - "companyId": "atlassian" - }, - "stayfriends.de": { - "name": "stayfriends.de", - "categoryId": 8, - "url": "https://www.stayfriends.de/", - "companyId": null - }, - "steelhouse": { - "name": "Steel House Media", - "categoryId": 4, - "url": "https://steelhouse.com/", - "companyId": "steelhouse" - }, - "steepto.com": { - "name": "Steepto", - "categoryId": 4, - "url": "https://www.steepto.com/", - "companyId": null - }, - "stepstone.com": { - "name": "StepStone", - "categoryId": 8, - "url": "https://www.stepstone.com/", - "companyId": null - }, - "stetic": { - "name": "Stetic", - "categoryId": 6, - "url": "https://www.stetic.com/", - "companyId": "stetic" - }, - "stickyads": { - "name": "StickyAds", - "categoryId": 4, - "url": "http://corporate.comcast.com/", - "companyId": "comcast" - }, - "stocktwits": { - "name": "StockTwits", - "categoryId": 2, - "url": "http://stocktwits.com", - "companyId": "stocktwits" - }, - "storify": { - "name": "Storify", - "categoryId": 4, - "url": "https://storify.com/", - "companyId": "adobe" - }, - "storygize": { - "name": "Storygize", - "categoryId": 4, - "url": "http://www.storygize.com/", - "companyId": null - }, - "strands_recommender": { - "name": "Strands Recommender", - "categoryId": 4, - "url": "http://recommender.strands.com", - "companyId": "strands" - }, - "strava": { - "name": "Strava", - "categoryId": 6, - "url": "https://strava.com", - "companyId": "strava" - }, - "streak": { - "name": "Streak", - "categoryId": 2, - "url": "http://www.streak.com/", - "companyId": "streak" - }, - "streamrail.com": { - "name": "StreamRail", - "categoryId": 4, - "url": "https://www.streamrail.com/", - "companyId": "ironsource" - }, - "stride": { - "name": "Stride", - "categoryId": 6, - "url": "https://www.getstride.com/", - "companyId": "stride_software" - }, - "stripchat.com": { - "name": "stripchat.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "stripe.com": { - "name": "Stripe", - "categoryId": 2, - "url": "https://stripe.com/", - "companyId": null - }, - "stripst.com": { - "name": "stripst.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "stroer_digital_media": { - "name": "Stroer Digital Media", - "categoryId": 4, - "url": "http://www.stroeer.de/", - "companyId": "stroer" - }, - "strossle": { - "name": "Strossle", - "categoryId": 4, - "url": "https://strossle.com/", - "companyId": "strossle" - }, - "struq": { - "name": "Struq", - "categoryId": 4, - "url": "http://www.struq.com/", - "companyId": "quantcast" - }, - "stumbleupon_widgets": { - "name": "StumbleUpon Widgets", - "categoryId": 7, - "url": "http://www.stumbleupon.com/", - "companyId": "stumbleupon" - }, - "sub2": { - "name": "Sub2", - "categoryId": 4, - "url": "http://www.sub2tech.com/", - "companyId": "sub2" - }, - "sublime_skinz": { - "name": "Sublime", - "categoryId": 4, - "url": "https://sublimeskinz.com/home", - "companyId": "sublime_skinz" - }, - "suggest.io": { - "name": "Suggest.io", - "categoryId": 4, - "url": "https://suggest.io/", - "companyId": "suggest.io" - }, - "sumologic.com": { - "name": "Sumologic", - "categoryId": 6, - "url": "https://www.sumologic.com/", - "companyId": null - }, - "sumome": { - "name": "Sumo", - "categoryId": 6, - "url": "https://sumo.com/", - "companyId": "sumome" - }, - "sundaysky": { - "name": "SundaySky", - "categoryId": 4, - "url": "http://www.sundaysky.com/", - "companyId": "sundaysky" - }, - "supercounters": { - "name": "SuperCounters", - "categoryId": 6, - "url": "http://www.supercounters.com/", - "companyId": "supercounters" - }, - "superfastcdn.com": { - "name": "superfastcdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "supership": { - "name": "Supership", - "categoryId": 4, - "url": "https://supership.jp/en/", - "companyId": "supership" - }, - "supplyframe": { - "name": "SupplyFrame", - "categoryId": 4, - "url": "https://supplyframe.com/", - "companyId": "supplyframe" - }, - "surf_by_surfingbird": { - "name": "Surf by Surfingbird", - "categoryId": 2, - "url": "http://surfingbird.ru/", - "companyId": "surfingbird" - }, - "survata": { - "name": "Survata", - "categoryId": 4, - "url": "https://www.survata.com/", - "companyId": "survata" - }, - "sweettooth": { - "name": "Sweettooth", - "categoryId": 2, - "url": "https://www.sweettoothrewards.com/", - "companyId": "sweet_tooth_rewards" - }, - "swiftype": { - "name": "Swiftype", - "categoryId": 9, - "url": "https://swiftype.com/", - "companyId": "elastic" - }, - "swisscom": { - "name": "Swisscom", - "categoryId": 8, - "url": null, - "companyId": null - }, - "switch_concepts": { - "name": "Switch Concepts", - "categoryId": 4, - "url": "http://www.switchconcepts.co.uk/", - "companyId": "switch_concepts" - }, - "swoop": { - "name": "Swoop", - "categoryId": 4, - "url": "http://swoop.com/", - "companyId": "swoop" - }, - "sykes": { - "name": "Sykes", - "categoryId": 6, - "url": "http://www.sykescottages.co.uk/", - "companyId": "sykes_cottages" - }, - "symantec": { - "name": "Symantec (Norton Secured Seal)", - "categoryId": 5, - "url": "https://www.symantec.com/page.jsp?id=ssl-resources&tabID=3#", - "companyId": "symantec" - }, - "symphony_talent": { - "name": "Symphony Talent", - "categoryId": 2, - "url": "http://www.symphonytalent.com/", - "companyId": "symphony_talent" - }, - "synacor": { - "name": "Synacor", - "categoryId": 4, - "url": "https://www.synacor.com/", - "companyId": "synacor" - }, - "syncapse": { - "name": "Syncapse", - "categoryId": 4, - "url": "http://www.clickable.com/", - "companyId": "syncapse" - }, - "synergy-e": { - "name": "Synergy-E", - "categoryId": 4, - "url": "http://synergy-e.com/", - "companyId": "synergy-e" - }, - "t-mobile": { - "name": "Deutsche Telekom", - "categoryId": 8, - "url": null, - "companyId": null - }, - "t8cdn.com": { - "name": "t8cdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "tableteducation.com": { - "name": "tableteducation.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "taboola": { - "name": "Taboola", - "categoryId": 4, - "url": "http://www.taboola.com", - "companyId": "taboola" - }, - "tacoda": { - "name": "Tacoda", - "categoryId": 4, - "url": "http://www.tacoda.com/", - "companyId": "verizon" - }, - "tag_commander": { - "name": "Commanders Act", - "categoryId": 5, - "url": "https://www.commandersact.com/en/", - "companyId": "tag_commander" - }, - "tagcade": { - "name": "Tagcade", - "categoryId": 4, - "url": "https://www.pubvantage.com/", - "companyId": "pubvantage" - }, - "taggify": { - "name": "Taggify", - "categoryId": 4, - "url": "http://new.taggify.net/", - "companyId": "taggify" - }, - "taggy": { - "name": "TAGGY", - "categoryId": 4, - "url": "http://taggy.jp/", - "companyId": "taggy" - }, - "tagman": { - "name": "TagMan", - "categoryId": 5, - "url": "http://www.tagman.com/", - "companyId": "ensighten" - }, - "tail_target": { - "name": "Tail", - "categoryId": 6, - "url": "https://www.tail.digital/", - "companyId": "tail.digital" - }, - "tailsweep": { - "name": "Tailsweep", - "categoryId": 4, - "url": "http://www.tailsweep.se/", - "companyId": "tailsweep" - }, - "tamedia.ch": { - "name": "Tamedia", - "categoryId": 4, - "url": "https://www.tamedia.ch/", - "companyId": null - }, - "tanx": { - "name": "Tanx", - "categoryId": 4, - "url": "http://tanx.com/", - "companyId": "tanx" - }, - "taobao": { - "name": "Taobao", - "categoryId": 4, - "url": "https://world.taobao.com/", - "companyId": "alibaba" - }, - "tapad": { - "name": "Tapad", - "categoryId": 4, - "url": "http://www.tapad.com/", - "companyId": "telenor" - }, - "tapinfluence": { - "name": "TapInfluence", - "categoryId": 4, - "url": "http://theblogfrog.com/", - "companyId": "tapinfluence" - }, - "tarafdari": { - "name": "Tarafdari", - "categoryId": 4, - "url": "https://www.tarafdari.com/", - "companyId": "tarafdari" - }, - "target_2_sell": { - "name": "Target 2 Sell", - "categoryId": 4, - "url": "http://www.target2sell.com/en/", - "companyId": "target_2_sell" - }, - "target_circle": { - "name": "Target Circle", - "categoryId": 6, - "url": "http://targetcircle.com", - "companyId": "target_circle" - }, - "target_fuel": { - "name": "Target Fuel", - "categoryId": 6, - "url": "http://targetfuel.com/", - "companyId": "target_fuel" - }, - "tawk": { - "name": "Tawk", - "categoryId": 2, - "url": "https://www.tawk.to/", - "companyId": "tawk" - }, - "tbn.ru": { - "name": "TBN.ru", - "categoryId": 4, - "url": "http://www.agava.ru", - "companyId": "agava" - }, - "tchibo_de": { - "name": "tchibo.de", - "categoryId": 8, - "url": "http://tchibo.de/", - "companyId": null - }, - "tdsrmbl_net": { - "name": "tdsrmbl.net", - "categoryId": 8, - "url": null, - "companyId": null - }, - "teads": { - "name": "Teads", - "categoryId": 4, - "url": "http://teads.tv/", - "companyId": "teads" - }, - "tealeaf": { - "name": "Tealeaf", - "categoryId": 6, - "url": "https://www.ibm.com/digital-marketing", - "companyId": "ibm" - }, - "tealium": { - "name": "Tealium", - "categoryId": 5, - "url": "http://www.tealium.com/", - "companyId": "tealium" - }, - "teaser.cc": { - "name": "Teaser.cc", - "categoryId": 4, - "url": "http://www.teaser.cc/", - "companyId": "teaser.cc" - }, - "tedemis": { - "name": "Tedemis", - "categoryId": 4, - "url": "http://www.tedemis.com", - "companyId": "tedemis" - }, - "teletech": { - "name": "TeleTech", - "categoryId": 4, - "url": "http://www.webmetro.com/whoweare/technology.aspx", - "companyId": "teletech" - }, - "tender": { - "name": "Tender", - "categoryId": 2, - "url": "http://www.tenderapp.com/", - "companyId": "tender" - }, - "tensitionschoo.club": { - "name": "tensitionschoo.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "teroti": { - "name": "Teroti", - "categoryId": 4, - "url": "http://www.teroti.com/", - "companyId": "teroti" - }, - "terren": { - "name": "Terren", - "categoryId": 4, - "url": "http://www.webterren.com/", - "companyId": "terren" - }, - "teufel.de": { - "name": "teufel.de", - "categoryId": 8, - "url": "https://www.teufel.de/", - "companyId": null - }, - "the_adex": { - "name": "The ADEX", - "categoryId": 4, - "url": "http://www.theadex.com/", - "companyId": "prosieben_sat1" - }, - "the_deck": { - "name": "The DECK", - "categoryId": 4, - "url": "http://decknetwork.net/", - "companyId": "the_deck" - }, - "the_guardian": { - "name": "The Guardian", - "categoryId": 8, - "url": "https://www.theguardian.com/", - "companyId": "the_guardian" - }, - "the_reach_group": { - "name": "The Reach Group", - "categoryId": 4, - "url": "http://www.redvertisment.com", - "companyId": "the_reach_group" - }, - "the_search_agency": { - "name": "The Search Agency", - "categoryId": 4, - "url": "http://www.thesearchagency.com/", - "companyId": "the_search_agency" - }, - "the_sun": { - "name": "The Sun", - "categoryId": 8, - "url": "https://www.thesun.co.uk/", - "companyId": "the_sun" - }, - "the_weather_company": { - "name": "The Weather Company", - "categoryId": 4, - "url": "http://www.theweathercompany.com/", - "companyId": "ibm" - }, - "themoviedb": { - "name": "The Movie DB", - "categoryId": 8, - "url": "https://www.themoviedb.org/", - "companyId": "themoviedb" - }, - "thinglink": { - "name": "ThingLink", - "categoryId": 4, - "url": "http://www.thinglink.com/", - "companyId": "thinglink" - }, - "threatmetrix": { - "name": "ThreatMetrix", - "categoryId": 6, - "url": "http://threatmetrix.com/", - "companyId": "threatmetrix" - }, - "tidbit": { - "name": "Tidbit", - "categoryId": 2, - "url": "http://tidbit.co.in/", - "companyId": "tidbit" - }, - "tidio": { - "name": "Tidio", - "categoryId": 2, - "url": "https://www.tidio.com/", - "companyId": "tidio_chat" - }, - "tiktok_analytics": { - "name": "TikTok Analytics", - "categoryId": 6, - "url": "https://analytics.tiktok.com", - "companyId": "bytedance_inc" - }, - "tiller": { - "name": "Tiller", - "categoryId": 4, - "url": "https://www.tiller.com/", - "companyId": "tiller" - }, - "timezondb": { - "name": "TimezonDB", - "categoryId": 4, - "url": "https://timezonedb.com/", - "companyId": "timezonedb" - }, - "tinypass": { - "name": "Piano", - "categoryId": 5, - "url": "https://piano.io/", - "companyId": "piano" - }, - "tisoomi": { - "name": "Tisoomi", - "categoryId": 4, - "url": "https://tisoomi-services.com/", - "companyId": null - }, - "tlv_media": { - "name": "TLV Media", - "categoryId": 4, - "url": "http://www.tlvmedia.com", - "companyId": "tlvmedia" - }, - "tns": { - "name": "TNS", - "categoryId": 6, - "url": "http://www.tnsglobal.com/", - "companyId": "wpp" - }, - "tomnewsupdate.info": { - "name": "tomnewsupdate.info", - "categoryId": 12, - "url": null, - "companyId": null - }, - "tomorrow_focus": { - "name": "Tomorrow Focus", - "categoryId": 4, - "url": "http://www.tomorrow-focus.com", - "companyId": "hubert_burda_media" - }, - "tonefuse": { - "name": "ToneFuse", - "categoryId": 4, - "url": "http://www.tonefuse.com/", - "companyId": "tonefuse" - }, - "top_mail": { - "name": "Top Mail", - "categoryId": 6, - "url": "https://corp.megafon.com/", - "companyId": "megafon" - }, - "toplist.cz": { - "name": "toplist.cz", - "categoryId": 11, - "url": null, - "companyId": null - }, - "toponclick_com": { - "name": "toponclick.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "topsy": { - "name": "Topsy", - "categoryId": 4, - "url": "http://topsy.com/", - "companyId": "topsy" - }, - "torbit": { - "name": "Torbit", - "categoryId": 6, - "url": "http://torbit.com/", - "companyId": "torbit" - }, - "toro": { - "name": "TORO", - "categoryId": 4, - "url": "http://toroadvertising.com/", - "companyId": "toro_advertising" - }, - "tororango.com": { - "name": "tororango.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "total_media": { - "name": "Total Media", - "categoryId": 4, - "url": "http://www.totalmedia.co.il/eng/", - "companyId": "total_media" - }, - "touchcommerce": { - "name": "Nuance", - "categoryId": 2, - "url": "https://www.nuance.com/omni-channel-customer-engagement/digital.html", - "companyId": "touchcommerce" - }, - "tovarro.com": { - "name": "Tovarro", - "categoryId": 4, - "url": "https://www.tovarro.com/", - "companyId": null - }, - "tp-cdn.com": { - "name": "TrialPay", - "categoryId": 4, - "url": "https://www.trialpay.com/", - "companyId": null - }, - "tracc.it": { - "name": "Kiwe.io", - "categoryId": 6, - "url": "https://www.kiwe.io/", - "companyId": null - }, - "tracemyip": { - "name": "TraceMyIP", - "categoryId": 4, - "url": "http://www.tracemyip.org/", - "companyId": "tracemyip" - }, - "traceview": { - "name": "TraceView", - "categoryId": 6, - "url": "http://www.appneta.com/", - "companyId": "appneta" - }, - "track_duck": { - "name": "Track Duck", - "categoryId": 6, - "url": "https://trackduck.com/", - "companyId": "track_duck" - }, - "trackjs": { - "name": "TrackJS", - "categoryId": 6, - "url": "http://www.trackjs.com/", - "companyId": "trackjs" - }, - "trackset_conversionlab": { - "name": "Trackset ConversionLab", - "categoryId": 4, - "url": "http://www.trackset.com/", - "companyId": "trackset" - }, - "trackuity": { - "name": "Trackuity", - "categoryId": 2, - "url": "http://www.trackuity.com/", - "companyId": "trackuity" - }, - "tradedesk": { - "name": "TradeDesk", - "categoryId": 4, - "url": "http://www.thetradedesk.com/", - "companyId": "the_trade_desk" - }, - "tradedoubler": { - "name": "TradeDoubler", - "categoryId": 4, - "url": "http://www.tradedoubler.com/", - "companyId": "tradedoubler" - }, - "tradelab": { - "name": "Tradelab", - "categoryId": 4, - "url": "http://www.tradelab.fr/", - "companyId": "tradelab" - }, - "tradetracker": { - "name": "TradeTracker", - "categoryId": 4, - "url": "http://www.tradetracker.com", - "companyId": "tradetracker" - }, - "traffective": { - "name": "Traffective", - "categoryId": 4, - "url": "https://traffective.com/", - "companyId": null - }, - "traffic_fuel": { - "name": "Traffic Fuel", - "categoryId": 4, - "url": "https://trafficfuel.com/", - "companyId": "traffic_fuel" - }, - "traffic_revenue": { - "name": "Traffic Revenue", - "categoryId": 4, - "url": "http://www.trafficrevenue.net/", - "companyId": "traffic_revenue" - }, - "traffic_stars": { - "name": "Traffic Stars", - "categoryId": 3, - "url": "https://trafficstars.com/#index_page", - "companyId": "traffic_stars" - }, - "trafficbroker": { - "name": "TrafficBroker", - "categoryId": 4, - "url": "http://trafficbroker.com/", - "companyId": "trafficbroker" - }, - "trafficfabrik.com": { - "name": "Traffic Fabrik", - "categoryId": 3, - "url": "https://www.trafficfabrik.com/", - "companyId": null - }, - "trafficfactory": { - "name": "Traffic Factory", - "categoryId": 4, - "url": "https://www.trafficfactory.biz/", - "companyId": null - }, - "trafficforce": { - "name": "TrafficForce", - "categoryId": 4, - "url": "http://www.trafficforce.com/", - "companyId": "trafficforce" - }, - "traffichaus": { - "name": "TrafficHaus", - "categoryId": 3, - "url": "http://www.traffichaus.com", - "companyId": "traffichaus" - }, - "trafficjunky": { - "name": "TrafficJunky", - "categoryId": 3, - "url": "http://www.trafficjunky.net/", - "companyId": "trafficjunky" - }, - "traffiliate": { - "name": "Traffiliate", - "categoryId": 4, - "url": "http://www.traffiliate.com/", - "companyId": "dsnr_media_group" - }, - "trafic": { - "name": "Trafic", - "categoryId": 6, - "url": "http://www.trafic.ro/", - "companyId": "trafic" - }, - "trafmag.com": { - "name": "TrafMag", - "categoryId": 4, - "url": "https://trafmag.com/", - "companyId": "trafmag" - }, - "transcend": { - "name": "Transcend Consent", - "categoryId": 14, - "url": "https://transcend.io/consent/", - "companyId": "transcend" - }, - "transcend_telemetry": { - "name": "Transcend Telemetry", - "categoryId": 6, - "url": "https://transcend.io", - "companyId": "transcend" - }, - "transmatic": { - "name": "Transmatic", - "categoryId": 6, - "url": "http://www.transmatico.com/en/", - "companyId": "transmatico" - }, - "travel_audience": { - "name": "Travel Audience", - "categoryId": 6, - "url": "https://travelaudience.com/", - "companyId": "travel_audience" - }, - "trbo": { - "name": "trbo", - "categoryId": 4, - "url": "http://www.trbo.com/", - "companyId": "trbo" - }, - "treasuredata": { - "name": "Treasure Data", - "categoryId": 6, - "url": "https://www.treasuredata.com/", - "companyId": "arm" - }, - "tremor_video": { - "name": "Tremor Video", - "categoryId": 0, - "url": "http://www.tremormedia.com/", - "companyId": "tremor_video" - }, - "trendcounter": { - "name": "trendcounter", - "categoryId": 6, - "url": "http://www.trendcounter.com/", - "companyId": "trendcounter" - }, - "trendemon": { - "name": "TrenDemon", - "categoryId": 6, - "url": "http://trendemon.com", - "companyId": "trendemon" - }, - "tribal_fusion": { - "name": "Tribal Fusion", - "categoryId": 4, - "url": "http://www.tribalfusion.com/", - "companyId": "exponential_interactive" - }, - "tribal_fusion_notice": { - "name": "Tribal Fusion Notice", - "categoryId": 4, - "url": "http://www.tribalfusion.com", - "companyId": "exponential_interactive" - }, - "triblio": { - "name": "Triblio", - "categoryId": 6, - "url": "https://triblio.com/", - "companyId": "triblio" - }, - "trigger_mail_marketing": { - "name": "Trigger Mail Marketing", - "categoryId": 4, - "url": "http://www.triggeremailmarketing.com/", - "companyId": "trigger_mail_marketing" - }, - "triggerbee": { - "name": "Triggerbee", - "categoryId": 2, - "url": "https://triggerbee.com/", - "companyId": "triggerbee" - }, - "tripadvisor": { - "name": "TripAdvisor", - "categoryId": 8, - "url": "http://iac.com/", - "companyId": "iac_apps" - }, - "triplelift": { - "name": "TripleLift", - "categoryId": 4, - "url": "http://triplelift.com/", - "companyId": "triplelift" - }, - "triptease": { - "name": "Triptease", - "categoryId": 2, - "url": "https://www.triptease.com", - "companyId": "triptease" - }, - "triton_digital": { - "name": "Triton Digital", - "categoryId": 0, - "url": "http://www.tritondigital.com/", - "companyId": "triton_digital" - }, - "trovus_revelations": { - "name": "Trovus Revelations", - "categoryId": 4, - "url": "http://www.trovus.co.uk/", - "companyId": "trovus_revelations" - }, - "trsv3.com": { - "name": "trsv3.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "true_fit": { - "name": "True Fit", - "categoryId": 4, - "url": "https://www.truefit.com/", - "companyId": "true_fit" - }, - "trueanthem": { - "name": "True Anthem", - "categoryId": 4, - "url": "https://www.trueanthem.com/", - "companyId": "trueanthem" - }, - "trueffect": { - "name": "TruEffect", - "categoryId": 4, - "url": "http://www.trueffect.com/", - "companyId": "trueffect" - }, - "truehits.net": { - "name": "Truehits.net", - "categoryId": 6, - "url": "http://truehits.net/", - "companyId": "truehits.net" - }, - "trumba": { - "name": "Trumba", - "categoryId": 4, - "url": "http://www.trumba.com", - "companyId": "trumba" - }, - "truoptik": { - "name": "Tru Optik", - "categoryId": 6, - "url": "http://truoptik.com/", - "companyId": null - }, - "trustarc": { - "name": "TrustArc", - "categoryId": 5, - "url": "http://www.trustarc.com/", - "companyId": "trustarc" - }, - "truste_consent": { - "name": "Truste Consent", - "categoryId": 5, - "url": "http://www.trustarc.com/", - "companyId": "trustarc" - }, - "truste_notice": { - "name": "TRUSTe Notice", - "categoryId": 5, - "url": "http://www.truste.com/", - "companyId": "trustarc" - }, - "truste_seal": { - "name": "TRUSTe Seal", - "categoryId": 5, - "url": "http://www.truste.com/", - "companyId": "trustarc" - }, - "trusted_shops": { - "name": "Trusted Shops", - "categoryId": 5, - "url": "http://www.trustedshops.com/", - "companyId": "trusted_shops" - }, - "trustev": { - "name": "Trustev", - "categoryId": 6, - "url": "http://www.trustev.com/", - "companyId": "trustev" - }, - "trustlogo": { - "name": "TrustLogo", - "categoryId": 5, - "url": "http://www.comodo.com/", - "companyId": "comodo" - }, - "trustpilot": { - "name": "Trustpilot", - "categoryId": 2, - "url": "http://www.trustpilot.com", - "companyId": "trustpilot" - }, - "trustwave.com": { - "name": "Trustwave", - "categoryId": 8, - "url": "https://www.trustwave.com/home/", - "companyId": null - }, - "tubecorporate": { - "name": "Tube Corporate", - "categoryId": 3, - "url": "https://tubecorporate.com/", - "companyId": null - }, - "tubecup.org": { - "name": "tubecup.org", - "categoryId": 3, - "url": null, - "companyId": null - }, - "tubemogul": { - "name": "TubeMogul", - "categoryId": 4, - "url": "http://tubemogul.com/", - "companyId": "tubemogul" - }, - "tumblr_analytics": { - "name": "Tumblr Analytics", - "categoryId": 6, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "tumblr_buttons": { - "name": "Tumblr Buttons", - "categoryId": 7, - "url": "http://www.tumblr.com/", - "companyId": "verizon" - }, - "tumblr_dashboard": { - "name": "Tumblr Dashboard", - "categoryId": 7, - "url": "http://www.tumblr.com/", - "companyId": "verizon" - }, - "tune_in": { - "name": "Tune In", - "categoryId": 0, - "url": "http://tunein.com/", - "companyId": "tunein" - }, - "turbo": { - "name": "Turbo", - "categoryId": 4, - "url": "http://www.turboadv.com/", - "companyId": "turbo" - }, - "turn_inc.": { - "name": "Turn Inc.", - "categoryId": 4, - "url": "https://www.amobee.com/company/", - "companyId": "singtel" - }, - "turner": { - "name": "Warner Media", - "categoryId": 6, - "url": "https://www.warnermedia.com/", - "companyId": "turner" - }, - "turnsocial": { - "name": "TurnSocial", - "categoryId": 7, - "url": "http://turnsocial.com/", - "companyId": "turnsocial" - }, - "turnto": { - "name": "TurnTo", - "categoryId": 2, - "url": "http://www.turntonetworks.com/", - "companyId": "turnto_networks" - }, - "tvsquared.com": { - "name": "TVSquared", - "categoryId": 4, - "url": "http://tvsquared.com/", - "companyId": "tvsquared" - }, - "tweetboard": { - "name": "Tweetboard", - "categoryId": 7, - "url": "http://tweetboard.com/alpha/", - "companyId": "tweetboard" - }, - "tweetmeme": { - "name": "TweetMeme", - "categoryId": 7, - "url": "http://tweetmeme.com/", - "companyId": "tweetmeme" - }, - "twenga": { - "name": "Twenga Solutions", - "categoryId": 4, - "url": "https://www.twenga-solutions.com/", - "companyId": null - }, - "twiago": { - "name": "Twiago", - "categoryId": 4, - "url": "https://www.twiago.com/", - "companyId": "twiago" - }, - "twine": { - "name": "Twine", - "categoryId": 6, - "url": "http://twinedigital.com/", - "companyId": "twine_digital" - }, - "twitch.tv": { - "name": "Twitch", - "categoryId": 0, - "url": "https://www.twitch.tv/", - "companyId": "amazon_associates" - }, - "twitch_cdn": { - "name": "Twitch CDN", - "categoryId": 0, - "url": "https://www.twitch.tv/", - "companyId": "amazon_associates" - }, - "twitter": { - "name": "Twitter", - "categoryId": 7, - "url": "https://twitter.com", - "companyId": "twitter" - }, - "twitter_ads": { - "name": "Twitter Advertising", - "categoryId": 4, - "url": "http://twitter.com/widgets", - "companyId": "twitter" - }, - "twitter_analytics": { - "name": "Twitter Analytics", - "categoryId": 6, - "url": "https://twitter.com", - "companyId": "twitter" - }, - "twitter_badge": { - "name": "Twitter Badge", - "categoryId": 7, - "url": "http://twitter.com/widgets", - "companyId": "twitter" - }, - "twitter_button": { - "name": "Twitter Button", - "categoryId": 7, - "url": "http://twitter.com", - "companyId": "twitter" - }, - "twitter_conversion_tracking": { - "name": "Twitter Conversion Tracking", - "categoryId": 4, - "url": "https://twitter.com/", - "companyId": "twitter" - }, - "twitter_for_business": { - "name": "Twitter for Business", - "categoryId": 4, - "url": "https://business.twitter.com/", - "companyId": "twitter" - }, - "twitter_syndication": { - "name": "Twitter Syndication", - "categoryId": 7, - "url": "https://twitter.com", - "companyId": "twitter" - }, - "twittercounter": { - "name": "TwitterCounter", - "categoryId": 6, - "url": "http://twittercounter.com/", - "companyId": "twitter_counter" - }, - "twyn": { - "name": "Twyn", - "categoryId": 4, - "url": "http://www.twyn.com", - "companyId": "twyn" - }, - "txxx.com": { - "name": "txxx.com", - "categoryId": 8, - "url": "https://txxx.com", - "companyId": null - }, - "tynt": { - "name": "33Across", - "categoryId": 4, - "url": "http://www.tynt.com/", - "companyId": "33across" - }, - "typeform": { - "name": "Typeform", - "categoryId": 2, - "url": "https://www.typeform.com/", - "companyId": null - }, - "typepad_stats": { - "name": "Typepad Stats", - "categoryId": 6, - "url": "http://www.typepad.com/features/statistics.ht", - "companyId": "typepad" - }, - "typography.com": { - "name": "Webfonts by Hoefler&Co", - "categoryId": 9, - "url": "https://www.typography.com/", - "companyId": null - }, - "tyroo": { - "name": "Tyroo", - "categoryId": 7, - "url": "http://www.tyroo.com/", - "companyId": "tyroo" - }, - "tzetze": { - "name": "TzeTze", - "categoryId": 2, - "url": "http://www.tzetze.it/", - "companyId": "tzetze" - }, - "ubersetzung-app.com": { - "name": "ubersetzung-app.com", - "categoryId": 12, - "url": "https://www.ubersetzung-app.com/", - "companyId": null - }, - "ucfunnel": { - "name": "ucfunnel", - "categoryId": 4, - "url": "https://www.ucfunnel.com/", - "companyId": "ucfunnel" - }, - "ucoz": { - "name": "uCoz", - "categoryId": 6, - "url": "http://www.ucoz.net/", - "companyId": "ucoz" - }, - "uliza": { - "name": "Uliza", - "categoryId": 4, - "url": "http://uliza.jp/index.html", - "companyId": "uliza" - }, - "umbel": { - "name": "Umbel", - "categoryId": 6, - "url": "http://umbel.com", - "companyId": "umbel" - }, - "umebiggestern.club": { - "name": "umebiggestern.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "unanimis": { - "name": "Unanimis", - "categoryId": 4, - "url": "http://www.unanimis.co.uk/", - "companyId": "switch_concepts" - }, - "unbounce": { - "name": "Unbounce", - "categoryId": 6, - "url": "http://unbounce.com/", - "companyId": "unbounce" - }, - "unbxd": { - "name": "UNBXD", - "categoryId": 6, - "url": "http://unbxd.com/", - "companyId": "unbxd" - }, - "under-box.com": { - "name": "under-box.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "undercomputer.com": { - "name": "undercomputer.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "underdog_media": { - "name": "Underdog Media", - "categoryId": 4, - "url": "http://www.underdogmedia.com", - "companyId": "underdog_media" - }, - "undertone": { - "name": "Undertone", - "categoryId": 4, - "url": "https://www.undertone.com/", - "companyId": "perion" - }, - "unica": { - "name": "Unica", - "categoryId": 2, - "url": "http://www.unica.com/", - "companyId": "ibm" - }, - "unister": { - "name": "Unister", - "categoryId": 6, - "url": "http://www.unister.de/", - "companyId": "unister" - }, - "unite": { - "name": "Unite", - "categoryId": 4, - "url": "http://unite.me/#", - "companyId": "unite" - }, - "united_digital_group": { - "name": "United Digital Group", - "categoryId": 4, - "url": "https://www.udg.de/", - "companyId": "united_digital_group" - }, - "united_internet_media_gmbh": { - "name": "United Internet Media GmbH", - "categoryId": 4, - "url": "https://www.united-internet.de/", - "companyId": "united_internet" - }, - "univide": { - "name": "Univide", - "categoryId": 4, - "url": "http://www.oracle.com/", - "companyId": "oracle" - }, - "unpkg.com": { - "name": "unpkg", - "categoryId": 9, - "url": "https://unpkg.com/#/", - "companyId": null - }, - "unruly_media": { - "name": "Unruly Media", - "categoryId": 4, - "url": "http://www.unrulymedia.com/", - "companyId": "unruly" - }, - "untriel_finger_printing": { - "name": "Untriel Finger Printing", - "categoryId": 6, - "url": "https://www.untriel.nl/", - "companyId": "untriel" - }, - "upland_clickability_beacon": { - "name": "Upland Clickability Beacon", - "categoryId": 4, - "url": "http://www.clickability.com/", - "companyId": "upland_software" - }, - "uppr.de": { - "name": "uppr GmbH", - "categoryId": 4, - "url": "https://uppr.de/", - "companyId": null - }, - "upravel.com": { - "name": "upravel.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "upsellit": { - "name": "UpSellit", - "categoryId": 2, - "url": "http://www.upsellit.com", - "companyId": "upsellit" - }, - "upsight": { - "name": "Upsight", - "categoryId": 6, - "url": "http://www.upsight.com/", - "companyId": "upsight" - }, - "uptain": { - "name": "Uptain", - "categoryId": 6, - "url": "http://www.uptain.de/en/regaining-lost-customers/", - "companyId": "uptain" - }, - "uptolike.com": { - "name": "Uptolike", - "categoryId": 7, - "url": "https://www.uptolike.com/", - "companyId": "uptolike" - }, - "uptrends": { - "name": "Uptrends", - "categoryId": 6, - "url": "http://www.uptrends.com/", - "companyId": "uptrends" - }, - "urban-media.com": { - "name": "Urban Media GmbH", - "categoryId": 4, - "url": "https://www.urban-media.com/", - "companyId": null - }, - "urban_airship": { - "name": "Urban Airship", - "categoryId": 6, - "url": "https://www.urbanairship.com/", - "companyId": "urban_airship" - }, - "usability_tools": { - "name": "Usability Tools", - "categoryId": 6, - "url": "http://usabilitytools.com/", - "companyId": "usability_tools" - }, - "usabilla": { - "name": "Usabilla", - "categoryId": 2, - "url": "https://usabilla.com/", - "companyId": "usabilla" - }, - "usemax": { - "name": "Usemax", - "categoryId": 4, - "url": "http://www.usemax.de", - "companyId": "usemax" - }, - "usemessages.com": { - "name": "usemessages.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "usercycle": { - "name": "USERcycle", - "categoryId": 6, - "url": "http://usercycle.com/", - "companyId": "usercycle" - }, - "userdive": { - "name": "USERDIVE", - "categoryId": 6, - "url": "http://userdive.com/", - "companyId": "userdive" - }, - "userecho": { - "name": "UserEcho", - "categoryId": 2, - "url": "http://userecho.com", - "companyId": "userecho" - }, - "userlike.com": { - "name": "Userlike", - "categoryId": 2, - "url": "https://www.userlike.com/", - "companyId": "userlike" - }, - "userpulse": { - "name": "UserPulse", - "categoryId": 2, - "url": "http://www.userpulse.com/", - "companyId": "userpulse" - }, - "userreplay": { - "name": "UserReplay", - "categoryId": 6, - "url": "https://www.userreplay.com/", - "companyId": "userreplay" - }, - "userreport": { - "name": "UserReport", - "categoryId": 2, - "url": "http://www.userreport.com/", - "companyId": "userreport" - }, - "userrules": { - "name": "UserRules", - "categoryId": 2, - "url": "http://www.userrules.com/", - "companyId": "userrules_software" - }, - "usersnap": { - "name": "Usersnap", - "categoryId": 2, - "url": "http://usersnap.com/", - "companyId": "usersnap" - }, - "uservoice": { - "name": "UserVoice", - "categoryId": 2, - "url": "http://uservoice.com/", - "companyId": "uservoice" - }, - "userzoom.com": { - "name": "UserZoom", - "categoryId": 2, - "url": "https://www.userzoom.com/", - "companyId": "userzoom" - }, - "usocial": { - "name": "Usocial", - "categoryId": 7, - "url": "https://usocial.pro/en", - "companyId": "usocial" - }, - "utarget": { - "name": "uTarget", - "categoryId": 4, - "url": "http://utarget.ru/", - "companyId": "utarget" - }, - "uuidksinc.net": { - "name": "uuidksinc.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "v12_group": { - "name": "V12 Group", - "categoryId": 6, - "url": null, - "companyId": null - }, - "vacaneedasap.com": { - "name": "vacaneedasap.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "valassis": { - "name": "Valassis", - "categoryId": 4, - "url": "http://www.brand.net/", - "companyId": "valassis" - }, - "validclick": { - "name": "ValidClick", - "categoryId": 4, - "url": "http://inuvo.com/", - "companyId": "inuvo" - }, - "valiton": { - "name": "Valiton", - "categoryId": 4, - "url": "https://www.valiton.com/", - "companyId": "hubert_burda_media" - }, - "valueclick_media": { - "name": "ValueClick Media", - "categoryId": 4, - "url": "https://www.conversantmedia.eu/", - "companyId": "conversant" - }, - "valuecommerce": { - "name": "ValueCommerce", - "categoryId": 4, - "url": "https://www.valuecommerce.ne.jp", - "companyId": "valuecommerce" - }, - "valued_opinions": { - "name": "Valued Opinions", - "categoryId": 4, - "url": "http://valuedopinions.com", - "companyId": "valued_opinions" - }, - "vanksen": { - "name": "Vanksen", - "categoryId": 4, - "url": "http://www.buzzparadise.com/", - "companyId": "vanksen" - }, - "varick_media_management": { - "name": "Varick Media Management", - "categoryId": 4, - "url": "http://www.varickmm.com/", - "companyId": "varick_media_management" - }, - "vcita": { - "name": "Vcita", - "categoryId": 6, - "url": "https://www.vcita.com/", - "companyId": "vcita" - }, - "vcommission": { - "name": "vCommission", - "categoryId": 4, - "url": "http://www.vcommission.com/", - "companyId": "vcommission" - }, - "vdopia": { - "name": "Vdopia", - "categoryId": 4, - "url": "http://mobile.vdopia.com/", - "companyId": "vdopia" - }, - "ve_interactive": { - "name": "Ve Interactive", - "categoryId": 4, - "url": "https://www.veinteractive.com", - "companyId": "ve_interactive" - }, - "vee24": { - "name": "VEE24", - "categoryId": 0, - "url": "https://www.vee24.com/", - "companyId": "vee24" - }, - "velocecdn.com": { - "name": "velocecdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "velti_mgage_visualize": { - "name": "Velti mGage Visualize", - "categoryId": 4, - "url": "http://www.velti.com/", - "companyId": "velti" - }, - "vendemore": { - "name": "Vendemore", - "categoryId": 1, - "url": "https://vendemore.com/", - "companyId": "ratos" - }, - "venturead.com": { - "name": "venturead.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "venyoo": { - "name": "Venyoo", - "categoryId": 2, - "url": "http://venyoo.ru/", - "companyId": "venyoo" - }, - "veoxa": { - "name": "Veoxa", - "categoryId": 4, - "url": "http://www.veoxa.com/", - "companyId": "veoxa" - }, - "vergic.com": { - "name": "Vergic", - "categoryId": 1, - "url": "https://www.vergic.com/", - "companyId": null - }, - "vero": { - "name": "Vero", - "categoryId": 4, - "url": "http://www.getvero.com/", - "companyId": "vero" - }, - "vertical_acuity": { - "name": "Vertical Acuity", - "categoryId": 4, - "url": "http://www.verticalacuity.com/", - "companyId": "outbrain" - }, - "vertical_leap": { - "name": "Vertical Leap", - "categoryId": 4, - "url": "http://www.vertical-leap.co.uk/", - "companyId": "vertical_leap" - }, - "verticalresponse": { - "name": "VerticalResponse", - "categoryId": 4, - "url": "http://www.verticalresponse.com", - "companyId": "verticalresponse" - }, - "verticalscope": { - "name": "VerticalScope", - "categoryId": 4, - "url": "http://www.verticalscope.com", - "companyId": "verticalscope" - }, - "vertoz": { - "name": "Vertoz", - "categoryId": 4, - "url": "http://www.vertoz.com/", - "companyId": "vertoz" - }, - "veruta": { - "name": "Veruta", - "categoryId": 4, - "url": "http://www.veruta.com/", - "companyId": "veruta" - }, - "verve_mobile": { - "name": "Verve Mobile", - "categoryId": 4, - "url": "http://www.vervemobile.com/", - "companyId": "verve_mobile" - }, - "vg_wort": { - "name": "VG Wort", - "categoryId": 6, - "url": "https://tom.vgwort.de/portal/showHelp", - "companyId": "vg_wort" - }, - "vi": { - "name": "Vi", - "categoryId": 4, - "url": "http://www.vi.ru/", - "companyId": "vi" - }, - "viacom_tag_container": { - "name": "Viacom Tag Container", - "categoryId": 4, - "url": "http://www.viacom.com/", - "companyId": "viacom" - }, - "viafoura": { - "name": "Viafoura", - "categoryId": 4, - "url": "http://www.viafoura.com/", - "companyId": "viafoura" - }, - "vibrant_ads": { - "name": "Vibrant Ads", - "categoryId": 4, - "url": "http://www.vibrantmedia.com/", - "companyId": "vibrant_media" - }, - "vicomi.com": { - "name": "Vicomi", - "categoryId": 6, - "url": "http://www.vicomi.com/", - "companyId": "vicomi" - }, - "vidazoo.com": { - "name": "Vidazoo", - "categoryId": 4, - "url": "https://www.vidazoo.com/", - "companyId": null - }, - "video_desk": { - "name": "Video Desk", - "categoryId": 0, - "url": "https://www.videodesk.com/", - "companyId": "video_desk" - }, - "video_potok": { - "name": "Video Potok", - "categoryId": 0, - "url": "http://videopotok.pro/", - "companyId": "videopotok" - }, - "videoadex.com": { - "name": "VideoAdX", - "categoryId": 4, - "url": "https://www.videoadex.com/", - "companyId": "digiteka" - }, - "videology": { - "name": "Videology", - "categoryId": 4, - "url": "https://videologygroup.com/", - "companyId": "singtel" - }, - "videonow": { - "name": "VideoNow", - "categoryId": 4, - "url": "https://videonow.ru/", - "companyId": "videonow" - }, - "videoplayerhub.com": { - "name": "videoplayerhub.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "videoplaza": { - "name": "Videoplaza", - "categoryId": 4, - "url": "http://www.videoplaza.com/", - "companyId": "videoplaza" - }, - "videostep": { - "name": "VideoStep", - "categoryId": 4, - "url": "https://www.videostep.com/", - "companyId": "videostep" - }, - "vidgyor": { - "name": "Vidgyor", - "categoryId": 0, - "url": "http://vidgyor.com/", - "companyId": "vidgyor" - }, - "vidible": { - "name": "Vidible", - "categoryId": 4, - "url": "http://vidible.tv/", - "companyId": "verizon" - }, - "vidora": { - "name": "Vidora", - "categoryId": 0, - "url": "https://www.vidora.com/", - "companyId": "vidora" - }, - "vietad": { - "name": "VietAd", - "categoryId": 4, - "url": "http://vietad.vn/", - "companyId": "vietad" - }, - "viglink": { - "name": "VigLink", - "categoryId": 4, - "url": "http://www.viglink.com", - "companyId": "viglink" - }, - "vigo": { - "name": "Vigo", - "categoryId": 6, - "url": "https://vigo.one/", - "companyId": "vigo" - }, - "vimeo": { - "name": "Vimeo", - "categoryId": 0, - "url": "http://vimeo.com/", - "companyId": "vimeo" - }, - "vindico_group": { - "name": "Vindico Group", - "categoryId": 4, - "url": "http://www.vindicogroup.com/", - "companyId": "vindico_group" - }, - "vinted": { - "name": "Vinted", - "categoryId": 8, - "url": "https://www.vinted.com/", - "companyId": null - }, - "viral_ad_network": { - "name": "Viral Ad Network", - "categoryId": 4, - "url": "http://viraladnetwork.joinvan.com/", - "companyId": "viral_ad_network" - }, - "viral_loops": { - "name": "Viral Loops", - "categoryId": 2, - "url": "https://viral-loops.com/", - "companyId": "viral-loops" - }, - "viralgains": { - "name": "ViralGains", - "categoryId": 4, - "url": "https://www.viralgains.com/", - "companyId": null - }, - "viralmint": { - "name": "ViralMint", - "categoryId": 7, - "url": "http://www.viralmint.com", - "companyId": "viralmint" - }, - "virgul": { - "name": "Virgul", - "categoryId": 4, - "url": "http://www.virgul.com/", - "companyId": "virgul" - }, - "virool_player": { - "name": "Virool Player", - "categoryId": 4, - "url": "https://www.virool.com/", - "companyId": "virool" - }, - "virtusize": { - "name": "Virtusize", - "categoryId": 5, - "url": "http://www.virtusize.com/", - "companyId": "virtusize" - }, - "visible_measures": { - "name": "Visible Measures", - "categoryId": 4, - "url": "http://www.visiblemeasures.com/", - "companyId": "visible_measures" - }, - "vision_critical": { - "name": "Vision Critical", - "categoryId": 6, - "url": "http://visioncritical.com/", - "companyId": "vision_critical" - }, - "visit_streamer": { - "name": "Visit Streamer", - "categoryId": 6, - "url": "http://www.visitstreamer.com/", - "companyId": "visit_streamer" - }, - "visitortrack": { - "name": "VisitorTrack", - "categoryId": 4, - "url": "http://www.netfactor.com/", - "companyId": "netfactor" - }, - "visitorville": { - "name": "VisitorVille", - "categoryId": 6, - "url": "http://www.visitorville.com", - "companyId": "visitorville" - }, - "visscore": { - "name": "VisScore", - "categoryId": 4, - "url": "http://withcubed.com/", - "companyId": "cubed_attribution" - }, - "visual_iq": { - "name": "Visual IQ", - "categoryId": 6, - "url": "http://visualiq.com/", - "companyId": "visualiq" - }, - "visual_revenue": { - "name": "Visual Revenue", - "categoryId": 6, - "url": "http://visualrevenue.com/", - "companyId": "outbrain" - }, - "visual_website_optimizer": { - "name": "VWO", - "categoryId": 6, - "url": "https://vwo.com/", - "companyId": "wingify" - }, - "visualdna": { - "name": "VisualDNA", - "categoryId": 4, - "url": "http://www.visualdna.com/", - "companyId": "nielsen" - }, - "visualstudio.com": { - "name": "Visualstudio.com", - "categoryId": 8, - "url": "https://www.visualstudio.com/", - "companyId": "microsoft" - }, - "visualvisitor": { - "name": "VisualVisitor", - "categoryId": 6, - "url": "http://www.visualvisitor.com/", - "companyId": "visualvisitor" - }, - "vivalu": { - "name": "VIVALU", - "categoryId": 4, - "url": "https://www.vivalu.com/", - "companyId": "vivalu" - }, - "vivistats": { - "name": "ViviStats", - "categoryId": 6, - "url": "http://en.vivistats.com/", - "companyId": "vivistats" - }, - "vizury": { - "name": "Vizury", - "categoryId": 4, - "url": "http://www.vizury.com/website/", - "companyId": "vizury" - }, - "vizzit": { - "name": "Vizzit", - "categoryId": 4, - "url": "http://www.vizzit.se/h/en/", - "companyId": "vizzit" - }, - "vk.com": { - "name": "Vk.com", - "categoryId": 7, - "url": "https://vk.com/", - "companyId": "megafon" - }, - "vkontakte": { - "name": "VKontakte", - "categoryId": 7, - "url": "https://vk.com/", - "companyId": "megafon" - }, - "vkontakte_widgets": { - "name": "VKontakte Widgets", - "categoryId": 7, - "url": "http://vk.com/developers.php", - "companyId": "megafon" - }, - "vntsm.com": { - "name": "Venatus Media", - "categoryId": 4, - "url": "https://www.venatusmedia.com/", - "companyId": "venatus" - }, - "vodafone.de": { - "name": "vodafone.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "voicefive": { - "name": "VoiceFive", - "categoryId": 6, - "url": "https://www.voicefive.com", - "companyId": "comscore" - }, - "volusion_chat": { - "name": "Volusion Chat", - "categoryId": 2, - "url": "https://www.volusion.com/", - "companyId": "volusion" - }, - "voluum": { - "name": "Voluum", - "categoryId": 4, - "url": "https://voluum.com/", - "companyId": "codewise" - }, - "vooxe.com": { - "name": "vooxe.com", - "categoryId": 8, - "url": "http://www.vooxe.com/", - "companyId": null - }, - "vorwerk.de": { - "name": "vorwerk.de", - "categoryId": 8, - "url": "https://corporate.vorwerk.de/home/", - "companyId": null - }, - "vox": { - "name": "Vox", - "categoryId": 2, - "url": "https://www.voxmedia.com/", - "companyId": "vox" - }, - "voxus": { - "name": "Voxus", - "categoryId": 4, - "url": "http://www.voxus.tv/", - "companyId": "voxus" - }, - "vpon": { - "name": "VPON", - "categoryId": 4, - "url": "http://www.vpon.com/en/", - "companyId": "vpon" - }, - "vpscash": { - "name": "VPSCash", - "categoryId": 4, - "url": "http://vpscash.nl/home", - "companyId": "vps_cash" - }, - "vtracy.de": { - "name": "vtracy.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "vuukle": { - "name": "Vuukle", - "categoryId": 6, - "url": "http://vuukle.com/", - "companyId": "vuukle" - }, - "vzaar": { - "name": "Vzaar", - "categoryId": 0, - "url": "http://vzaar.com/", - "companyId": "vzaar" - }, - "w3counter": { - "name": "W3Counter", - "categoryId": 6, - "url": "http://www.w3counter.com/", - "companyId": "awio_web_services" - }, - "w3roi": { - "name": "w3roi", - "categoryId": 6, - "url": "http://www.w3roi.com/", - "companyId": "w3roi" - }, - "wahoha": { - "name": "Wahoha", - "categoryId": 2, - "url": "http://wahoha.com/", - "companyId": "wahoha" - }, - "walkme.com": { - "name": "WalkMe", - "categoryId": 2, - "url": "https://www.walkme.com/", - "companyId": "walkme" - }, - "wall_street_on_demand": { - "name": "Wall Street on Demand", - "categoryId": 4, - "url": "http://www.wallst.com", - "companyId": "markit_on_demand" - }, - "walmart": { - "name": "Walmart", - "categoryId": 8, - "url": null, - "companyId": null - }, - "wamcash": { - "name": "Wamcash", - "categoryId": 3, - "url": "http://wamcash.com/", - "companyId": "wamcash" - }, - "wanelo": { - "name": "Wanelo", - "categoryId": 2, - "url": "https://wanelo.com/", - "companyId": "wanelo" - }, - "warp.ly": { - "name": "Warp.ly", - "categoryId": 6, - "url": "https://warp.ly/", - "companyId": "warp.ly" - }, - "way2traffic": { - "name": "Way2traffic", - "categoryId": 4, - "url": "http://www.way2traffic.com/", - "companyId": "way2traffic" - }, - "wayfair_com": { - "name": "Wayfair", - "categoryId": 8, - "url": "https://www.wayfair.com/", - "companyId": null - }, - "wdr.de": { - "name": "wdr.de", - "categoryId": 8, - "url": "https://www1.wdr.de/index.html", - "companyId": null - }, - "web-stat": { - "name": "Web-Stat", - "categoryId": 6, - "url": "http://www.web-stat.net/", - "companyId": "web-stat" - }, - "web.de": { - "name": "web.de", - "categoryId": 8, - "url": "https://web.de/", - "companyId": null - }, - "web.stat": { - "name": "Web.STAT", - "categoryId": 6, - "url": "http://webstat.net/", - "companyId": "web.stat" - }, - "web_service_award": { - "name": "Web Service Award", - "categoryId": 6, - "url": "http://webserviceaward.com/english/", - "companyId": "web_service_award" - }, - "web_traxs": { - "name": "Web Traxs", - "categoryId": 6, - "url": "http://websolutions.thomasnet.com/web-traxs-analytics.php", - "companyId": "thomasnet_websolutions" - }, - "web_wipe_analytics": { - "name": "Web Wipe Analytics", - "categoryId": 6, - "url": "http://tensquare.de", - "companyId": "tensquare" - }, - "webads": { - "name": "WebAds", - "categoryId": 4, - "url": "http://www.webads.co.uk/", - "companyId": "webads" - }, - "webantenna": { - "name": "WebAntenna", - "categoryId": 6, - "url": "http://www.bebit.co.jp/webantenna/", - "companyId": "webantenna" - }, - "webclicks24_com": { - "name": "webclicks24.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "webclose.net": { - "name": "webclose.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "webcollage": { - "name": "Webcollage", - "categoryId": 2, - "url": "http://www.webcollage.com/", - "companyId": "webcollage" - }, - "webedia": { - "name": "Webedia", - "categoryId": 4, - "url": "http://fr.webedia-group.com/", - "companyId": "fimalac_group" - }, - "webeffective": { - "name": "WebEffective", - "categoryId": 6, - "url": "http://www.keynote.com/", - "companyId": "keynote_systems" - }, - "webengage": { - "name": "WebEngage", - "categoryId": 2, - "url": "http://webengage.com/", - "companyId": "webengage" - }, - "webgains": { - "name": "Webgains", - "categoryId": 8, - "url": null, - "companyId": null - }, - "webgozar": { - "name": "WebGozar", - "categoryId": 6, - "url": "http://webgozar.com/", - "companyId": "webgozar" - }, - "webhelpje": { - "name": "Webhelpje", - "categoryId": 2, - "url": "http://www.webhelpje.nl/", - "companyId": "webhelpje" - }, - "webleads_tracker": { - "name": "Webleads Tracker", - "categoryId": 6, - "url": "http://www.webleads-tracker.fr/", - "companyId": "webleads_tracker" - }, - "webmecanik": { - "name": "Webmecanik", - "categoryId": 6, - "url": "http://www.webmecanik.com/en/", - "companyId": "webmecanik" - }, - "weborama": { - "name": "Weborama", - "categoryId": 4, - "url": "https://weborama.com/", - "companyId": "weborama" - }, - "webprospector": { - "name": "WebProspector", - "categoryId": 6, - "url": "http://www.webprospector.de/", - "companyId": "webprospector" - }, - "webstat": { - "name": "WebSTAT", - "categoryId": 6, - "url": "http://www.webstat.com/", - "companyId": "webstat" - }, - "webstat.se": { - "name": "Webstat.se", - "categoryId": 6, - "url": "http://www.webstat.se/", - "companyId": "webstat.se" - }, - "webtrack": { - "name": "webtrack", - "categoryId": 6, - "url": "http://www.webtrack.biz/", - "companyId": "webtrack" - }, - "webtraffic": { - "name": "Webtraffic", - "categoryId": 6, - "url": "http://www.webtraffic.se/", - "companyId": "schibsted_asa" - }, - "webtrekk": { - "name": "Webtrekk", - "categoryId": 6, - "url": "http://www.webtrekk.com/", - "companyId": "webtrekk" - }, - "webtrekk_cc": { - "name": "Webtrek Control Cookie", - "categoryId": 6, - "url": "https://www.webtrekk.com/en/home/", - "companyId": "webtrekk" - }, - "webtrends": { - "name": "Webtrends", - "categoryId": 6, - "url": "http://www.webtrends.com/", - "companyId": "webtrends" - }, - "webtrends_ads": { - "name": "Webtrends Ads", - "categoryId": 4, - "url": "http://www.webtrends.com", - "companyId": "webtrends" - }, - "webvisor": { - "name": "WebVisor", - "categoryId": 6, - "url": "http://webvisor.ru", - "companyId": "yandex" - }, - "wedcs": { - "name": "WEDCS", - "categoryId": 4, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "weebly_ads": { - "name": "Weebly Ads", - "categoryId": 4, - "url": "http://www.weebly.com", - "companyId": "weebly" - }, - "weibo_widget": { - "name": "Weibo Widget", - "categoryId": 4, - "url": "http://www.sina.com/", - "companyId": "sina" - }, - "westlotto_com": { - "name": "westlotto.com", - "categoryId": 8, - "url": "http://westlotto.com/", - "companyId": null - }, - "wetter_com": { - "name": "Wetter.com", - "categoryId": 8, - "url": "http://www.wetter.com/", - "companyId": null - }, - "whatbroadcast": { - "name": "Whatbroadcast", - "categoryId": 2, - "url": "https://www.whatsbroadcast.com/", - "companyId": "whatsbroadcast" - }, - "whos.amung.us": { - "name": "Whos.amung.us", - "categoryId": 6, - "url": "http://whos.amung.us/", - "companyId": "whos.amung.us" - }, - "whoson": { - "name": "WhosOn", - "categoryId": 6, - "url": "http://www.whoson.com/", - "companyId": "whoson" - }, - "wibbitz": { - "name": "Wibbitz", - "categoryId": 0, - "url": "http://www.wibbitz.com/", - "companyId": "wibbitz" - }, - "wibiya_toolbar": { - "name": "Wibiya Toolbar", - "categoryId": 7, - "url": "http://www.wibiya.com/", - "companyId": "wibiya" - }, - "widdit": { - "name": "Widdit", - "categoryId": 2, - "url": "http://www.predictad.com/", - "companyId": "widdit" - }, - "widerplanet": { - "name": "WiderPlanet", - "categoryId": 4, - "url": "http://widerplanet.com/", - "companyId": "wider_planet" - }, - "widespace": { - "name": "Widespace", - "categoryId": 4, - "url": "https://www.widespace.com/", - "companyId": "widespace" - }, - "widgetbox": { - "name": "WidgetBox", - "categoryId": 2, - "url": "http://www.widgetbox.com/", - "companyId": "widgetbox" - }, - "wiget_media": { - "name": "Wiget Media", - "categoryId": 4, - "url": "http://wigetmedia.com", - "companyId": "wiget_media" - }, - "wigzo": { - "name": "Wigzo", - "categoryId": 4, - "url": "https://www.wigzo.com/", - "companyId": "wigzo" - }, - "wikia-services.com": { - "name": "Wikia Services", - "categoryId": 8, - "url": "http://www.wikia.com/fandom", - "companyId": "wikia" - }, - "wikia_beacon": { - "name": "Wikia Beacon", - "categoryId": 6, - "url": "http://www.wikia.com/", - "companyId": "wikia" - }, - "wikia_cdn": { - "name": "Wikia CDN", - "categoryId": 9, - "url": "http://www.wikia.com/fandom", - "companyId": "wikia" - }, - "wikimedia.org": { - "name": "WikiMedia", - "categoryId": 9, - "url": "https://wikimediafoundation.org/", - "companyId": "wikimedia_foundation" - }, - "winaffiliates": { - "name": "Winaffiliates", - "categoryId": 6, - "url": "http://www.winaffiliates.com/", - "companyId": "winaffiliates" - }, - "wipmania": { - "name": "WIPmania", - "categoryId": 6, - "url": "http://www.wipmania.com/", - "companyId": "wipmania" - }, - "wiqhit": { - "name": "WiQhit", - "categoryId": 6, - "url": "https://wiqhit.com/nl/", - "companyId": "wiqhit" - }, - "wirecard": { - "name": "Wirecard", - "categoryId": 2, - "url": "https://www.wirecard.com/", - "companyId": null - }, - "wiredminds": { - "name": "WiredMinds", - "categoryId": 6, - "url": "http://www.wiredminds.de/", - "companyId": "wiredminds" - }, - "wirtualna_polska": { - "name": "Wirtualna Polska", - "categoryId": 4, - "url": "http://reklama.wp.pl/", - "companyId": "wirtualna_polska" - }, - "wisepops": { - "name": "WisePops", - "categoryId": 4, - "url": "http://wisepops.com/", - "companyId": "wisepops" - }, - "wishpond": { - "name": "Wishpond", - "categoryId": 2, - "url": "http://wishpond.com", - "companyId": "wishpond" - }, - "wistia": { - "name": "Wistia", - "categoryId": 6, - "url": "http://wistia.com/", - "companyId": "wistia" - }, - "wix.com": { - "name": "Wix", - "categoryId": 8, - "url": "https://www.wix.com/", - "companyId": "wix" - }, - "wixab": { - "name": "Wixab", - "categoryId": 6, - "url": "http://wixab.com/en/", - "companyId": "wixab" - }, - "wixmp": { - "name": "Wix Media Platform", - "categoryId": 9, - "url": "https://www.wixmp.com/", - "companyId": "wix" - }, - "wnzmauurgol.com": { - "name": "wnzmauurgol.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "wonderpush": { - "name": "WonderPush", - "categoryId": 2, - "url": "https://www.wonderpush.com/", - "companyId": "wonderpush" - }, - "woopic.com": { - "name": "woopic.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "woopra": { - "name": "Woopra", - "categoryId": 6, - "url": "http://www.woopra.com/", - "companyId": "woopra" - }, - "wordpress_ads": { - "name": "Wordpress Ads", - "categoryId": 4, - "url": "https://wordpress.com/", - "companyId": "automattic" - }, - "wordpress_stats": { - "name": "WordPress Stats", - "categoryId": 6, - "url": "http://wordpress.org/extend/plugins/stats/", - "companyId": "automattic" - }, - "wordstream": { - "name": "WordStream", - "categoryId": 6, - "url": "http://www.wordstream.com/", - "companyId": "wordstream" - }, - "worldnaturenet_xyz": { - "name": "worldnaturenet.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "wp.pl": { - "name": "Wirtualna Polska ", - "categoryId": 4, - "url": "https://www.wp.pl/", - "companyId": "wp" - }, - "wp_engine": { - "name": "WP Engine", - "categoryId": 5, - "url": "https://wpengine.com/", - "companyId": "wp_engine" - }, - "writeup_clickanalyzer": { - "name": "WriteUp ClickAnalyzer", - "categoryId": 6, - "url": "http://www.writeup.co.jp/", - "companyId": "writeup" - }, - "wurfl": { - "name": "WURFL", - "categoryId": 6, - "url": "https://web.wurfl.io/", - "companyId": "scientiamobile" - }, - "wwwpromoter": { - "name": "WWWPromoter", - "categoryId": 4, - "url": "http://wwwpromoter.com/", - "companyId": "wwwpromoter" - }, - "wykop": { - "name": "Wykop", - "categoryId": 7, - "url": "http://www.wykop.pl", - "companyId": "wykop" - }, - "wysistat.com": { - "name": "WysiStat", - "categoryId": 6, - "url": "https://www.wysistat.net/", - "companyId": "wysistat" - }, - "wywy.com": { - "name": "wywy", - "categoryId": 4, - "url": "http://wywy.com/", - "companyId": "tvsquared" - }, - "x-lift": { - "name": "X-lift", - "categoryId": 4, - "url": "https://www.x-lift.jp/", - "companyId": "x-lift" - }, - "xapads": { - "name": "Xapads", - "categoryId": 4, - "url": "http://www.xapads.com/", - "companyId": "xapads" - }, - "xen-media.com": { - "name": "xen-media.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "xfreeservice.com": { - "name": "xfreeservice.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "xhamster": { - "name": "xHamster", - "categoryId": 3, - "url": null, - "companyId": null - }, - "xing": { - "name": "Xing", - "categoryId": 6, - "url": "http://www.xing.com/", - "companyId": "xing" - }, - "xmediaclicks": { - "name": "XmediaClicks", - "categoryId": 3, - "url": "http://exoclick.com/", - "companyId": "exoclick" - }, - "xnxx_cdn": { - "name": "xnxx CDN", - "categoryId": 9, - "url": "https://www.xnxx.com", - "companyId": null - }, - "xplosion": { - "name": "xplosion", - "categoryId": 4, - "url": "http://www.xplosion.de/", - "companyId": "xplosion_interactive" - }, - "xtend": { - "name": "XTEND", - "categoryId": 4, - "url": "http://www.xtendmedia.com/", - "companyId": "matomy_media" - }, - "xvideos_com": { - "name": "xvideos.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "xxxlshop.de": { - "name": "xxxlshop.de", - "categoryId": 8, - "url": "https://www.xxxlshop.de/", - "companyId": null - }, - "xxxlutz": { - "name": "XXXLutz", - "categoryId": 8, - "url": "https://www.xxxlutz.de/", - "companyId": "xxxlutz" - }, - "yabbi": { - "name": "Yabbi", - "categoryId": 4, - "url": "https://yabbi.me/", - "companyId": null - }, - "yabuka": { - "name": "Yabuka", - "categoryId": 4, - "url": "http://www.yabuka.com/", - "companyId": "yabuka" - }, - "yahoo": { - "name": "Yahoo!", - "categoryId": 6, - "url": "https://yahoo.com", - "companyId": "verizon" - }, - "yahoo_ad_exchange": { - "name": "Yahoo! Ad Exchange", - "categoryId": 4, - "url": "https://www.verizonmedia.com/advertising", - "companyId": "verizon" - }, - "yahoo_ad_manager": { - "name": "Yahoo! Ad Manager Plus", - "categoryId": 4, - "url": "https://developer.yahoo.com/analytics/", - "companyId": "verizon" - }, - "yahoo_analytics": { - "name": "Yahoo! Analytics", - "categoryId": 6, - "url": "http://web.analytics.yahoo.com/", - "companyId": "verizon" - }, - "yahoo_commerce_central": { - "name": "Yahoo! Commerce Central", - "categoryId": 4, - "url": "http://lexity.com/", - "companyId": "verizon" - }, - "yahoo_dot_tag": { - "name": "Yahoo! DOT tag", - "categoryId": 4, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "yahoo_japan_retargeting": { - "name": "Yahoo! Japan Retargeting", - "categoryId": 4, - "url": "http://www.yahoo.com/", - "companyId": "yahoo_japan" - }, - "yahoo_overture": { - "name": "Yahoo! Overture", - "categoryId": 4, - "url": "http://searchmarketing.yahoo.com", - "companyId": "verizon" - }, - "yahoo_small_business": { - "name": "Yahoo! Small Business", - "categoryId": 4, - "url": "http://www.pixazza.com/", - "companyId": "verizon" - }, - "yandex": { - "name": "Yandex", - "categoryId": 4, - "url": "https://www.yandex.com/", - "companyId": "yandex" - }, - "yandex.api": { - "name": "Yandex.API", - "categoryId": 2, - "url": "http://api.yandex.ru/", - "companyId": "yandex" - }, - "yandex_adexchange": { - "name": "Yandex AdExchange", - "categoryId": 4, - "url": "https://www.yandex.com/", - "companyId": "yandex" - }, - "yandex_advisor": { - "name": "Yandex.Advisor", - "categoryId": 12, - "url": "https://sovetnik.yandex.ru/", - "companyId": "yandex" - }, - "yandex_direct": { - "name": "Yandex.Direct", - "categoryId": 6, - "url": "https://direct.yandex.com/", - "companyId": "yandex" - }, - "yandex_metrika": { - "name": "Yandex Metrika", - "categoryId": 6, - "url": "https://metrica.yandex.com/", - "companyId": "yandex" - }, - "yandex_passport": { - "name": "Yandex Passport", - "categoryId": 2, - "url": "https://www.yandex.com/", - "companyId": "yandex" - }, - "yapfiles.ru": { - "name": "yapfiles.ru", - "categoryId": 8, - "url": "https://www.yapfiles.ru/", - "companyId": null - }, - "yashi": { - "name": "Yashi", - "categoryId": 4, - "url": "http://www.yashi.com/", - "companyId": "mass2" - }, - "ybrant_media": { - "name": "Ybrant Media", - "categoryId": 4, - "url": "http://www.addynamix.com/index.html", - "companyId": "ybrant_media" - }, - "ycontent": { - "name": "Ycontent", - "categoryId": 0, - "url": "http://ycontent.com.br/", - "companyId": "ycontent" - }, - "yektanet": { - "name": "Yektanet", - "categoryId": 4, - "url": "https://yektanet.com/", - "companyId": "yektanet" - }, - "yengo": { - "name": "Yengo", - "categoryId": 4, - "url": "http://www.yengo.com/", - "companyId": "yengo" - }, - "yesmail": { - "name": "Yesmail", - "categoryId": 4, - "url": "http://www.yesmail.com/", - "companyId": "yes_mail" - }, - "yesup_advertising": { - "name": "YesUp Advertising", - "categoryId": 4, - "url": "http://yesup.net/", - "companyId": "yesup" - }, - "yesware": { - "name": "Yesware", - "categoryId": 2, - "url": "http://www.yesware.com/", - "companyId": "yesware" - }, - "yieldbot": { - "name": "Yieldbot", - "categoryId": 6, - "url": "https://www.yieldbot.com/", - "companyId": "yieldbot" - }, - "yieldify": { - "name": "Yieldify", - "categoryId": 4, - "url": "http://www.yieldify.com/", - "companyId": "yieldify" - }, - "yieldlab": { - "name": "Yieldlab", - "categoryId": 4, - "url": "http://www.yieldlab.de/", - "companyId": "prosieben_sat1" - }, - "yieldlove": { - "name": "Yieldlove", - "categoryId": 4, - "url": "https://www.yieldlove.com/", - "companyId": "yieldlove" - }, - "yieldmo": { - "name": "Yieldmo", - "categoryId": 4, - "url": "https://www.yieldmo.com/", - "companyId": "yieldmo" - }, - "yieldr": { - "name": "Yieldr Ads", - "categoryId": 4, - "url": "https://www.yieldr.com/", - "companyId": "yieldr" - }, - "yieldr_air": { - "name": "Yieldr Air", - "categoryId": 6, - "url": "https://www.yieldr.com/", - "companyId": "yieldr" - }, - "yieldsquare": { - "name": "YieldSquare", - "categoryId": 4, - "url": "http://www.yieldsquare.com/", - "companyId": "yieldsquare" - }, - "yle": { - "name": "YLE", - "categoryId": 6, - "url": "http://yle.fi/", - "companyId": "yle" - }, - "yllixmedia": { - "name": "YllixMedia", - "categoryId": 4, - "url": "http://yllix.com/", - "companyId": "yllixmedia" - }, - "ymetrica1.com": { - "name": "ymetrica1.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ymzrrizntbhde.com": { - "name": "ymzrrizntbhde.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "yo_button": { - "name": "Yo Button", - "categoryId": 2, - "url": "http://www.justyo.co/", - "companyId": "yo" - }, - "yodle": { - "name": "Yodle", - "categoryId": 4, - "url": "http://www.yodle.com/", - "companyId": "yodle" - }, - "yola_analytics": { - "name": "Yola Analytics", - "categoryId": 6, - "url": "https://www.yola.com/", - "companyId": "yola" - }, - "yomedia": { - "name": "Yomedia", - "categoryId": 4, - "url": "http://www.pinetech.vn/", - "companyId": "yomedia" - }, - "yoochoose.net": { - "name": "YOOCHOOSE", - "categoryId": 4, - "url": "https://yoochoose.com/", - "companyId": null - }, - "yotpo": { - "name": "Yotpo", - "categoryId": 1, - "url": "https://www.yotpo.com/", - "companyId": "yotpo" - }, - "yottaa": { - "name": "Yottaa", - "categoryId": 6, - "url": "https://www.yottaa.com/", - "companyId": "yottaa" - }, - "yottly": { - "name": "Yottly", - "categoryId": 4, - "url": "https://yottly.com/", - "companyId": "yottly" - }, - "youcanbookme": { - "name": "YouCanBookMe", - "categoryId": 2, - "url": "https://youcanbook.me/", - "companyId": "youcanbookme" - }, - "youku": { - "name": "Youku", - "categoryId": 0, - "url": "http://www.youku.com/", - "companyId": "youku" - }, - "youporn": { - "name": "YouPorn", - "categoryId": 3, - "url": null, - "companyId": null - }, - "youtube": { - "name": "YouTube", - "categoryId": 0, - "url": "https://www.youtube.com/", - "companyId": "google" - }, - "youtube_subscription": { - "name": "YouTube Subscription", - "categoryId": 2, - "url": "http://www.youtube.com/", - "companyId": "google" - }, - "yp": { - "name": "YellowPages", - "categoryId": 4, - "url": "https://www.yellowpages.com/", - "companyId": "thryv" - }, - "ysance": { - "name": "YSance", - "categoryId": 4, - "url": "http://www.ysance.com/en/index.html", - "companyId": "ysance" - }, - "yume": { - "name": "YuMe", - "categoryId": 4, - "url": "http://www.yume.com/", - "companyId": "yume" - }, - "yume,_inc.": { - "name": "YuMe, Inc.", - "categoryId": 4, - "url": "http://www.yume.com/", - "companyId": "yume" - }, - "yusp": { - "name": "Yusp", - "categoryId": 6, - "url": "https://www.yusp.com/", - "companyId": "yusp" - }, - "zadarma": { - "name": "Zadarma", - "categoryId": 2, - "url": "https://zadarma.com/", - "companyId": "zadarma" - }, - "zalando_de": { - "name": "zalando.de", - "categoryId": 8, - "url": "https://zalando.de/", - "companyId": "zalando" - }, - "zalo": { - "name": "Zalo", - "categoryId": 2, - "url": "https://zaloapp.com/", - "companyId": "zalo" - }, - "zanox": { - "name": "Zanox", - "categoryId": 4, - "url": "http://www.zanox.com/us/", - "companyId": "axel_springer" - }, - "zaparena": { - "name": "zaparena", - "categoryId": 4, - "url": "http://www.zaparena.com/", - "companyId": "zapunited" - }, - "zappos": { - "name": "Zappos", - "categoryId": 4, - "url": "http://www.zappos.com/", - "companyId": "zappos" - }, - "zdassets.com": { - "name": "Zendesk CDN", - "categoryId": 8, - "url": "http://www.zendesk.com/", - "companyId": "zendesk" - }, - "zebestof.com": { - "name": "Zebestof", - "categoryId": 4, - "url": "http://www.zebestof.com/en/home/", - "companyId": "zebestof" - }, - "zedo": { - "name": "Zedo", - "categoryId": 4, - "url": "http://www.zedo.com/", - "companyId": "zedo" - }, - "zemanta": { - "name": "Zemanta", - "categoryId": 2, - "url": "http://www.zemanta.com/", - "companyId": "zemanta" - }, - "zencoder": { - "name": "Zencoder", - "categoryId": 0, - "url": "https://zencoder.com/en/", - "companyId": "zencoder" - }, - "zendesk": { - "name": "Zendesk", - "categoryId": 2, - "url": "http://www.zendesk.com/", - "companyId": "zendesk" - }, - "zergnet": { - "name": "ZergNet", - "categoryId": 2, - "url": "http://www.zergnet.com/info", - "companyId": "zergnet" - }, - "zero.kz": { - "name": "ZERO.kz", - "categoryId": 6, - "url": "http://zero.kz/", - "companyId": "neolabs_zero" - }, - "zeta": { - "name": "Zeta", - "categoryId": 2, - "url": "https://zetaglobal.com/", - "companyId": "zeta" - }, - "zeusclicks": { - "name": "ZeusClicks", - "categoryId": 4, - "url": "http://zeusclicks.com/", - "companyId": null - }, - "ziff_davis": { - "name": "Ziff Davis", - "categoryId": 4, - "url": "https://www.ziffdavis.com/", - "companyId": "ziff_davis" - }, - "zift_solutions": { - "name": "Zift Solutions", - "categoryId": 6, - "url": "https://ziftsolutions.com/", - "companyId": "zift_solutions" - }, - "zimbio.com": { - "name": "Zimbio", - "categoryId": 8, - "url": "http://www.zimbio.com/", - "companyId": null - }, - "zippyshare_widget": { - "name": "Zippyshare Widget", - "categoryId": 2, - "url": "http://www.zippyshare.com", - "companyId": "zippyshare" - }, - "zmags": { - "name": "Zmags", - "categoryId": 6, - "url": "https://zmags.com/", - "companyId": "zmags" - }, - "zmctrack.net": { - "name": "zmctrack.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "zog.link": { - "name": "zog.link", - "categoryId": 11, - "url": null, - "companyId": null - }, - "zoho": { - "name": "Zoho", - "categoryId": 6, - "url": "https://www.zohocorp.com/index.html", - "companyId": "zoho_corp" - }, - "zononi.com": { - "name": "zononi.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "zopim": { - "name": "Zopim", - "categoryId": 2, - "url": "http://www.zopim.com/", - "companyId": "zendesk" - }, - "zukxd6fkxqn.com": { - "name": "zukxd6fkxqn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "zwaar": { - "name": "Zwaar", - "categoryId": 4, - "url": "http://www.zwaar.org", - "companyId": "zwaar" - }, - "zypmedia": { - "name": "ZypMedia", - "categoryId": 4, - "url": "http://www.zypmedia.com/", - "companyId": "zypmedia" - } - }, - "trackerDomains": { - "mmtro.com": "1000mercis", - "creative-serving.com": "161media", - "p161.net": "161media", - "analytics.163.com": "163", - "1822direkt.de": "1822direkt.de", - "1dmp.io": "1dmp.io", - "opecloud.com": "1plusx", - "1sponsor.com": "1sponsor", - "tm.dentsu.de": "1tag", - "1and1.com": "1und1", - "1und1.de": "1und1", - "uicdn.com": "1und1", - "website-start.de": "1und1", - "24-ads.com": "24-ads.com", - "247-inc.net": "24_7", - "d1af033869koo7.cloudfront.net": "24_7", - "counter.24log.ru": "24log", - "24smi.net": "24smi", - "24smi.org": "24smi", - "2leep.com": "2leep", - "33across.com": "33across", - "3dstats.com": "3dstats", - "4cdn.org": "4chan", - "4finance.com": "4finance_com", - "4wnet.com": "4w_marketplace", - "d3aa0ztdn3oibi.cloudfront.net": "500friends", - "51.la": "51.la", - "5min.com": "5min_media", - "d1lm7kd3bd3yo9.cloudfront.net": "6sense", - "grepdata.com": "6sense", - "77tracking.com": "77tracking", - "7tv.de": "7tv.de", - "888media.net": "888media", - "hit.8digits.com": "8digits", - "94j7afz2nr.xyz": "94j7afz2nr.xyz", - "statsanalytics.com": "99stats", - "a3cloud.net": "a3cloud_net", - "a8.net": "a8", - "aaxads.com": "aaxads.com", - "abtasty.com": "ab_tasty", - "d1447tq2m68ekg.cloudfront.net": "ab_tasty", - "ablida.de": "ablida", - "ablida.net": "ablida", - "durasite.net": "accelia", - "accengage.net": "accengage", - "ax.xrea.com": "accessanalyzer", - "accesstrade.net": "accesstrade", - "agcdn.com": "accord_group", - "accmgr.com": "accordant_media", - "p-td.com": "accuen_media", - "acestream.net": "acestream.net", - "acint.net": "acint.net", - "acloudimages.com": "acloudimages", - "acpm.fr": "acpm.fr", - "acquia.com": "acquia.com", - "ziyu.net": "acrweb", - "actionpay.ru": "actionpay", - "adnwb.ru": "actionpay", - "adonweb.ru": "actionpay", - "active-agent.com": "active_agent", - "trackcmp.net": "active_campaign", - "active-srv02.de": "active_performance", - "active-tracking.de": "active_performance", - "activeconversion.com": "activeconversion", - "a-cast.jp": "activecore", - "activemeter.com": "activemeter", - "go.activengage.com": "activengage", - "actonsoftware.com": "acton", - "acuityplatform.com": "acuity_ads", - "acxiom-online.com": "acxiom", - "acxiom.com": "acxiom", - "ad-blocker.org": "ad-blocker.org", - "ads.ad-center.com": "ad-center", - "ad-delivery.net": "ad-delivery.net", - "ad-sys.com": "ad-sys", - "adagionet.com": "ad.agio", - "ad2click.go2cloud.org": "ad2click", - "ad2games.com": "ad2games", - "ad360.vn": "ad360", - "ads.ad4game.com": "ad4game", - "ad4mat.ar": "ad4mat", - "ad4mat.at": "ad4mat", - "ad4mat.be": "ad4mat", - "ad4mat.bg": "ad4mat", - "ad4mat.br": "ad4mat", - "ad4mat.ch": "ad4mat", - "ad4mat.co.uk": "ad4mat", - "ad4mat.cz": "ad4mat", - "ad4mat.de": "ad4mat", - "ad4mat.dk": "ad4mat", - "ad4mat.es": "ad4mat", - "ad4mat.fi": "ad4mat", - "ad4mat.fr": "ad4mat", - "ad4mat.gr": "ad4mat", - "ad4mat.hu": "ad4mat", - "ad4mat.it": "ad4mat", - "ad4mat.mx": "ad4mat", - "ad4mat.net": "ad4mat", - "ad4mat.nl": "ad4mat", - "ad4mat.no": "ad4mat", - "ad4mat.pl": "ad4mat", - "ad4mat.ro": "ad4mat", - "ad4mat.ru": "ad4mat", - "ad4mat.se": "ad4mat", - "ad4mat.tr": "ad4mat", - "ad6.fr": "ad6media", - "ad6media.co.uk": "ad6media", - "ad6media.com": "ad6media", - "ad6media.es": "ad6media", - "ad6media.fr": "ad6media", - "a2dfp.net": "ad_decisive", - "addynamo.net": "ad_dynamo", - "ebis.ne.jp": "ad_ebis", - "adlightning.com": "ad_lightning", - "admagnet.net": "ad_magnet", - "amimg.net": "ad_magnet", - "adspirit.de": "ad_spirit", - "adspirit.net": "ad_spirit", - "adac.de": "adac_de", - "adacado.com": "adacado", - "ozonemedia.com": "adadyn", - "adrtx.net": "adality_gmbh", - "adalliance.io": "adalliance.io", - "adalyser.com": "adalyser.com", - "adaos-ads.net": "adaos", - "adap.tv": "adap.tv", - "smrtlnks.com": "adaptiveblue_smartlinks", - "yieldoptimizer.com": "adara_analytics", - "adnetwork.adasiaholdings.com": "adasia_holdings", - "adbetclickin.pink": "adbetclickin.pink", - "adbetnet.com": "adbetnet.com", - "adblade.com": "adblade.com", - "adbooth.com": "adbooth", - "adbooth.net": "adbooth", - "adbox.lv": "adbox", - "adbrn.com": "adbrain", - "adbrite.com": "adbrite", - "adbull.com": "adbull", - "adbutler.com": "adbutler", - "adc-serv.net": "adc_media", - "adc-srv.net": "adc_media", - "adcash.com": "adcash", - "vuroll.in": "adchakra", - "acs86.com": "adchina", - "csbew.com": "adchina", - "irs09.com": "adchina", - "adcito.com": "adcito", - "adcitomedia.com": "adcito", - "adclear.net": "adclear", - "swift.adclerks.com": "adclerks", - "adclickmedia.com": "adclickmedia", - "adclickzone.go2cloud.org": "adclickzone", - "ad-cloud.jp": "adcloud", - "admarvel.s3.amazonaws.com": "adcolony", - "ads.admarvel.com": "adcolony", - "adrdgt.com": "adconion", - "amgdgt.com": "adconion", - "adcrowd.com": "adcrowd", - "shop2market.com": "adcurve", - "addtocalendar.com": "add_to_calendar", - "dpmsrv.com": "addaptive", - "yagiay.com": "addefend", - "addfreestats.com": "addfreestats", - "addinto.com": "addinto", - "addshoppers.com": "addshoppers", - "shop.pe": "addshoppers", - "addthis.com": "addthis", - "addthiscdn.com": "addthis", - "addthisedge.com": "addthis", - "b2btracking.addvalue.de": "addvalue", - "addyon.com": "addyon", - "adeasy.ru": "adeasy", - "ipredictive.com": "adelphic", - "adengage.com": "adengage", - "adespresso.com": "adespresso", - "adexcite.com": "adexcite", - "adextent.com": "adextent", - "adf.ly": "adf.ly", - "adfalcon.com": "adfalcon", - "adfoc.us": "adfocus", - "js.adforgames.com": "adforgames", - "adform.net": "adform", - "adformdsp.net": "adform", - "seadform.net": "adform", - "adfox.ru": "adfox", - "adwolf.ru": "adfox", - "adfreestyle.pl": "adfreestyle", - "adfront.org": "adfront", - "adfrontiers.com": "adfrontiers", - "adgear.com": "adgear", - "adgrx.com": "adgear", - "adgebra.co.in": "adgebra", - "adgenie.co.uk": "adgenie", - "ad.adgile.com": "adgile", - "ad.antventure.com": "adgile", - "adglare.net": "adglare.net", - "adsafety.net": "adglue", - "smartadcheck.de": "adgoal", - "smartredirect.de": "adgoal", - "adgorithms.com": "adgorithms", - "adgoto.com": "adgoto", - "adguard.com": "adguard", - "adhands.ru": "adhands", - "adhese.be": "adhese", - "adhese.com": "adhese", - "adhese.net": "adhese", - "adhitzads.com": "adhitz", - "adhood.com": "adhood", - "afy11.net": "adify", - "cdn.adikteev.com": "adikteev", - "adimpact.com": "adimpact", - "adinch.com": "adinch", - "adition.com": "adition", - "adjal.com": "adjal", - "cdn.adjs.net": "adjs", - "adjug.com": "adjug", - "adjust.com": "adjust", - "adk2.com": "adk2", - "cdn.adsrvmedia.com": "adk2", - "cdn.cdnrl.com": "adk2", - "adklip.com": "adklip", - "adkengage.com": "adknowledge", - "adknowledge.com": "adknowledge", - "bidsystem.com": "adknowledge", - "blogads.com": "adknowledge", - "cubics.com": "adknowledge", - "yarpp.org": "adknowledge", - "adsearch.adkontekst.pl": "adkontekst", - "netsprint.eu": "adkontekst.pl", - "adlabs.ru": "adlabs", - "clickiocdn.com": "adlabs", - "luxup.ru": "adlabs", - "mixmarket.biz": "adlabs", - "ad-serverparc.nl": "adlantic", - "adimg.net": "adlantis", - "adlantis.jp": "adlantis", - "cdn.adless.io": "adless", - "api.publishers.adlive.io": "adlive_header_bidding", - "adlooxtracking.com": "adloox", - "adx1.com": "admachine", - "adman.gr": "adman", - "adman.in.gr": "adman", - "admanmedia.com": "adman_media", - "admantx.com": "admantx.com", - "admaster.net": "admaster", - "cdnmaster.com": "admaster", - "admaster.com.cn": "admaster.cn", - "admasterapi.com": "admaster.cn", - "admatic.com.tr": "admatic", - "ads5.admatic.com.tr": "admatic", - "cdn2.admatic.com.tr": "admatic", - "lib-3pas.admatrix.jp": "admatrix", - "admaxserver.com": "admax", - "admaxim.com": "admaxim", - "admaya.in": "admaya", - "admedia.com": "admedia", - "adizio.com": "admedo_com", - "admedo.com": "admedo_com", - "admeira.ch": "admeira.ch", - "admeld.com": "admeld", - "admeo.ru": "admeo", - "admaym.com": "admeta", - "atemda.com": "admeta", - "admicro.vn": "admicro", - "vcmedia.vn": "admicro", - "admitad.com": "admitad.com", - "admixer.net": "admixer.net", - "admized.com": "admized", - "admo.tv": "admo.tv", - "a.admob.com": "admob", - "mm.admob.com": "admob", - "mmv.admob.com": "admob", - "p.admob.com": "admob", - "run.admost.com": "admost", - "dmmotion.com": "admotion", - "nspmotion.com": "admotion", - "admulti.com": "admulti", - "adnegah.net": "adnegah", - "adnet.vn": "adnet", - "adnet.biz": "adnet.de", - "adnet.de": "adnet.de", - "adclick.lt": "adnet_media", - "adnet.lt": "adnet_media", - "ad.adnetwork.net": "adnetwork.net", - "adnetworkperformance.com": "adnetworkperformance.com", - "adserver.adnexio.com": "adnexio", - "adnium.com": "adnium.com", - "heias.com": "adnologies", - "smaclick.com": "adnow", - "st-n.ads3-adnow.com": "adnow", - "adnymics.com": "adnymics", - "adobe.com": "adobe_audience_manager", - "demdex.net": "adobe_audience_manager", - "everestjs.net": "adobe_audience_manager", - "everesttech.net": "adobe_audience_manager", - "scene7.com": "adobe_dynamic_media", - "adobedtm.com": "adobe_dynamic_tag_management", - "2o7.net": "adobe_experience_cloud", - "du8783wkf05yr.cloudfront.net": "adobe_experience_cloud", - "hitbox.com": "adobe_experience_cloud", - "imageg.net": "adobe_experience_cloud", - "nedstat.com": "adobe_experience_cloud", - "omtrdc.net": "adobe_experience_cloud", - "sitestat.com": "adobe_experience_cloud", - "adobelogin.com": "adobe_login", - "adobetag.com": "adobe_tagmanager", - "typekit.com": "adobe_typekit", - "typekit.net": "adobe_typekit", - "adocean.pl": "adocean", - "dmtry.com": "adometry", - "adomik.com": "adomik", - "adcde.com": "adon_network", - "addlvr.com": "adon_network", - "adfeedstrk.com": "adon_network", - "adtrgt.com": "adon_network", - "bannertgt.com": "adon_network", - "cptgt.com": "adon_network", - "cpvfeed.com": "adon_network", - "cpvtgt.com": "adon_network", - "mygeek.com": "adon_network", - "popcde.com": "adon_network", - "sdfje.com": "adon_network", - "urtbk.com": "adon_network", - "adonion.com": "adonion", - "t.adonly.com": "adonly", - "adoperator.com": "adoperator", - "adoric.com": "adoric", - "adorika.com": "adorika", - "adorika.net": "adorika", - "adosia.com": "adosia", - "adotmob.com": "adotmob.com", - "adotube.com": "adotube", - "adparlor.com": "adparlor", - "adparlour.com": "adparlor", - "a4p.adpartner.pro": "adpartner", - "adpeepshosted.com": "adpeeps", - "adperfect.com": "adperfect", - "adperium.com": "adperium", - "adpilot.at": "adpilot", - "erne.co": "adpilot", - "adplan-ds.com": "adplan", - "advg.jp": "adplan", - "c.p-advg.com": "adplan", - "adplus.co.id": "adplus", - "adframesrc.com": "adprofy", - "adserve.adpulse.ir": "adpulse", - "ads.adpv.com": "adpv", - "adreactor.com": "adreactor", - "adrecord.com": "adrecord", - "adrecover.com": "adrecover", - "ad.vcm.jp": "adresult", - "adresult.jp": "adresult", - "adriver.ru": "adriver", - "adroll.com": "adroll", - "adrom.net": "adrom", - "txt.eu": "adrom", - "adru.net": "adru.net", - "adrunnr.com": "adrunnr", - "adsame.com": "adsame", - "adsbookie.com": "adsbookie", - "adscale.de": "adscale", - "adscience.nl": "adscience", - "adsco.re": "adsco.re", - "adsensecamp.com": "adsensecamp", - "adserverpub.com": "adserverpub", - "online.adservicemedia.dk": "adservice_media", - "adsfactor.net": "adsfactor", - "ads.doclix.com": "adside", - "adskeeper.co.uk": "adskeeper", - "ssp.adskom.com": "adskom", - "adslot.com": "adslot", - "adsnative.com": "adsnative", - "adsniper.ru": "adsniper.ru", - "adspeed.com": "adspeed", - "adspeed.net": "adspeed", - "o333o.com": "adspyglass", - "adstage-analytics.herokuapp.com": "adstage", - "code.adstanding.com": "adstanding", - "adstars.co.id": "adstars", - "ad-stir.com": "adstir", - "4dsply.com": "adsupply", - "cdn.engine.adsupply.com": "adsupply", - "trklnks.com": "adsupply", - "adswizz.com": "adswizz", - "adtaily.com": "adtaily", - "adtaily.pl": "adtaily", - "adtarget.me": "adtarget.me", - "adtech.de": "adtech", - "adtechus.com": "adtech", - "adtegrity.net": "adtegrity", - "adtpix.com": "adtegrity", - "adtelligence.de": "adtelligence.de", - "adentifi.com": "adtheorent", - "adthink.com": "adthink", - "advertstream.com": "adthink", - "audienceinsights.net": "adthink", - "adtiger.de": "adtiger", - "adtimaserver.vn": "adtima", - "adtng.com": "adtng.com", - "adtoma.com": "adtoma", - "adtomafusion.com": "adtoma", - "adtr02.com": "adtr02.com", - "track.adtraction.com": "adtraction", - "adtraxx.de": "adtraxx", - "adtriba.com": "adtriba.com", - "adtrue.com": "adtrue", - "adtrustmedia.com": "adtrustmedia", - "ad.adtube.ir": "adtube", - "awempire.com": "adult_webmaster_empire", - "dditscdn.com": "adult_webmaster_empire", - "livejasmin.com": "adult_webmaster_empire", - "adultadworld.com": "adultadworld", - "adworldmedia.com": "adultadworld", - "adup-tech.com": "adup-tech.com", - "advaction.ru": "advaction", - "aucourant.info": "advaction", - "schetu.net": "advaction", - "dqfw2hlp4tfww.cloudfront.net": "advalo", - "ahcdn.com": "advanced_hosters", - "pix-cdn.org": "advanced_hosters", - "s3.advarkads.com": "advark", - "adventori.com": "adventori", - "adnext.fr": "adverline", - "adverline.com": "adverline", - "surinter.net": "adverline", - "adversaldisplay.com": "adversal", - "adversalservers.com": "adversal", - "go.adversal.com": "adversal", - "adverserve.net": "adverserve", - "ad.adverteerdirect.nl": "adverteerdirect", - "adverticum.net": "adverticum", - "advertise.com": "advertise.com", - "advertisespace.com": "advertisespace", - "adsdk.com": "advertising.com", - "advertising.com": "advertising.com", - "aol.com": "advertising.com", - "atwola.com": "advertising.com", - "pictela.net": "advertising.com", - "verizonmedia.com": "advertising.com", - "advertlets.com": "advertlets", - "advertserve.com": "advertserve", - "advidi.com": "advidi", - "am10.ru": "advmaker.ru", - "am15.net": "advmaker.ru", - "advolution.de": "advolution", - "adwebster.com": "adwebster", - "ads.adwitserver.com": "adwit", - "adworx.at": "adworx.at", - "adworxs.net": "adworxs.net", - "adxion.com": "adxion", - "adxpansion.com": "adxpansion", - "ads.adxpose.com": "adxpose", - "event.adxpose.com": "adxpose", - "servedby.adxpose.com": "adxpose", - "adxprtz.com": "adxprtz.com", - "adyoulike.com": "adyoulike", - "omnitagjs.com": "adyoulike", - "adzerk.net": "adzerk", - "adzly.com": "adzly", - "aemediatraffic.com": "aemediatraffic", - "hprofits.com": "aemediatraffic", - "amxdt.com": "aerify_media", - "aerisapi.com": "aeris_weather", - "aerisweather.com": "aeris_weather", - "affectv.com": "affectv", - "go.affec.tv": "affectv", - "hybridtheory.com": "affectv", - "track.affiliate-b.com": "affiliate-b", - "affiliate4you.nl": "affiliate4you", - "ads.affbuzzads.com": "affiliatebuzz", - "affiliatefuture.com": "affiliatefuture", - "affiliatelounge.com": "affiliatelounge", - "affiliation-france.com": "affiliation_france", - "affiliator.com": "affiliator", - "affiliaweb.fr": "affiliaweb", - "banner-rotation.com": "affilinet", - "webmasterplan.com": "affilinet", - "affimax.de": "affimax", - "affinity.com": "affinity", - "countby.com": "affinity.by", - "affiz.net": "affiz_cpm", - "pml.afftrack.com": "afftrack", - "afgr2.com": "afgr2.com", - "v2.afilio.com.br": "afilio", - "afsanalytics.com": "afs_analystics", - "ads.aftonbladet.se": "aftonbladet_ads", - "aftv-serving.bid": "aftv-serving.bid", - "agkn.com": "aggregate_knowledge", - "agilone.com": "agilone", - "adview.pl": "agora", - "pingagenow.com": "ahalogy", - "aimediagroup.com": "ai_media_group", - "advombat.ru": "aidata", - "aidata.io": "aidata", - "aim4media.com": "aim4media", - "muscache.com": "airbnb", - "musthird.com": "airbnb", - "airbrake.io": "airbrake", - "airpr.com": "airpr.com", - "ab.airpush.com": "airpush", - "abmr.net": "akamai_technologies", - "akamai.net": "akamai_technologies", - "akamaihd.net": "akamai_technologies", - "akamaized.net": "akamai_technologies", - "akstat.io": "akamai_technologies", - "edgekey.net": "akamai_technologies", - "edgesuite.net": "akamai_technologies", - "imiclk.com": "akamai_technologies", - "akamoihd.net": "akamoihd.net", - "adn-d.sp.gmossp-sp.jp": "akane", - "akanoo.com": "akanoo", - "akavita.com": "akavita", - "ads.albawaba.com": "al_bawaba_advertising", - "serve.albacross.com": "albacross", - "aldi-international.com": "aldi-international.com", - "alenty.com": "alenty", - "alephd.com": "alephd.com", - "alexametrics.com": "alexa_metrics", - "d31qbv1cthcecs.cloudfront.net": "alexa_metrics", - "d5nxst8fruw4z.cloudfront.net": "alexa_metrics", - "alexa.com": "alexa_traffic_rank", - "algolia.com": "algolia.net", - "algolia.net": "algolia.net", - "algovid.com": "algovid.com", - "alibaba.com": "alibaba.com", - "alicdn.com": "alibaba.com", - "alipay.com": "alipay.com", - "websitealive.com": "alivechat", - "allegroimg.com": "allegro.pl", - "allegrostatic.com": "allegro.pl", - "allegrostatic.pl": "allegro.pl", - "ngacm.com": "allegro.pl", - "ngastatic.com": "allegro.pl", - "i.btg360.com.br": "allin", - "allo-pages.fr": "allo-pages.fr", - "allotraffic.com": "allotraffic", - "edge.alluremedia.com.au": "allure_media", - "allyes.com": "allyes", - "inputs.alooma.com": "alooma", - "arena.altitude-arena.com": "altitude_digital", - "amadesa.com": "amadesa", - "amazon.ca": "amazon", - "amazon.co.jp": "amazon", - "amazon.co.uk": "amazon", - "amazon.com": "amazon", - "amazon.de": "amazon", - "amazon.es": "amazon", - "amazon.fr": "amazon", - "amazon.it": "amazon", - "d3io1k5o0zdpqr.cloudfront.net": "amazon", - "amazon-adsystem.com": "amazon_adsystem", - "serving-sys.com": "amazon_adsystem", - "sizmek.com": "amazon_adsystem", - "assoc-amazon.ca": "amazon_associates", - "assoc-amazon.co.uk": "amazon_associates", - "assoc-amazon.com": "amazon_associates", - "assoc-amazon.de": "amazon_associates", - "assoc-amazon.fr": "amazon_associates", - "assoc-amazon.jp": "amazon_associates", - "images-amazon.com": "amazon_cdn", - "media-amazon.com": "amazon_cdn", - "ssl-images-amazon.com": "amazon_cdn", - "cloudfront.net": "amazon_cloudfront", - "axx-eu.amazon-adsystem.com": "amazon_mobile_ads", - "amazonpay.com": "amazon_payments", - "payments-amazon.com": "amazon_payments", - "aiv-cdn.net": "amazon_video", - "amazonaws.com": "amazon_web_services", - "amazonwebservices.com": "amazon_web_services", - "awsstatic.com": "amazon_web_services", - "adnetwork.net.vn": "ambient_digital", - "adnetwork.vn": "ambient_digital", - "ambientplatform.vn": "ambient_digital", - "amgload.net": "amgload.net", - "amoad.com": "amoad", - "ad.amgdgt.com": "amobee", - "ads.amgdgt.com": "amobee", - "amobee.com": "amobee", - "collective-media.net": "amp_platform", - "amplitude.com": "amplitude", - "d24n15hnbwhuhn.cloudfront.net": "amplitude", - "ampproject.org": "ampproject.org", - "anametrix.net": "anametrix", - "ancestrycdn.com": "ancestry_cdn", - "ancoraplatform.com": "ancora", - "anetwork.ir": "anetwork", - "aniview.com": "aniview.com", - "a-ads.com": "anonymousads", - "anormal-tracker.de": "anormal_tracker", - "answerscloud.com": "answers_cloud_service", - "anthill.vn": "ants", - "ants.vn": "ants", - "rt.analytics.anvato.net": "anvato", - "tkx2-prod.anvato.net": "anvato", - "w3.cdn.anvato.net": "anvato", - "player.anyclip.com": "anyclip", - "video-loader.com": "aol_be_on", - "aolcdn.com": "aol_cdn", - "isp.netscape.com": "aol_cdn", - "apa.at": "apa.at", - "apester.com": "apester", - "apicit.net": "apicit.net", - "carrierzone.com": "aplus_analytics", - "appcues.com": "appcues", - "appdynamics.com": "appdynamics", - "de8of677fyt0b.cloudfront.net": "appdynamics", - "eum-appdynamics.com": "appdynamics", - "jscdn.appier.net": "appier", - "applifier.com": "applifier", - "assets.applovin.com": "applovin", - "appmetrx.com": "appmetrx", - "adnxs.com": "appnexus", - "adnxs.net": "appnexus", - "appsflyer.com": "appsflyer", - "adne.tv": "apptv", - "readserver.net": "apptv", - "www.apture.com": "apture", - "arcpublishing.com": "arcpublishing", - "ard.de": "ard.de", - "areyouahuman.com": "are_you_a_human", - "arkoselabs.com": "arkoselabs.com", - "art19.com": "art19", - "banners.advsnx.net": "artimedia", - "artlebedev.ru": "artlebedev.ru", - "ammadv.it": "aruba_media_marketing", - "arubamediamarketing.it": "aruba_media_marketing", - "cya2.net": "arvato_canvas_fp", - "asambeauty.com": "asambeauty.com", - "ask.com": "ask.com", - "aspnetcdn.com": "aspnetcdn", - "cdn.astronomer.io": "astronomer", - "ati-host.net": "at_internet", - "aticdn.net": "at_internet", - "xiti.com": "at_internet", - "atedra.com": "atedra", - "oadts.com": "atg_group", - "as00.estara.com": "atg_optimization", - "atgsvcs.com": "atg_recommendations", - "adbureau.net": "atlas", - "atdmt.com": "atlas", - "atlassbx.com": "atlas", - "track.roiservice.com": "atlas_profitbuilder", - "atl-paas.net": "atlassian.net", - "atlassian.com": "atlassian.net", - "atlassian.net": "atlassian.net", - "d12ramskps3070.cloudfront.net": "atlassian.net", - "d1xfq2052q7thw.cloudfront.net": "atlassian_marketplace", - "marketplace.atlassian.com": "atlassian_marketplace", - "atomz.com": "atomz_search", - "atsfi.de": "atsfi_de", - "cdn.attracta.com": "attracta", - "locayta.com": "attraqt", - "ads.audience2media.com": "audience2media", - "qwobl.net": "audience_ad_network", - "revsci.net": "audience_science", - "wunderloop.net": "audience_science", - "12mlbe.com": "audiencerate", - "audiencesquare.com": "audiencesquare.com", - "auditude.com": "auditude", - "audtd.com": "audtd.com", - "cdn.augur.io": "augur", - "aumago.com": "aumago", - "clicktracks.com": "aurea_clicktracks", - "ausgezeichnet.org": "ausgezeichnet_org", - "advertising.gov.au": "australia.gov", - "auth0.com": "auth0", - "ai.autoid.com": "autoid", - "optimost.com": "autonomy", - "oc-track.autonomycloud.com": "autonomy_campaign", - "track.yieldsoftware.com": "autonomy_campaign", - "api.autopilothq.com": "autopilothq", - "autoscout24.com": "autoscout24.com", - "autoscout24.net": "autoscout24.com", - "avail.net": "avail", - "analytics.avanser.com.au": "avanser", - "avmws.com": "avant_metrics", - "avantlink.com": "avantlink", - "ads.avazu.net": "avazu_network", - "avenseo.com": "avenseo", - "adspdbl.com": "avid_media", - "avocet.io": "avocet", - "aweber.com": "aweber", - "awin.com": "awin", - "awin1.com": "awin", - "perfb.com": "awin", - "ad.globe7.com": "axill", - "azadify.com": "azadify", - "azureedge.net": "azureedge.net", - "b2bcontext.ru": "b2bcontext", - "b2bvideo.ru": "b2bvideo", - "babator.com": "babator.com", - "backbeatmedia.com": "back_beat_media", - "widgets.backtype.com": "backtype_widgets", - "bahn.de": "bahn_de", - "img-bahn.de": "bahn_de", - "baidu.com": "baidu_ads", - "baidustatic.com": "baidu_ads", - "bdimg.com": "baidu_static", - "bdstatic.com": "baidu_static", - "baletingo.com": "baletingo.com", - "bangdom.com": "bangdom.com", - "widgets.bankrate.com": "bankrate", - "bannerconnect.net": "banner_connect", - "bannerflow.com": "bannerflow.com", - "bannerplay.com": "bannerplay", - "cdn.bannersnack.com": "bannersnack", - "dn3y71tq7jf07.cloudfront.net": "barilliance", - "getbarometer.s3.amazonaws.com": "barometer", - "basilic.io": "basilic.io", - "batanga.com": "batanga_network", - "t4ft.de": "batch_media", - "bauernative.com": "bauer_media", - "baur.de": "baur.de", - "baynote.net": "baynote_observer", - "bazaarvoice.com": "bazaarvoice", - "bbci.co.uk": "bbci", - "tracking.bd4travel.com": "bd4travel", - "beopinion.com": "be_opinion", - "bfmio.com": "beachfront", - "beaconads.com": "beacon_ad_network", - "beampulse.com": "beampulse.com", - "beanstalkdata.com": "beanstalk_data", - "bebi.com": "bebi", - "beeketing.com": "beeketing.com", - "beeline.ru": "beeline.ru", - "bidr.io": "beeswax", - "tracker.beezup.com": "beezup", - "begun.ru": "begun", - "behavioralengine.com": "behavioralengine", - "belboon.de": "belboon_gmbh", - "cdn.belco.io": "belco", - "belstat.be": "belstat", - "belstat.com": "belstat", - "belstat.de": "belstat", - "belstat.fr": "belstat", - "belstat.nl": "belstat", - "bemobile.ua": "bemobile.ua", - "tag.benchplatform.com": "bench_platform", - "betterttv.net": "betterttv", - "betweendigital.com": "betweendigital.com", - "intencysrv.com": "betweendigital.com", - "bid.run": "bid.run", - "bidgear.com": "bidgear", - "bidswitch.net": "bidswitch", - "exe.bid": "bidswitch", - "bttrack.com": "bidtellect", - "bidtheatre.com": "bidtheatre", - "bidvertiser.com": "bidvertiser", - "bigmobileads.com": "big_mobile", - "bigcommerce.com": "bigcommerce.com", - "bigmir.net": "bigmir.net", - "bigpoint-payment.com": "bigpoint", - "bigpoint.com": "bigpoint", - "bigpoint.net": "bigpoint", - "bpcdn.net": "bigpoint", - "bpsecure.com": "bigpoint", - "bildstatic.de": "bild", - "ad-cdn.bilgin.pro": "bilgin_pro", - "pixel.bilinmedia.net": "bilin", - "bat.r.msn.com": "bing_ads", - "bing.com": "bing_ads", - "bing.net": "bing_ads", - "virtualearth.net": "bing_maps", - "view.binlayer.com": "binlayer", - "widgets.binotel.com": "binotel", - "esendra.fi": "bisnode", - "bitcoinplus.com": "bitcoin_miner", - "bit.ly": "bitly", - "bitrix.de": "bitrix", - "bitrix.info": "bitrix", - "bitrix.ru": "bitrix", - "bitrix24.com": "bitrix", - "bitrix24.com.br": "bitrix", - "traffic.adxprts.com": "bizcn", - "jssr.jd.com": "blackdragon", - "blau.de": "blau.de", - "bnmla.com": "blink_new_media", - "blismedia.com": "blis", - "blogad.com.tw": "blogad", - "blogbang.com": "blogbang", - "www.blogcatalog.com": "blogcatalog", - "track.blogcounter.de": "blogcounter", - "blogfoster.com": "blogfoster.com", - "bloggerads.net": "bloggerads", - "blogher.com": "blogher", - "blogherads.com": "blogher", - "blogimg.jp": "blogimg.jp", - "blogsmithmedia.com": "blogsmithmedia.com", - "blogblog.com": "blogspot_com", - "blogger.com": "blogspot_com", - "blogspot.com": "blogspot_com", - "brcdn.com": "bloomreach", - "brsrvr.com": "bloomreach", - "brtstats.com": "bloomreach", - "offerpoint.net": "blue_cherry_group", - "blueserving.com": "blue_seed", - "blueconic.net": "blueconic.net", - "bluecore.com": "bluecore", - "triggeredmail.appspot.com": "bluecore", - "bkrtx.com": "bluekai", - "bluekai.com": "bluekai", - "adrevolver.com": "bluelithium", - "bluelithium.com": "bluelithium", - "bmmetrix.com": "bluemetrix", - "japanmetrix.jp": "bluemetrix", - "bluenewsupdate.info": "bluenewsupdate.info", - "bluestreak.com": "bluestreak", - "bluetriangletech.com": "bluetriangle", - "btttag.com": "bluetriangle", - "bodelen.com": "bodelen.com", - "tracking.bol.com": "bol_affiliate_program", - "qb.boldapps.net": "bold", - "secure.apps.shappify.com": "bold", - "boldchat.com": "boldchat", - "boltdns.net": "boltdns.net", - "ml314.com": "bombora", - "bongacams.com": "bongacams.com", - "bonial.com": "bonial", - "bonialconnect.com": "bonial", - "bonialserviceswidget.de": "bonial", - "boo-box.com": "boo-box", - "booking.com": "booking.com", - "bstatic.com": "booking.com", - "boostbox.com.br": "boost_box", - "boostervideo.ru": "booster_video", - "bootstrapcdn.com": "bootstrap", - "borrango.com": "borrango.com", - "scan.botscanner.com": "botscanner", - "boudja.com": "boudja.com", - "bounceexchange.com": "bounce_exchange", - "bouncex.com": "bouncex", - "bouncex.net": "bouncex", - "j.clickdensity.com": "box_uk", - "boxever.com": "boxever", - "brainient.com": "brainient", - "brainsins.com": "brainsins", - "d2xkqxdy6ewr93.cloudfront.net": "brainsins", - "app.link": "branch_metrics", - "branch.io": "branch_metrics", - "brandaffinity.net": "brand_affinity", - "go.cpmadvisors.com": "brand_networks", - "optorb.com": "brand_networks", - "brandmetrics.com": "brandmetrics.com", - "brandreachsys.com": "brandreach", - "rtbidder.net": "brandscreen", - "brandwire.tv": "brandwire.tv", - "branica.com": "branica", - "appboycdn.com": "braze", - "brealtime.com": "brealtime", - "bridgetrack.com": "bridgetrack", - "brightcove.com": "brightcove", - "brightcove.net": "brightcove_player", - "analytics.brightedge.com": "brightedge", - "munchkin.brightfunnel.com": "brightfunnel", - "brightonclick.com": "brightonclick.com", - "btrll.com": "brightroll", - "p.brilig.com": "brilig", - "brillen.de": "brillen.de", - "broadstreetads.com": "broadstreet", - "bm23.com": "bronto", - "brow.si": "brow.si", - "browser-statistik.de": "browser-statistik", - "browser-update.org": "browser_update", - "btncdn.com": "btncdn.com", - "in.bubblestat.com": "bubblestat", - "brighteroption.com": "buddy_media", - "bufferapp.com": "buffer_button", - "bugherd.com": "bugherd.com", - "bugsnag.com": "bugsnag", - "d2wy8f7a9ursnm.cloudfront.net": "bugsnag", - "bulkhentai.com": "bulkhentai.com", - "bumlam.com": "bumlam.com", - "bunchbox.co": "bunchbox", - "bf-ad.net": "burda", - "bf-tools.net": "burda", - "bstatic.de": "burda_digital_systems", - "burstbeacon.com": "burst_media", - "burstnet.com": "burst_media", - "burt.io": "burt", - "d3q6px0y2suh5n.cloudfront.net": "burt", - "rich-agent.s3.amazonaws.com": "burt", - "richmetrics.com": "burt", - "stats.businessol.com": "businessonline_analytics", - "buysellads.com": "buysellads", - "servedby-buysellads.com": "buysellads", - "buzzadexchange.com": "buzzadexchange.com", - "buzzador.com": "buzzador", - "buzzfed.com": "buzzfeed", - "bwbx.io": "bwbx.io", - "bypass.jp": "bypass", - "c1exchange.com": "c1_exchange", - "c3metrics.com": "c3_metrics", - "c3tag.com": "c3_metrics", - "c8.net.ua": "c8_network", - "cackle.me": "cackle.me", - "d1cerpgff739r9.cloudfront.net": "cadreon", - "d1qpxk1wfeh8v1.cloudfront.net": "cadreon", - "callpage.io": "call_page", - "callbackhunter.com": "callbackhunter", - "callmeasurement.com": "callbox", - "callibri.ru": "callibri", - "callrail.com": "callrail", - "calltracking.ru": "calltracking", - "caltat.com": "caltat.com", - "cam-content.com": "cam-content.com", - "camakaroda.com": "camakaroda.com", - "s.edkay.com": "campus_explorer", - "canddi.com": "canddi", - "canvas.net": "canvas", - "canvasnetwork.com": "canvas", - "du11hjcvx0uqb.cloudfront.net": "canvas", - "kdata.fr": "capitaldata", - "captora.com": "captora", - "edge.capturemedia.network": "capture_media", - "cdn.capturly.com": "capturly", - "route.carambo.la": "carambola", - "carbonads.com": "carbonads", - "carbonads.net": "carbonads", - "fusionads.net": "carbonads", - "cardinalcommerce.com": "cardinal", - "cardlytics.com": "cardlytics", - "cdn.carrotquest.io": "carrot_quest", - "api.cartstack.com": "cartstack", - "caspion.com": "caspion", - "t.castle.io": "castle", - "3gl.net": "catchpoint", - "cbox.ws": "cbox", - "adlog.com.com": "cbs_interactive", - "cbsinteractive.com": "cbs_interactive", - "dw.com.com": "cbs_interactive", - "ccmbg.com": "ccm_benchmark", - "admission.net": "cdk_digital_marketing", - "cdn-net.com": "cdn-net.com", - "cdn13.com": "cdn13.com", - "cdn77.com": "cdn77", - "cdn77.org": "cdn77", - "cdnetworks.com": "cdnetworks.net", - "cdnetworks.net": "cdnetworks.net", - "cdnnetwok.xyz": "cdnnetwok_xyz", - "cdnondemand.org": "cdnondemand.org", - "cdnsure.com": "cdnsure.com", - "cdnvideo.com": "cdnvideo.com", - "cdnwidget.com": "cdnwidget.com", - "cedexis-radar.net": "cedexis_radar", - "cedexis-test.com": "cedexis_radar", - "cedexis.com": "cedexis_radar", - "cedexis.fastlylb.net": "cedexis_radar", - "cedexis.net": "cedexis_radar", - "celebrus.com": "celebrus", - "celtra.com": "celtra", - "cendyn.adtrack.calls.net": "cendyn", - "centraltag.com": "centraltag", - "brand-server.com": "centro", - "speed-trap.nl": "cerberus_speed-trap", - "link.ixs1.net": "certainsource", - "hits.e.cl": "certifica_metric", - "certona.net": "certona", - "res-x.com": "certona", - "gsn.chameleon.ad": "chameleon", - "chango.ca": "chango", - "chango.com": "chango", - "channelintelligence.com": "channel_intelligence", - "cptrack.de": "channel_pilot_solutions", - "channeladvisor.com": "channeladvisor", - "searchmarketing.com": "channeladvisor", - "channelfinder.net": "channelfinder", - "chaordicsystems.com": "chaordic", - "chartbeat.com": "chartbeat", - "chartbeat.net": "chartbeat", - "chaser.ru": "chaser", - "cloud.chatbeacon.io": "chat_beacon", - "chatango.com": "chatango", - "call.chatra.io": "chatra", - "chaturbate.com": "chaturbate.com", - "chatwing.com": "chatwing", - "checkmystats.com.au": "checkmystats", - "chefkoch-cdn.de": "chefkoch_de", - "chefkoch.de": "chefkoch_de", - "tracker.chinmedia.vn": "chin_media", - "chinesean.com": "chinesean", - "chitika.net": "chitika", - "choicestream.com": "choicestream", - "api.getchute.com": "chute", - "media.chute.io": "chute", - "iqcontentplatform.de": "circit", - "data.circulate.com": "circulate", - "p.cityspark.com": "city_spark", - "cityads.ru": "cityads", - "gameleads.ru": "cityads", - "ciuvo.com": "ciuvo.com", - "widget.civey.com": "civey_widgets", - "civicscience.com": "civicscience.com", - "ciweb.ciwebgroup.com": "ciwebgroup", - "clcknads.pro": "clcknads.pro", - "pulseradius.com": "clear_pier", - "clearbit.com": "clearbit.com", - "clearsale.com.br": "clearsale", - "tag.clrstm.com": "clearstream.tv", - "api.clerk.io": "clerk.io", - "cleverpush.com": "clever_push", - "wzrkt.com": "clever_tap", - "cleversite.ru": "cleversite", - "script.click360.io": "click360", - "clickandchat.com": "click_and_chat", - "software.clickback.com": "click_back", - "hit.clickaider.com": "clickaider", - "clickbank.net": "clickbank", - "cbproads.com": "clickbank_proads", - "adtoll.com": "clickbooth", - "clickbooth.com": "clickbooth", - "clickboothlnk.com": "clickbooth", - "clickcease.com": "clickcease", - "clickcertain.com": "clickcertain", - "remarketstats.com": "clickcertain", - "clickdesk.com": "clickdesk", - "analytics.clickdimensions.com": "clickdimensions", - "clickequations.net": "clickequations", - "clickexperts.net": "clickexperts", - "doublemax.net": "clickforce", - "clickinc.com": "clickinc", - "clickintext.net": "clickintext", - "clickky.biz": "clickky", - "9nl.be": "clickmeter", - "9nl.com": "clickmeter", - "9nl.eu": "clickmeter", - "9nl.it": "clickmeter", - "9nl.me": "clickmeter", - "clickmeter.com": "clickmeter", - "clickonometrics.pl": "clickonometrics", - "clickpoint.com": "clickpoint", - "clickpoint.it": "clickpoint", - "clickprotector.com": "clickprotector", - "clickreport.com": "clickreport", - "doogleonduty.com": "clickreport", - "ctn.go2cloud.org": "clicks_thru_networks", - "clicksor.com": "clicksor", - "hatid.com": "clicksor", - "lzjl.com": "clicksor", - "myroitracking.com": "clicksor", - "clicktale.com": "clicktale", - "clicktale.net": "clicktale", - "clicktale.pantherssl.com": "clicktale", - "clicktalecdn.sslcs.cdngc.net": "clicktale", - "clicktripz.com": "clicktripz", - "clickwinks.com": "clickwinks", - "getclicky.com": "clicky", - "staticstuff.net": "clicky", - "clickyab.com": "clickyab", - "clicmanager.fr": "clicmanager", - "eplayer.clipsyndicate.com": "clip_syndicate", - "www.is1.clixgalore.com": "clixgalore", - "clixmetrix.com": "clixmetrix", - "clixsense.com": "clixsense", - "cloud-media.fr": "cloud-media.fr", - "cloudflare.com": "cloudflare", - "cloudflare.net": "cloudflare", - "cloudimg.io": "cloudimage.io", - "cloudinary.com": "cloudinary", - "clovenetwork.com": "clove_network", - "clustrmaps.com": "clustrmaps", - "cnbc.com": "cnbc", - "cnetcontent.com": "cnetcontent.com", - "cnstats.ru": "cnstats", - "cnzz.com": "cnzz.com", - "umeng.com": "cnzz.com", - "acc-hd.de": "coadvertise", - "client.cobrowser.net": "cobrowser", - "codeonclick.com": "codeonclick.com", - "cogocast.net": "cogocast", - "coin-have.com": "coin_have", - "appsha1.cointraffic.io": "coin_traffic", - "authedmine.com": "coinhive", - "coin-hive.com": "coinhive", - "coinhive.com": "coinhive", - "coinurl.com": "coinurl", - "coll1onf.com": "coll1onf.com", - "coll2onf.com": "coll2onf.com", - "service.collarity.com": "collarity", - "static.clmbtech.com": "columbia_online", - "combotag.com": "combotag", - "pdk.theplatform.com": "comcast_technology_solutions", - "comm100.cn": "comm100", - "comm100.com": "comm100", - "cdn-cs.com": "commerce_sciences", - "cdn.mercent.com": "commercehub", - "link.mercent.com": "commercehub", - "commercialvalue.org": "commercialvalue.org", - "afcyhf.com": "commission_junction", - "anrdoezrs.net": "commission_junction", - "apmebf.com": "commission_junction", - "awltovhc.com": "commission_junction", - "emjcd.com": "commission_junction", - "ftjcfx.com": "commission_junction", - "lduhtrp.net": "commission_junction", - "qksz.net": "commission_junction", - "tkqlhce.com": "commission_junction", - "tqlkg.com": "commission_junction", - "yceml.net": "commission_junction", - "communicatorcorp.com": "communicator_corp", - "wowanalytics.co.uk": "communigator", - "c-col.com": "competexl", - "c.compete.com": "competexl", - "complex.com": "complex_media_network", - "complexmedianetwork.com": "complex_media_network", - "comprigo.com": "comprigo", - "comscore.com": "comscore", - "zqtk.net": "comscore", - "conative.de": "conative.de", - "condenast.com": "condenastdigital.com", - "conduit-banners.com": "conduit", - "conduit-data.com": "conduit", - "conduit.com": "conduit", - "confirmit.com": "confirmit", - "congstar.de": "congstar.de", - "connatix.com": "connatix.com", - "connected-by.connectad.io": "connectad", - "cdn.connecto.io": "connecto", - "connexity.net": "connexity", - "cxt.ms": "connexity", - "connextra.com": "connextra", - "rs6.net": "constant_contact", - "serverbid.com": "consumable", - "contactatonce.com": "contact_at_once", - "adrolays.de": "contact_impact", - "c-i.as": "contact_impact", - "df-srv.de": "contact_impact", - "d1uwd25yvxu96k.cloudfront.net": "contactme", - "static.contactme.com": "contactme", - "contaxe.com": "contaxe", - "content.ad": "content.ad", - "ingestion.contentinsights.com": "content_insights", - "contentexchange.me": "contentexchange.me", - "ctfassets.net": "contentful_gmbh", - "contentpass.de": "contentpass", - "contentpass.net": "contentpass", - "contentsquare.net": "contentsquare.net", - "d1aug3dv5magti.cloudfront.net": "contentwrx", - "d39se0h2uvfakd.cloudfront.net": "contentwrx", - "c-on-text.com": "context", - "intext.contextad.pl": "context.ad", - "continum.net": "continum_net", - "s2.contribusourcesyndication.com": "contribusource", - "hits.convergetrack.com": "convergetrack", - "fastclick.net": "conversant", - "mediaplex.com": "conversant", - "mplxtms.com": "conversant", - "cm-commerce.com": "conversio", - "media.conversio.com": "conversio", - "c.conversionlogic.net": "conversion_logic", - "conversionruler.com": "conversionruler", - "conversionsbox.com": "conversions_box", - "conversionsondemand.com": "conversions_on_demand", - "ant.conversive.nl": "conversive", - "convertexperiments.com": "convert", - "d3sjgucddk68ji.cloudfront.net": "convertfox", - "convertro.com": "convertro", - "d1ivexoxmp59q7.cloudfront.net": "convertro", - "conviva.com": "conviva", - "cookieconsent.silktide.com": "cookie_consent", - "cookie-script.com": "cookie_script", - "cookiebot.com": "cookiebot", - "cookieq.com": "cookieq", - "lite.piclens.com": "cooliris", - "copacet.com": "copacet", - "raasnet.com": "coreaudience", - "coremotives.com": "coremotives", - "coull.com": "coull", - "cpmrocket.com": "cpm_rocket", - "cpmprofit.com": "cpmprofit", - "cpmstar.com": "cpmstar", - "captifymedia.com": "cpx.to", - "cpx.to": "cpx.to", - "cqcounter.com": "cq_counter", - "cqq5id8n.com": "cqq5id8n.com", - "cquotient.com": "cquotient.com", - "craftkeys.com": "craftkeys", - "ads.crakmedia.com": "crakmedia_network", - "craktraffic.com": "crakmedia_network", - "crankyads.com": "crankyads", - "cetrk.com": "crazy_egg", - "crazyegg.com": "crazy_egg", - "dnn506yrbagrg.cloudfront.net": "crazy_egg", - "creafi-online-media.com": "creafi", - "createjs.com": "createjs", - "creativecommons.org": "creative_commons", - "brandwatch.com": "crimsonhexagon_com", - "crimsonhexagon.com": "crimsonhexagon_com", - "hexagon-analytics.com": "crimsonhexagon_com", - "ctnsnet.com": "crimtan", - "crisp.chat": "crisp", - "crisp.im": "crisp", - "criteo.com": "criteo", - "criteo.net": "criteo", - "p.crm4d.com": "crm4d", - "crossengage.io": "crossengage", - "crosspixel.net": "crosspixel", - "crsspxl.com": "crosspixel", - "crosssell.info": "crosssell.info", - "crossss.com": "crossss", - "widget.crowdignite.com": "crowd_ignite", - "static.crowdscience.com": "crowd_science", - "ss.crowdprocess.com": "crowdprocess", - "our.glossip.nl": "crowdynews", - "widget.breakingburner.com": "crowdynews", - "widget.crowdynews.com": "crowdynews", - "searchg2.crownpeak.net": "crownpeak", - "snippet.omm.crownpeak.com": "crownpeak", - "cryptoloot.pro": "cryptoloot_miner", - "ctnetwork.hu": "ctnetwork", - "adzhub.com": "ctrlshift", - "data.withcubed.com": "cubed", - "cuelinks.com": "cuelinks", - "cdn.cupinteractive.com": "cup_interactive", - "curse.com": "curse.com", - "cursecdn.com": "cursecdn.com", - "assets.customer.io": "customer.io", - "widget.customerly.io": "customerly", - "cxense.com": "cxense", - "cxo.name": "cxo.name", - "cyberwing.co.jp": "cyber_wing", - "cybersource.com": "cybersource", - "cygnus.com": "cygnus", - "da-ads.com": "da-ads.com", - "dailymail.co.uk": "dailymail.co.uk", - "dailymotion.com": "dailymotion", - "dailymotionbus.com": "dailymotion", - "dm-event.net": "dailymotion", - "dmcdn.net": "dailymotion", - "dmxleo.com": "dailymotion_advertising", - "ds1.nl": "daisycon", - "dantrack.net": "dantrack.net", - "dmclick.cn": "darwin_marketing", - "tags.dashboardad.net": "dashboard_ad", - "datacaciques.com": "datacaciques.com", - "datacoral.com": "datacoral", - "abandonaid.com": "datacrushers", - "datacrushers.com": "datacrushers", - "datadome.co": "datadome", - "optimahub.com": "datalicious_datacollector", - "supert.ag": "datalicious_supertag", - "inextaction.net": "datalogix", - "nexac.com": "datalogix", - "datamind.ru": "datamind.ru", - "datatables.net": "datatables", - "adunits.datawrkz.com": "datawrkz", - "dataxpand.script.ag": "dataxpand", - "tc.dataxpand.com": "dataxpand", - "w55c.net": "dataxu", - "datds.net": "datds.net", - "pro-market.net": "datonics", - "displaymarketplace.com": "datran", - "davebestdeals.com": "davebestdeals.com", - "dawandastatic.com": "dawandastatic.com", - "dc-storm.com": "dc_stormiq", - "h4k5.com": "dc_stormiq", - "stormcontainertag.com": "dc_stormiq", - "stormiq.com": "dc_stormiq", - "dcbap.com": "dcbap.com", - "dcmn.com": "dcmn.com", - "statslogger.rocket.persgroep.cloud": "de_persgroep", - "deadlinefunnel.com": "deadline_funnel", - "cc2.dealer.com": "dealer.com", - "d9lq0o81skkdj.cloudfront.net": "dealer.com", - "esm1.net": "dealer.com", - "static.dealer.com": "dealer.com", - "decibelinsight.net": "decibel_insight", - "ads.dedicatedmedia.com": "dedicated_media", - "api.deep.bi": "deep.bi", - "deepintent.com": "deepintent.com", - "defpush.com": "defpush.com", - "deichmann.com": "deichmann.com", - "vxml4.delacon.com.au": "delacon", - "tracking.percentmobile.com": "delivr", - "adaction.se": "delta_projects", - "de17a.com": "delta_projects", - "deluxe.script.ag": "deluxe", - "delvenetworks.com": "delve_networks", - "company-target.com": "demandbase", - "demandbase.com": "demandbase", - "dmd53.com": "demandmedia", - "dmtracker.com": "demandmedia", - "deqwas.net": "deqwas", - "devatics.com": "devatics", - "developermedia.com": "developer_media", - "dapxl.com": "deviantart.net", - "deviantart.net": "deviantart.net", - "my.blueadvertise.com": "dex_platform", - "dgm-au.com": "dgm", - "s2d6.com": "dgm", - "d31y97ze264gaa.cloudfront.net": "dialogtech", - "d3von6il1wr7wo.cloudfront.net": "dianomi", - "dianomi.com": "dianomi", - "dianomioffers.co.uk": "dianomi", - "tag.didit.com": "didit_blizzard", - "track.did-it.com": "didit_maestro", - "privacy-center.org": "didomi", - "digg.com": "digg_widget", - "digicert.com": "digicert_trust_seal", - "digidip.net": "digidip", - "digiglitzmarketing.go2cloud.org": "digiglitz", - "wtp101.com": "digilant", - "digioh.com": "digioh", - "lightboxcdn.com": "digioh", - "digitalgov.gov": "digital.gov", - "cookiereports.com": "digital_control_room", - "adtag.cc": "digital_nomads", - "adready.com": "digital_remedy", - "adreadytractions.com": "digital_remedy", - "cpxinteractive.com": "digital_remedy", - "directtrack.com": "digital_river", - "onenetworkdirect.net": "digital_river", - "track.digitalriver.com": "digital_river", - "dwin1.com": "digital_window", - "digiteka.net": "digiteka", - "ultimedia.com": "digiteka", - "digitru.st": "digitrust", - "widget.dihitt.com.br": "dihitt_badge", - "dimml.io": "dimml", - "keywordsconnect.com": "direct_keyword_link", - "directadvert.ru": "directadvert", - "directrev.com": "directrev", - "discordapp.com": "discord", - "d81mfvml8p5ml.cloudfront.net": "display_block", - "disqus.com": "disqus", - "disquscdn.com": "disqus", - "disqusads.com": "disqus_ads", - "distiltag.com": "distil_tag", - "districtm.ca": "districtm.io", - "districtm.io": "districtm.io", - "jsrdn.com": "distroscale", - "div.show": "div.show", - "stats.vertriebsassistent.de": "diva", - "tag.divvit.com": "divvit", - "d-msquared.com": "dm2", - "and.co.uk": "dmg_media", - "dmm.co.jp": "dmm", - "ctret.de": "dmwd", - "toolbar.dockvine.com": "dockvine", - "awecr.com": "docler", - "fwbntw.com": "docler", - "s.dogannet.tv": "dogannet", - "www.domodomain.com": "domodomain", - "donation-tools.org": "donationtools", - "doofinder.com": "doofinder.com", - "embed.doorbell.io": "doorbell.io", - "dotandad.com": "dotandmedia", - "trackedlink.net": "dotmailer", - "dotmetrics.net": "dotmetrics.net", - "dotomi.com": "dotomi", - "dtmc.com": "dotomi", - "dtmpub.com": "dotomi", - "double.net": "double.net", - "2mdn.net": "doubleclick", - "doubleclick.net": "doubleclick", - "invitemedia.com": "doubleclick", - "doublepimp.com": "doublepimp", - "doublepimpssl.com": "doublepimp", - "redcourtside.com": "doublepimp", - "xeontopa.com": "doublepimp", - "zerezas.com": "doublepimp", - "doubleverify.com": "doubleverify", - "wrating.com": "dratio", - "adsymptotic.com": "drawbridge", - "dreamlab.pl": "dreamlab.pl", - "drift.com": "drift", - "js.driftt.com": "drift", - "getdrip.com": "drip", - "dropbox.com": "dropbox.com", - "dropboxstatic.com": "dropbox.com", - "z5x.net": "dsnr_media_group", - "dsp-rambler.ru": "dsp_rambler", - "m6d.com": "dstillery", - "media6degrees.com": "dstillery", - "dtscout.com": "dtscout.com", - "dd-cdn.multiscreensite.com": "dudamobile", - "px.multiscreensite.com": "dudamobile", - "cdn-0.d41.co": "dun_and_bradstreet", - "cn01.dwstat.cn": "dwstat.cn", - "dynad.net": "dynad", - "dyntrk.com": "dynadmic", - "dyntracker.de": "dynamic_1001_gmbh", - "media01.eu": "dynamic_1001_gmbh", - "content.dl-rms.com": "dynamic_logic", - "dlqm.net": "dynamic_logic", - "questionmarket.com": "dynamic_logic", - "dynamicyield.com": "dynamic_yield", - "beacons.hottraffic.nl": "dynata", - "dynatrace.com": "dynatrace.com", - "dyncdn.me": "dyncdn.me", - "e-planning.net": "e-planning", - "eadv.it": "eadv", - "eanalyzer.de": "eanalyzer.de", - "early-birds.fr": "early_birds", - "cdn.earnify.com": "earnify", - "earnify.com": "earnify_tracker", - "easyads.bg": "easyads", - "easylist.club": "easylist_club", - "classistatic.de": "ebay", - "ebay-us.com": "ebay", - "ebay.com": "ebay", - "ebay.de": "ebay", - "ebayclassifiedsgroup.com": "ebay", - "ebaycommercenetwork.com": "ebay", - "ebaydesc.com": "ebay", - "ebayimg.com": "ebay", - "ebayrtm.com": "ebay", - "ebaystatic.com": "ebay", - "ad.about.co.kr": "ebay_korea", - "adcheck.about.co.kr": "ebay_korea", - "adn.ebay.com": "ebay_partner_network", - "beead.co.uk": "ebuzzing", - "beead.fr": "ebuzzing", - "beead.net": "ebuzzing", - "ebuzzing.com": "ebuzzing", - "ebz.io": "ebuzzing", - "echoenabled.com": "echo", - "eclick.vn": "eclick", - "econda-monitor.de": "econda", - "eco-tag.jp": "ecotag", - "ecustomeropinions.com": "edigitalresearch", - "effectivemeasure.net": "effective_measure", - "effiliation.com": "effiliation", - "egain.net": "egain", - "cloud-emea.analytics-egain.com": "egain_analytics", - "ehi-siegel.de": "ehi-siegel_de", - "ekmpinpoint.com": "ekmpinpoint", - "ekomi.de": "ekomi", - "elasticad.net": "elastic_ad", - "elasticbeanstalk.com": "elastic_beanstalk", - "elicitapp.com": "elicit", - "eloqua.com": "eloqua", - "en25.com": "eloqua", - "eluxer.net": "eluxer_net", - "tracker.emailaptitude.com": "email_aptitude", - "tag.email-attitude.com": "email_attitude", - "app.emarketeer.com": "emarketeer", - "embed.ly": "embed.ly", - "embedly.com": "embed.ly", - "emediate.dk": "emediate", - "emediate.eu": "emediate", - "emediate.se": "emediate", - "emetriq.de": "emetriq", - "e2ma.net": "emma", - "adinsight.co.kr": "emnet", - "colbenson.es": "empathy", - "emsmobile.de": "emsmobile.de", - "sitecompass.com": "encore_metrics", - "enectoanalytics.com": "enecto_analytics", - "trk.enecto.com": "enecto_analytics", - "track.engagesciences.com": "engage_sciences", - "widget.engageya.com": "engageya_widget", - "engagio.com": "engagio", - "engineseeker.com": "engineseeker", - "enquisite.com": "enquisite", - "adtlgc.com": "enreach", - "ats.tumri.net": "ensemble", - "ensighten.com": "ensighten", - "envolve.com": "envolve", - "cdn.callbackkiller.com": "envybox", - "email-reflex.com": "eperflex", - "epicgameads.com": "epic_game_ads", - "trafficmp.com": "epic_marketplace", - "adshost1.com": "epom", - "adshost2.com": "epom", - "epom.com": "epom", - "epoq.de": "epoq", - "banzaiadv.it": "eprice", - "eproof.com": "eproof", - "equitystory.com": "eqs_group", - "eqads.com": "eqworks", - "ero-advertising.com": "eroadvertising", - "eroadvertising.com": "eroadvertising", - "d15qhc0lu1ghnk.cloudfront.net": "errorception", - "errorception.com": "errorception", - "eshopcomp.com": "eshopcomp.com", - "espncdn.com": "espn_cdn", - "esprit.de": "esprit.de", - "cybermonitor.com": "estat", - "estat.com": "estat", - "teste-s3-maycon.s3.amazonaws.com": "etag", - "etahub.com": "etahub.com", - "etargetnet.com": "etarget", - "ethn.io": "ethnio", - "pages.etology.com": "etology", - "sa.etp-prod.com": "etp", - "etracker.com": "etracker", - "etracker.de": "etracker", - "sedotracker.com": "etracker", - "etrigue.com": "etrigue", - "etsystatic.com": "etsystatic", - "eulerian.net": "eulerian", - "eultech.fnac.com": "eulerian", - "ew3.io": "eulerian", - "euroads.dk": "euroads", - "euroads.fi": "euroads", - "euroads.no": "euroads", - "newpromo.europacash.com": "europecash", - "tracker.euroweb.net": "euroweb_counter", - "apptegic.com": "evergage.com", - "evergage.com": "evergage.com", - "listener.everstring.com": "everstring", - "waterfrontmedia.com": "everyday_health", - "betrad.com": "evidon", - "evidon.com": "evidon", - "evisitanalyst.com": "evisit_analyst", - "evisitcs.com": "evisit_analyst", - "websiteperform.com": "evisit_analyst", - "ads.exactdrive.com": "exact_drive", - "exactag.com": "exactag", - "exelator.com": "exelate", - "dynamicoxygen.com": "exitjunction", - "exitjunction.com": "exitjunction", - "exdynsrv.com": "exoclick", - "exoclick.com": "exoclick", - "exosrv.com": "exoclick", - "exoticads.com": "exoticads.com", - "expedia.com": "expedia", - "trvl-px.com": "expedia", - "eccmp.com": "experian", - "audienceiq.com": "experian_marketing_services", - "techlightenment.com": "experian_marketing_services", - "expo-max.com": "expo-max", - "server.exposebox.com": "expose_box", - "sf.exposebox.com": "expose_box_widgets", - "express.co.uk": "express.co.uk", - "d1lp05q4sghme9.cloudfront.net": "expressvpn", - "extreme-dm.com": "extreme_tracker", - "eyenewton.ru": "eye_newton", - "eyeota.net": "eyeota", - "eyereturn.com": "eyereturnmarketing", - "eyeviewads.com": "eyeview", - "ezakus.net": "ezakus", - "f11-ads.com": "f11-ads.com", - "facebook.com": "facebook", - "facebook.net": "facebook", - "fbcdn.net": "facebook_cdn", - "fbsbx.com": "facebook_cdn", - "graph.facebook.com": "facebook_graph", - "facetz.net": "facetz.dca", - "adsfac.eu": "facilitate_digital", - "adsfac.net": "facilitate_digital", - "adsfac.sg": "facilitate_digital", - "adsfac.us": "facilitate_digital", - "faktor.io": "faktor.io", - "thefancy.com": "fancy_widget", - "d1q7pknmpq2wkm.cloudfront.net": "fanplayr", - "fap.to": "fap.to", - "fastly-insights.com": "fastly_insights", - "fastly.net": "fastlylb.net", - "fastlylb.net": "fastlylb.net", - "fastpic.ru": "fastpic.ru", - "fmpub.net": "federated_media", - "fby.s3.amazonaws.com": "feedbackify", - "feedbackify.com": "feedbackify", - "feedburner.com": "feedburner.com", - "feedify.de": "feedify", - "feedjit.com": "feedjit", - "log.feedjit.com": "feedjit", - "tracking.feedperfect.com": "feedperfect", - "feedsportal.com": "feedsportal", - "feefo.com": "feefo", - "fidelity-media.com": "fidelity_media", - "fiksu.com": "fiksu", - "filamentapp.s3.amazonaws.com": "filament.io", - "fileserve.xyz": "fileserve", - "tools.financeads.net": "financeads", - "tracker.financialcontent.com": "financial_content", - "findizer.fr": "findizer.fr", - "findologic.com": "findologic.com", - "firebaseio.com": "firebaseio.com", - "firstimpression.io": "first_impression", - "fitanalytics.com": "fit_analytics", - "fivetran.com": "fivetran", - "flagads.net": "flag_ads", - "flagcounter.com": "flag_counter", - "flashtalking.com": "flashtalking", - "flattr.com": "flattr_button", - "flexlinks.com": "flexoffers", - "linkoffers.net": "flexoffers", - "flickr.com": "flickr_badge", - "staticflickr.com": "flickr_badge", - "lflipboard.com": "flipboard", - "flite.com": "flite", - "flixcdn.com": "flixcdn.com", - "flix360.com": "flixmedia", - "flixcar.com": "flixmedia", - "flocktory.com": "flocktory.com", - "flowplayer.org": "flowplayer", - "adingo.jp": "fluct", - "clicken.us": "fluent", - "strcst.net": "fluid", - "fluidads.co": "fluidads", - "fluidsurveys.com": "fluidsurveys", - "cdn.flurry.com": "flurry", - "data.flurry.com": "flurry", - "flx1.com": "flxone", - "flxpxl.com": "flxone", - "api.flyertown.ca": "flyertown", - "adservinghost.com": "fmadserving", - "adservinginternational.com": "fmadserving", - "special.matchtv.ru": "fonbet", - "kavijaseuranta.fi": "fonecta", - "fontawesome.com": "fontawesome_com", - "foodieblogroll.com": "foodie_blogroll", - "footprintlive.com": "footprint", - "footprintdns.com": "footprintdns.com", - "forcetrac.com": "forcetrac", - "fqsecure.com": "forensiq", - "fqtag.com": "forensiq", - "securepaths.com": "forensiq", - "4seeresults.com": "foresee", - "foresee.com": "foresee", - "cdn-static.formisimo.com": "formisimo", - "forter.com": "forter", - "fortlachanhecksof.info": "fortlachanhecksof.info", - "platform.foursquare.com": "foursquare_widget", - "fout.jp": "fout.jp", - "fimserve.com": "fox_audience_network", - "fncstatic.com": "foxnews_static", - "cdn.foxpush.net": "foxpush", - "foxpush.com": "foxpush", - "foxydeal.com": "foxydeal_com", - "yabidos.com": "fraudlogix", - "besucherstatistiken.com": "free_counter", - "compteurdevisite.com": "free_counter", - "contadorvisitasgratis.com": "free_counter", - "contatoreaccessi.com": "free_counter", - "freecounterstat.com": "free_counter", - "statcounterfree.com": "free_counter", - "webcontadores.com": "free_counter", - "fastonlineusers.com": "free_online_users", - "fastwebcounter.com": "free_online_users", - "freeonlineusers.com": "free_online_users", - "atoomic.com": "free_pagerank", - "free-pagerank.com": "free_pagerank", - "freedom.com": "freedom_mortgage", - "freegeoip.net": "freegeoip_net", - "freenet.de": "freenet_de", - "freent.de": "freenet_de", - "fwmrm.net": "freewheel", - "heimdall.fresh8.co": "fresh8", - "d36mpcpuzc4ztk.cloudfront.net": "freshdesk", - "freshdesk.com": "freshdesk", - "freshplum.com": "freshplum", - "friendbuy.com": "friendbuy", - "friendfeed.com": "friendfeed", - "adultfriendfinder.com": "friendfinder_network", - "amigos.com": "friendfinder_network", - "board-books.com": "friendfinder_network", - "cams.com": "friendfinder_network", - "facebookofsex.com": "friendfinder_network", - "getiton.com": "friendfinder_network", - "nostringsattached.com": "friendfinder_network", - "pop6.com": "friendfinder_network", - "streamray.com": "friendfinder_network", - "inpref.com": "frosmo_optimizer", - "inpref.s3-external-3.amazonaws.com": "frosmo_optimizer", - "inpref.s3.amazonaws.com": "frosmo_optimizer", - "adflan.com": "fruitflan", - "fruitflan.com": "fruitflan", - "fstrk.net": "fstrk.net", - "cookie.fuel451.com": "fuelx", - "fullstory.com": "fullstory", - "track.funnelytics.io": "funnelytics", - "angsrvr.com": "fyber", - "fyber.com": "fyber", - "game-advertising-online.com": "game_advertising_online", - "gamedistribution.com": "gamedistribution.com", - "gamerdna.com": "gamerdna", - "gannett-cdn.com": "gannett", - "gaug.es": "gaug.es", - "gpm-digital.com": "gazprom-media_digital", - "js.gb-world.net": "gb-world", - "gdeslon.ru": "gdeslon", - "gdmdigital.com": "gdm_digital", - "gntm.geeen.co.jp": "geeen", - "lpomax.net": "geeen", - "gemius.pl": "gemius", - "generaltracking.de": "generaltracking_de", - "genesismedia.com": "genesis", - "gssprt.jp": "geniee", - "rsvpgenius.com": "genius", - "genoo.com": "genoo", - "js.geoads.com": "geoads", - "geolify.com": "geolify", - "geoplugin.net": "geoplugin", - "geotrust.com": "geotrust", - "geovisite.com": "geovisite", - "gestionpub.com": "gestionpub", - "app.getresponse.com": "get_response", - "getsitecontrol.com": "get_site_control", - "getconversion.net": "getconversion", - "widgets.getglue.com": "getglue", - "adhigh.net": "getintent", - "static.getkudos.me": "getkudos", - "yottos.com": "getmyad", - "gsfn.us": "getsatisfaction", - "gettyimages.com": "gettyimages", - "sensic.net": "gfk", - "gfycat.com": "gfycat.com", - "a.giantrealm.com": "giant_realm", - "videostat.com": "giantmedia", - "gigaonclick.com": "giga", - "analytics.gigyahosting1.com": "gigya", - "gigcount.com": "gigya", - "gigya.com": "gigya", - "service.giosg.com": "giosg", - "giphy.com": "giphy.com", - "giraff.io": "giraff.io", - "github.com": "github", - "githubassets.com": "github", - "githubusercontent.com": "github", - "githubapp.com": "github_apps", - "github.io": "github_pages", - "aff3.gittigidiyor.com": "gittigidiyor_affiliate_program", - "gittip.com": "gittip", - "sitest.jp": "glad_cube", - "glganltcs.space": "glganltcs.space", - "globalwebindex.net": "global_web_index", - "globalnotifier.com": "globalnotifier.com", - "globalsign.com": "globalsign", - "ad.globaltakeoff.net": "globaltakeoff", - "glomex.cloud": "glomex.com", - "glomex.com": "glomex.com", - "glotgrx.com": "glotgrx.com", - "a.gmdelivery.com": "gm_delivery", - "ad.atown.jp": "gmo", - "gmx.net": "gmx_net", - "gmxpro.net": "gmx_net", - "go.com": "go.com", - "affiliate.godaddy.com": "godaddy_affiliate_program", - "trafficfacts.com": "godaddy_site_analytics", - "seal.godaddy.com": "godaddy_site_seal", - "tracking.godatafeed.com": "godatafeed", - "counter.goingup.com": "goingup", - "axf8.net": "gomez", - "goodadvert.ru": "goodadvert", - "google.at": "google", - "google.be": "google", - "google.ca": "google", - "google.ch": "google", - "google.co.id": "google", - "google.co.in": "google", - "google.co.jp": "google", - "google.co.ma": "google", - "google.co.th": "google", - "google.co.uk": "google", - "google.com": "google", - "google.com.ar": "google", - "google.com.au": "google", - "google.com.br": "google", - "google.com.mx": "google", - "google.com.tr": "google", - "google.com.tw": "google", - "google.com.ua": "google", - "google.cz": "google", - "google.de": "google", - "google.dk": "google", - "google.dz": "google", - "google.es": "google", - "google.fi": "google", - "google.fr": "google", - "google.gr": "google", - "google.hu": "google", - "google.ie": "google", - "google.it": "google", - "google.nl": "google", - "google.no": "google", - "google.pl": "google", - "google.pt": "google", - "google.ro": "google", - "google.rs": "google", - "google.ru": "google", - "google.se": "google", - "google.tn": "google", - "googleadservices.com": "google_adservices", - "google-analytics.com": "google_analytics", - "appspot.com": "google_appspot", - "beacons-google.com": "google_beacons", - "adsensecustomsearchads.com": "google_custom_search", - "mail-ads.google.com": "google_email", - "fonts.googleapis.com": "google_fonts", - "ggpht.com": "google_photos", - "1e100cdn.net": "google_servers", - "googlesyndication.com": "google_syndication", - "googletagmanager.com": "google_tag_manager", - "googletagservices.com": "google_tag_manager", - "translate.google.com": "google_translate", - "googletraveladservices.com": "google_travel_adds", - "googlecommerce.com": "google_trusted_stores", - "googleusercontent.com": "google_users", - "gmodules.com": "google_widgets", - "googleapis.com": "googleapis.com", - "gooal.herokuapp.com": "goooal", - "gooo.al": "goooal", - "cdn.triggertag.gorillanation.com": "gorilla_nation", - "evolvemediametrics.com": "gorilla_nation", - "d1l6p2sc9645hc.cloudfront.net": "gosquared", - "gosquared.com": "gosquared", - "gostats.com": "gostats", - "govmetric.com": "govmetric", - "servmetric.com": "govmetric", - "b.grabo.bg": "grabo_affiliate", - "trw12.com": "grandslammedia", - "tuberewards.com": "grandslammedia", - "d2bw638ufki166.cloudfront.net": "granify", - "granify.com": "granify", - "grapeshot.co.uk": "grapeshot", - "gscontxt.net": "grapeshot", - "graphcomment.com": "graph_comment", - "gravatar.com": "gravatar", - "cdn.gravitec.net": "gravitec", - "gravity.com": "gravity_insights", - "grvcdn.com": "gravity_insights", - "greatviews.de": "greatviews.de", - "gandrad.org": "green_and_red", - "green-red.com": "green_and_red", - "co2stats.com": "green_certified_site", - "greenstory.ca": "green_story", - "greentube.com": "greentube.com", - "gt-cdn.net": "greentube.com", - "greystripe.com": "greystripe", - "groovehq.com": "groove", - "groovinads.com": "groovinads", - "bidagent.xad.com": "groundtruth", - "gmads.net": "groupm_server", - "grmtech.net": "groupm_server", - "media.gsimedia.net": "gsi_media", - "gstatic.com": "gstatic", - "fx.gtop.ro": "gtop", - "fx.gtopstats.com": "gtop", - "gubagootracking.com": "gugaboo", - "guj.de": "guj.de", - "emsservice.de": "gujems", - "gumgum.com": "gumgum", - "gumroad.com": "gumroad", - "gunggo.com": "gunggo", - "h12-media.com": "h12_ads", - "h12-media.net": "h12_ads", - "hnbutton.appspot.com": "hacker_news_button", - "haendlerbund.de": "haendlerbund.de", - "halogennetwork.com": "halogen_network", - "d1l7z5ofrj6ab8.cloudfront.net": "happy_fox_chat", - "ad.harrenmedianetwork.com": "harren_media", - "ads.networkhm.com": "harren_media", - "app.hatchbuck.com": "hatchbuck", - "hhcdn.ru": "head_hunter", - "healte.de": "healte.de", - "d36lvucg9kzous.cloudfront.net": "heap", - "heapanalytics.com": "heap", - "heatmap.it": "heatmap", - "weltsport.net": "heimspiel", - "hellobar.com": "hello_bar", - "hellosociety.com": "hellosociety", - "here.com": "here", - "herokuapp.com": "heroku", - "heureka.cz": "heureka-widget", - "heybubble.com": "heybubble", - "heyos.com": "heyos", - "adlink.net": "hi-media_performance", - "comclick.com": "hi-media_performance", - "hi-mediaserver.com": "hi-media_performance", - "himediads.com": "hi-media_performance", - "himediadx.com": "hi-media_performance", - "hiconversion.com": "hiconversion", - "highwebmedia.com": "highwebmedia.com", - "hwcdn.net": "highwinds", - "hiiir.com": "hiiir", - "hiro.tv": "hiro", - "histats.com": "histats", - "hit-parade.com": "hit-parade", - "hit.ua": "hit.ua", - "hitslink.com": "hitslink", - "hitsprocessor.com": "hitslink", - "hitsniffer.com": "hitsniffer", - "hittail.com": "hittail", - "hivedx.com": "hivedx.com", - "ads.thehiveworks.com": "hiveworks", - "hoholikik.club": "hoholikik.club", - "h-cdn.com": "hola_player", - "homeaway.com": "homeaway", - "honeybadger.io": "honeybadger", - "hlserve.com": "hooklogic", - "apiae.hopscore.com": "hop-cube", - "hotdogsandads.com": "hotdogsandads.com", - "hotjar.com": "hotjar", - "hotkeys.com": "hotkeys", - "hotlog.ru": "hotlog.ru", - "hotwords.com": "hotwords", - "hotwords.es": "hotwords", - "howtank.com": "howtank.com", - "hqentertainmentnetwork.com": "hqentertainmentnetwork.com", - "justservingfiles.net": "hqentertainmentnetwork.com", - "hsoub.com": "hsoub", - "hstrck.com": "hstrck.com", - "httpool.com": "httpool", - "toboads.com": "httpool", - "hubrus.com": "hubrus", - "hs-analytics.net": "hubspot", - "hs-scripts.com": "hubspot", - "hsleadflows.net": "hubspot", - "hubapi.com": "hubspot", - "hubspot.com": "hubspot", - "forms.hubspot.com": "hubspot_forms", - "hubvisor.io": "hubvisor.io", - "files.hucksterbot.com": "hucksterbot", - "hupso.com": "hupso", - "hurra.com": "hurra_tracker", - "hybrid.ai": "hybrid.ai", - "targetix.net": "hybrid.ai", - "hypeads.org": "hype_exchange", - "hypercomments.com": "hypercomments", - "hyves.nl": "hyves_widgets", - "hyvyd.com": "hyvyd", - "ib-ibi.com": "i-behavior", - "i-mobile.co.jp": "i-mobile", - "r.i.ua": "i.ua", - "i10c.net": "i10c.net", - "i2i.jp": "i2i.jp", - "i2idata.com": "i2i.jp", - "consensu.org": "iab_consent", - "iadvize.com": "iadvize", - "cmcore.com": "ibm_customer_experience", - "coremetrics.com": "ibm_customer_experience", - "coremetrics.eu": "ibm_customer_experience", - "tracker.icerocket.com": "icerocket_tracker", - "nsimg.net": "icf_technology", - "optimix.asia": "iclick", - "ic-live.com": "icrossing", - "icstats.nl": "icstats", - "icuazeczpeoohx.com": "icuazeczpeoohx.com", - "id-news.net": "id-news.net", - "idcdn.de": "id-news.net", - "cdn.id.services": "id_services", - "e-generator.com": "ideal_media", - "idealo.com": "idealo_com", - "ideoclick.com": "ideoclick", - "s.idio.co": "idio", - "ie8eamus.com": "ie8eamus.com", - "600z.com": "ientry", - "api.iflychat.com": "iflychat", - "ignitionone.com": "ignitionone", - "knotice.net": "ignitionone", - "igodigital.com": "igodigital", - "ad.wsod.com": "ihs_markit", - "collserve.com": "ihs_markit_online_shopper_insigh", - "ihvmcqojoj.com": "ihvmcqojoj.com", - "iias.eu": "iias.eu", - "ijento.com": "ijento", - "adv.imadrep.co.kr": "imad", - "worthathousandwords.com": "image_advantage", - "picadmedia.com": "image_space_media", - "imgix.net": "imgix.net", - "imgur.com": "imgur", - "vidigital.ru": "imho_vi", - "immanalytics.com": "immanalytics", - "immobilienscout24.de": "immobilienscout24_de", - "static-immobilienscout24.de": "immobilienscout24_de", - "imonomy.com": "imonomy", - "7eer.net": "impact_radius", - "d3cxv97fi8q177.cloudfront.net": "impact_radius", - "evyy.net": "impact_radius", - "impactradius-event.com": "impact_radius", - "impactradius-tag.com": "impact_radius", - "impactradius.com": "impact_radius", - "ojrq.net": "impact_radius", - "r7ls.net": "impact_radius", - "impresionesweb.com": "impresiones_web", - "360yield.com": "improve_digital", - "iljmp.com": "improvely", - "inbenta.com": "inbenta", - "inboxsdk.com": "inboxsdk.com", - "indeed.com": "indeed", - "casalemedia.com": "index_exchange", - "indexww.com": "index_exchange", - "indieclick.com": "indieclick", - "industrybrains.com": "industry_brains", - "impdesk.com": "infectious_media", - "impressiondesk.com": "infectious_media", - "zachysprod.infiniteanalytics.com": "infinite_analytics", - "infinity-tracking.net": "infinity_tracking", - "engine.influads.com": "influads", - "infolinks.com": "infolinks", - "intextscript.com": "infolinks", - "ioam.de": "infonline", - "iocnt.net": "infonline", - "ivwbox.de": "infonline", - "informer.com": "informer_technologies", - "infusionsoft.com": "infusionsoft", - "keap.com": "infusionsoft", - "innity.com": "innity", - "innity.net": "innity", - "innogames.com": "innogames.de", - "innogames.de": "innogames.de", - "innogamescdn.com": "innogames.de", - "innovid.com": "innovid", - "inside-graph.com": "inside", - "useinsider.com": "insider", - "insightexpressai.com": "insightexpress", - "inskinad.com": "inskin_media", - "inskinmedia.com": "inskin_media", - "inspectlet.com": "inspectlet", - "inspsearchapi.com": "inspsearchapi.com", - "cdninstagram.com": "instagram_com", - "instagram.com": "instagram_com", - "tcgtrkr.com": "instant_check_mate", - "sdad.guru": "instart_logic", - "insticator.com": "insticator", - "load.instinctiveads.com": "instinctive", - "intango.com": "intango", - "adsafeprotected.com": "integral_ad_science", - "iasds01.com": "integral_ad_science", - "integral-marketing.com": "integral_marketing", - "intelliad.com": "intelliad", - "intelliad.de": "intelliad", - "saas.intelligencefocus.com": "intelligencefocus", - "ist-track.com": "intelligent_reach", - "intensedebate.com": "intense_debate", - "intentiq.com": "intent_iq", - "intentmedia.net": "intent_media", - "intercom.com": "intercom", - "intercom.io": "intercom", - "intercomassets.com": "intercom", - "intercomcdn.com": "intercom", - "interedy.info": "interedy.info", - "ads.intergi.com": "intergi", - "intermarkets.net": "intermarkets.net", - "intermundomedia.com": "intermundo_media", - "bbelements.com": "internet_billboard", - "goadservices.com": "internet_billboard", - "ibillboard.com": "internet_billboard", - "mediainter.net": "internet_billboard", - "voice2page.com": "internetaudioads", - "ibpxl.com": "internetbrands", - "ibsrv.net": "internetbrands", - "interpolls.com": "interpolls", - "ps7894.com": "interyield", - "intilery-analytics.com": "intilery", - "im-apps.net": "intimate_merger", - "investingchannel.com": "investingchannel", - "inviziads.com": "inviziads", - "js12.invoca.net": "invoca", - "ringrevenue.com": "invoca", - "invodo.com": "invodo", - "ionicframework.com": "ionicframework.com", - "dsp.io": "iotec", - "iesnare.com": "iovation", - "iovation.com": "iovation", - "ip-label.net": "ip-label", - "eltoro.com": "ip_targeting", - "iptargeting.com": "ip_targeting", - "ip-tracker.org": "ip_tracker", - "iptrack.io": "ip_tracker", - "iperceptions.com": "iperceptions", - "dust.ipfingerprint.com": "ipfingerprint", - "mbww.com": "ipg_mediabrands", - "ipify.org": "ipify", - "ipinfo.io": "ipinfo", - "iplogger.ru": "iplogger", - "centraliprom.com": "iprom", - "iprom.net": "iprom", - "ipromote.com": "ipromote", - "clickmanage.com": "iprospect", - "addelive.com": "ironsource", - "afdads.com": "ironsource", - "delivery47.com": "ironsource", - "adsbyisocket.com": "isocket", - "isocket.com": "isocket", - "ispot.tv": "ispot.tv", - "itineraire.info": "itineraire.info", - "apple.com": "itunes_link_maker", - "autolinkmaker.itunes.apple.com": "itunes_link_maker", - "ity.im": "ity.im", - "iubenda.com": "iubenda.com", - "ivcbrasil.org.br": "ivcbrasil.org.br", - "ivitrack.com": "ividence", - "iwiw.hu": "iwiw_widgets", - "ixiaa.com": "ixi_digital", - "ixquick.com": "ixquick.com", - "cdn.izooto.com": "izooto", - "jlist.com": "j-list_affiliate_program", - "getjaco.com": "jaco", - "janrainbackplane.com": "janrain", - "rpxnow.com": "janrain", - "jeeng.com": "jeeng", - "api.jeeng.com": "jeeng_widgets", - "phone-analytics.com": "jet_interactive", - "jetlore.com": "jetlore", - "pixel.wp.com": "jetpack", - "stats.wp.com": "jetpack", - "jetpackdigital.com": "jetpack_digital", - "jimcdn.com": "jimdo.com", - "jimdo.com": "jimdo.com", - "jimstatic.com": "jimdo.com", - "ads.jinkads.com": "jink", - "jirafe.com": "jirafe", - "jivosite.com": "jivochat", - "jivox.com": "jivox", - "jobs2careers.com": "jobs_2_careers", - "joinhoney.com": "joinhoney", - "create.leadid.com": "jornaya", - "d1tprjo2w7krrh.cloudfront.net": "jornaya", - "cdnjquery.com": "jquery", - "jquery.com": "jquery", - "cjmooter.xcache.kinxcdn.com": "js_communications", - "jsdelivr.net": "jsdelivr", - "jsecoin.com": "jse_coin", - "jsuol.com.br": "jsuol.com.br", - "contentabc.com": "juggcash", - "mofos.com": "juggcash", - "juiceadv.com": "juiceadv", - "juicyads.com": "juicyads", - "cdn.jumplead.com": "jumplead", - "jumpstarttaggingsolutions.com": "jumpstart_tagging_solutions", - "jumptap.com": "jumptap", - "jump-time.net": "jumptime", - "jumptime.com": "jumptime", - "components.justanswer.com": "just_answer", - "justpremium.com": "just_premium", - "justpremium.nl": "just_premium", - "justrelevant.com": "just_relevant", - "jvc.gg": "jvc.gg", - "d21rhj7n383afu.cloudfront.net": "jw_player", - "jwpcdn.com": "jw_player", - "jwplatform.com": "jw_player", - "jwplayer.com": "jw_player", - "jwpltx.com": "jw_player", - "jwpsrv.com": "jw_player", - "ltassrv.com": "jw_player_ad_solutions", - "kaeufersiegel.de": "kaeufersiegel.de", - "kairion.de": "kairion.de", - "kctag.net": "kairion.de", - "kaloo.ga": "kaloo.ga", - "kaltura.com": "kaltura", - "kameleoon.com": "kameleoon", - "kameleoon.eu": "kameleoon", - "kampyle.com": "kampyle", - "kanoodle.com": "kanoodle", - "kmi-us.com": "kantar_media", - "tnsinternet.be": "kantar_media", - "kargo.com": "kargo", - "kaspersky-labs.com": "kaspersky-labs.com", - "kataweb.it": "kataweb.it", - "cen.katchup.fr": "katchup", - "kau.li": "kauli", - "kavanga.ru": "kavanga", - "dc8na2hxrj29i.cloudfront.net": "keen_io", - "keen.io": "keen_io", - "widget.kelkoo.com": "kelkoo", - "xg4ken.com": "kenshoo", - "keymetric.net": "keymetric", - "lb.keytiles.com": "keytiles", - "keywee.co": "keywee", - "keywordmax.com": "keywordmax", - "massrelevance.com": "khoros", - "tweetriver.com": "khoros", - "khzbeucrltin.com": "khzbeucrltin.com", - "ping.kickfactory.com": "kickfactory", - "sa-as.com": "kickfire", - "sniff.visistat.com": "kickfire", - "stats.visistat.com": "kickfire", - "king.com": "king.com", - "midasplayer.com": "king_com", - "kinja-img.com": "kinja.com", - "kinja-static.com": "kinja.com", - "kinja.com": "kinja.com", - "kiosked.com": "kiosked", - "doug1izaerwt3.cloudfront.net": "kissmetrics.com", - "kissmetrics.com": "kissmetrics.com", - "ad.103092804.com": "kitara_media", - "kmdisplay.com": "kitara_media", - "kixer.com": "kixer", - "klarna.com": "klarna.com", - "a.klaviyo.com": "klaviyo", - "klikki.com": "klikki", - "scr.kliksaya.com": "kliksaya", - "mediapeo2.com": "kmeleo", - "knoopstat.nl": "knoopstat", - "knotch.it": "knotch", - "komoona.com": "komoona", - "kona.kontera.com": "kontera_contentlink", - "ktxtr.com": "kontextr", - "kontextua.com": "kontextua", - "cleanrm.net": "korrelate", - "korrelate.net": "korrelate", - "trackit.ktxlytics.io": "kortx", - "kaptcha.com": "kount", - "krxd.net": "krux_digital", - "d31bfnnwekbny6.cloudfront.net": "kupona", - "kpcustomer.de": "kupona", - "q-sis.de": "kupona", - "kxcdn.com": "kxcdn.com", - "cdn.kyto.com": "kyto", - "cd-ladsp-com.s3.amazonaws.com": "ladsp.com", - "ladmp.com": "ladsp.com", - "ladsp.com": "ladsp.com", - "lanistaads.com": "lanista_concepts", - "latimes.com": "latimes", - "events.launchdarkly.com": "launch_darkly", - "launchbit.com": "launchbit", - "layer-ad.org": "layer-ad.org", - "ph-live.slatic.net": "lazada", - "lcxdigital.com": "lcx_digital", - "lemde.fr": "le_monde.fr", - "t1.llanalytics.com": "lead_liaison", - "leadback.ru": "leadback", - "leaddyno.com": "leaddyno", - "123-tracker.com": "leadforensics", - "55-trk-srv.com": "leadforensics", - "business-path-55.com": "leadforensics", - "click-to-trace.com": "leadforensics", - "cloud-exploration.com": "leadforensics", - "cloud-journey.com": "leadforensics", - "cloud-trail.com": "leadforensics", - "cloudpath82.com": "leadforensics", - "cloudtracer101.com": "leadforensics", - "discover-path.com": "leadforensics", - "discovertrail.net": "leadforensics", - "domainanalytics.net": "leadforensics", - "dthvdr9.com": "leadforensics", - "explore-123.com": "leadforensics", - "finger-info.net": "leadforensics", - "forensics1000.com": "leadforensics", - "ip-route.net": "leadforensics", - "ipadd-path.com": "leadforensics", - "iproute66.com": "leadforensics", - "lead-123.com": "leadforensics", - "lead-analytics-1000.com": "leadforensics", - "lead-watcher.com": "leadforensics", - "leadforensics.com": "leadforensics", - "ledradn.com": "leadforensics", - "letterbox-path.com": "leadforensics", - "letterboxtrail.com": "leadforensics", - "network-handle.com": "leadforensics", - "path-follower.com": "leadforensics", - "path-trail.com": "leadforensics", - "scan-trail.com": "leadforensics", - "site-research.net": "leadforensics", - "srv1010elan.com": "leadforensics", - "the-lead-tracker.com": "leadforensics", - "trace-2000.com": "leadforensics", - "track-web.net": "leadforensics", - "trackdiscovery.net": "leadforensics", - "trackercloud.net": "leadforensics", - "trackinvestigate.net": "leadforensics", - "trail-viewer.com": "leadforensics", - "trail-web.com": "leadforensics", - "trailbox.net": "leadforensics", - "trailinvestigator.com": "leadforensics", - "web-path.com": "leadforensics", - "webforensics.co.uk": "leadforensics", - "websiteexploration.com": "leadforensics", - "www-path.com": "leadforensics", - "gate.leadgenic.com": "leadgenic", - "leadhit.ru": "leadhit", - "js.leadin.com": "leadin", - "io.leadingreports.de": "leading_reports", - "js.leadinspector.de": "leadinspector", - "formalyzer.com": "leadlander", - "trackalyzer.com": "leadlander", - "analytics.leadlifesolutions.net": "leadlife", - "my.leadpages.net": "leadpages", - "leadplace.fr": "leadplace", - "scorecard.wspisp.net": "leads_by_web.com", - "www.leadscoreapp.dk": "leadscoreapp", - "tracker.leadsius.com": "leadsius", - "leady.com": "leady", - "leady.cz": "leady", - "leiki.com": "leiki", - "lengow.com": "lengow", - "lenmit.com": "lenmit.com", - "lentainform.com": "lentainform.com", - "lenua.de": "lenua.de", - "letreach.com": "let_reach", - "js.letvcdn.com": "letv", - "footprint.net": "level3_communications", - "licensebuttons.net": "licensebuttons.net", - "lfstmedia.com": "lifestreet_media", - "content-recommendation.net": "ligatus", - "ligadx.com": "ligatus", - "ligatus.com": "ligatus", - "ligatus.de": "ligatus", - "veeseo.com": "ligatus", - "limk.com": "limk", - "line-apps.com": "line_apps", - "line-scdn.net": "line_apps", - "line.me": "line_apps", - "tongji.linezing.com": "linezing", - "linkbucks.com": "linkbucks", - "linkconnector.com": "linkconnector", - "bizo.com": "linkedin", - "licdn.com": "linkedin", - "linkedin.com": "linkedin", - "lynda.com": "linkedin", - "ads.linkedin.com": "linkedin_ads", - "snap.licdn.com": "linkedin_analytics", - "bizographics.com": "linkedin_marketing_solutions", - "platform.linkedin.com": "linkedin_widgets", - "linker.hr": "linker", - "linkprice.com": "linkprice", - "lp4.io": "linkpulse", - "linksalpha.com": "linksalpha", - "erovinmo.com": "linksmart", - "linksmart.com": "linksmart", - "linkstorm.net": "linkstorm", - "linksynergy.com": "linksynergy.com", - "linkup.com": "linkup", - "linkwi.se": "linkwise", - "linkwithin.com": "linkwithin", - "lqm.io": "liquidm_technology_gmbh", - "lqmcdn.com": "liquidm_technology_gmbh", - "liqwid.net": "liqwid", - "list.ru": "list.ru", - "listrakbi.com": "listrak", - "live2support.com": "live2support", - "live800.com": "live800", - "ladesk.com": "live_agent", - "livehelpnow.net": "live_help_now", - "liadm.com": "live_intent", - "l-stat.livejournal.net": "live_journal", - "liveadexchanger.com": "liveadexchanger.com", - "livechat.s3.amazonaws.com": "livechat", - "livechatinc.com": "livechat", - "livechatinc.net": "livechat", - "livechatnow.com": "livechatnow", - "livechatnow.net": "livechatnow", - "liveclicker.net": "liveclicker", - "livecounter.dk": "livecounter", - "fyre.co": "livefyre", - "livefyre.com": "livefyre", - "yadro.ru": "liveinternet", - "liveperson.net": "liveperson", - "lpsnmedia.net": "liveperson", - "pippio.com": "liveramp", - "rapleaf.com": "liveramp", - "rlcdn.com": "liveramp", - "livere.co.kr": "livere", - "livere.co.kr.cizion.ixcloud.net": "livere", - "livesportmedia.eu": "livesportmedia.eu", - "analytics.livestream.com": "livestream", - "livetex.ru": "livetex.ru", - "lkqd.net": "lkqd", - "loadbee.com": "loadbee.com", - "loadercdn.com": "loadercdn.com", - "loadsource.org": "loadsource.org", - "web.localytics.com": "localytics", - "cdn2.lockerdome.com": "lockerdome", - "addtoany.com": "lockerz_share", - "pixel.loganmedia.mobi": "logan_media", - "ping.answerbook.com": "logdna", - "loggly.com": "loggly", - "logly.co.jp": "logly", - "logsss.com": "logsss.com", - "lomadee.com": "lomadee", - "assets.loomia.com": "loomia", - "loop11.com": "loop11", - "lfov.net": "loopfuse_oneview", - "crwdcntrl.net": "lotame", - "vidcpm.com": "lottex_inc", - "tracker.samplicio.us": "lucid", - "lucidmedia.com": "lucid_media", - "lead.adsender.us": "lucini", - "livestatserver.com": "lucky_orange", - "luckyorange.com": "lucky_orange", - "luckyorange.net": "lucky_orange", - "luckypushh.com": "luckypushh.com", - "adelixir.com": "lxr100", - "lypn.com": "lynchpin_analytics", - "lypn.net": "lynchpin_analytics", - "lytics.io": "lytics", - "lyuoaxruaqdo.com": "lyuoaxruaqdo.com", - "m-pathy.com": "m-pathy", - "mpnrs.com": "m._p._newmedia", - "m4n.nl": "m4n", - "madadsmedia.com": "mad_ads_media", - "madeleine.de": "madeleine.de", - "dinclinx.com": "madison_logic", - "madisonlogic.com": "madison_logic", - "madnet.ru": "madnet", - "eu2.madsone.com": "mads", - "magna.ru": "magna_advertise", - "d3ezl4ajpp2zy8.cloudfront.net": "magnetic", - "domdex.com": "magnetic", - "domdex.net": "magnetic", - "magnetisemedia.com": "magnetise_group", - "magnify360.com": "magnify360", - "magnuum.com": "magnuum.com", - "ad.mail.ru": "mail.ru_banner", - "imgsmail.ru": "mail.ru_group", - "mail.ru": "mail.ru_group", - "mradx.net": "mail.ru_group", - "odnoklassniki.ru": "mail.ru_group", - "ok.ru": "mail.ru_group", - "chimpstatic.com": "mailchimp_tracking", - "list-manage.com": "mailchimp_tracking", - "mailchimp.com": "mailchimp_tracking", - "mailerlite.com": "mailerlite.com", - "mailtrack.io": "mailtrack.io", - "mainadv.com": "mainadv", - "makazi.com": "makazi", - "makeappdev.xyz": "makeappdev.xyz", - "makesource.cool": "makesource.cool", - "widgets.mango-office.ru": "mango", - "manycontacts.com": "manycontacts", - "mapandroute.de": "mapandroute.de", - "mapbox.com": "mapbox", - "www.maploco.com": "maploco", - "px.marchex.io": "marchex", - "voicestar.com": "marchex", - "mmadsgadget.com": "marimedia", - "qadabra.com": "marimedia", - "qadserve.com": "marimedia", - "qadservice.com": "marimedia", - "marinsm.com": "marin_search_marketer", - "markandmini.com": "mark_+_mini", - "ak-cdn.placelocal.com": "market_thunder", - "dt00.net": "marketgid", - "dt07.net": "marketgid", - "marketgid.com": "marketgid", - "mgid.com": "marketgid", - "marketingautomation.si": "marketing_automation", - "marketo.com": "marketo", - "marketo.net": "marketo", - "mktoresp.com": "marketo", - "caanalytics.com": "markmonitor", - "mmstat.com": "markmonitor", - "netscope.data.marktest.pt": "marktest", - "marshadow.io": "marshadow.io", - "martiniadnetwork.com": "martini_media", - "edigitalsurvey.com": "maru-edu", - "marvellousmachine.net": "marvellous_machine", - "mbn.com.ua": "master_banner_network", - "mastertarget.ru": "mastertarget", - "rns.matelso.de": "matelso", - "matheranalytics.com": "mather_analytics", - "mathjax.org": "mathjax.org", - "nzaza.com": "matiro", - "matomo.cloud": "matomo", - "matomo.org": "matomo", - "piwik.org": "matomo", - "adsmarket.com": "matomy_market", - "m2pub.com": "matomy_market", - "mb01.com": "maxbounty", - "maxcdn.com": "maxcdn", - "netdna-cdn.com": "maxcdn", - "netdna-ssl.com": "maxcdn", - "maxlab.ru": "maxlab", - "maxmind.com": "maxmind", - "maxonclick.com": "maxonclick_com", - "mxptint.net": "maxpoint_interactive", - "maxymiser.hs.llnwd.net": "maxymiser", - "maxymiser.net": "maxymiser", - "m6r.eu": "mbr_targeting", - "pixel.adbuyer.com": "mbuy", - "mcabi.mcloudglobal.com": "mcabi", - "scanalert.com": "mcafee_secure", - "ywxi.net": "mcafee_secure", - "mconet.biz": "mconet", - "mdotlabs.com": "mdotlabs", - "media-clic.com": "media-clic", - "media-imdb.com": "media-imdb.com", - "media.net": "media.net", - "mediaimpact.de": "media_impact", - "mookie1.com": "media_innovation_group", - "idntfy.ru": "media_today", - "s1.mediaad.org": "mediaad", - "mlnadvertising.com": "mediaglu", - "fhserve.com": "mediahub", - "adnet.ru": "medialand", - "medialand.ru": "medialand", - "medialead.de": "medialead", - "mathads.com": "mediamath", - "mathtag.com": "mediamath", - "mediametrics.ru": "mediametrics", - "audit.median.hu": "median", - "mediapass.com": "mediapass", - "mt.mediapostcommunication.net": "mediapost_communications", - "mediarithmics.com": "mediarithmics.com", - "tns-counter.ru": "mediascope", - "ad.media-servers.net": "mediashakers", - "adsvc1107131.net": "mediashift", - "mediator.media": "mediator.media", - "mediav.com": "mediav", - "adnetinteractive.com": "mediawhiz", - "adnetinteractive.net": "mediawhiz", - "mediego.com": "medigo", - "medleyads.com": "medley", - "adnet.com.tr": "medyanet", - "e-kolay.net": "medyanet", - "medyanetads.com": "medyanet", - "cim.meebo.com": "meebo_bar", - "meetrics.net": "meetrics", - "mxcdn.net": "meetrics", - "research.de.com": "meetrics", - "counter.megaindex.ru": "megaindex", - "mein-bmi.com": "mein-bmi.com", - "webvisitor.melissadata.net": "melissa", - "meltdsp.com": "melt", - "mlt01.com": "menlo", - "mentad.com": "mentad", - "mercadoclics.com": "mercado", - "mercadolivre.com.br": "mercado", - "mlstatic.com": "mercado", - "merchantadvantage.com": "merchantadvantage", - "merchenta.com": "merchenta", - "roia.biz": "mercury_media", - "cdn.merklesearch.com": "merkle_research", - "rkdms.com": "merkle_rkg", - "messenger.com": "messenger.com", - "ad.metanetwork.com": "meta_network", - "metaffiliation.com": "metaffiliation.com", - "netaffiliation.com": "metaffiliation.com", - "metalyzer.com": "metapeople", - "mlsat02.de": "metapeople", - "metrigo.com": "metrigo", - "metriweb.be": "metriweb", - "miaozhen.com": "miaozhen", - "microad.co.jp": "microad", - "microad.jp": "microad", - "microad.net": "microad", - "microadinc.com": "microad", - "azurewebsites.net": "microsoft", - "cloudapp.net": "microsoft", - "gfx.ms": "microsoft", - "live.com": "microsoft", - "microsoft.com": "microsoft", - "microsoftonline-p.com": "microsoft", - "microsoftonline.com": "microsoft", - "microsofttranslator.com": "microsoft", - "msecnd.net": "microsoft", - "msedge.net": "microsoft", - "msocdn.com": "microsoft", - "onestore.ms": "microsoft", - "s-microsoft.com": "microsoft", - "trouter.io": "microsoft", - "windows.net": "microsoft", - "analytics.live.com": "microsoft_analytics", - "a.clarity.ms": "microsoft_clarity", - "b.clarity.ms": "microsoft_clarity", - "c.clarity.ms": "microsoft_clarity", - "d.clarity.ms": "microsoft_clarity", - "e.clarity.ms": "microsoft_clarity", - "f.clarity.ms": "microsoft_clarity", - "g.clarity.ms": "microsoft_clarity", - "h.clarity.ms": "microsoft_clarity", - "i.clarity.ms": "microsoft_clarity", - "j.clarity.ms": "microsoft_clarity", - "log.clarity.ms": "microsoft_clarity", - "www.clarity.ms": "microsoft_clarity", - "mmismm.com": "mindset_media", - "imgfarm.com": "mindspark", - "mindspark.com": "mindspark", - "staticimgfarm.com": "mindspark", - "mvtracker.com": "mindviz_tracker", - "minewhat.com": "minewhat", - "mintsapp.io": "mints_app", - "snackly.co": "minute.ly", - "snippet.minute.ly": "minute.ly", - "apv.configuration.minute.ly": "minute.ly_video", - "get.mirando.de": "mirando", - "mirtesen.ru": "mirtesen.ru", - "misterbell.com": "mister_bell", - "mixi.jp": "mixi", - "mixpanel.com": "mixpanel", - "mxpnl.com": "mixpanel", - "mxpnl.net": "mixpanel", - "swf.mixpo.com": "mixpo", - "app.mluvii.com": "mluvii", - "mncdn.com": "mncdn.com", - "moatads.com": "moat", - "moatpixel.com": "moat", - "mobicow.com": "mobicow", - "a.mobify.com": "mobify", - "mobtrks.com": "mobtrks.com", - "ads.mocean.mobi": "mocean_mobile", - "ads.moceanads.com": "mocean_mobile", - "chat.mochapp.com": "mochapp", - "intelligentpixel.modernimpact.com": "modern_impact", - "teljari.is": "modernus", - "modulepush.com": "modulepush.com", - "mogointeractive.com": "mogo_interactive", - "mokonocdn.com": "mokono_analytics", - "devappgrant.space": "monero_miner", - "monetate.net": "monetate", - "monetize-me.com": "monetize_me", - "ads.themoneytizer.com": "moneytizer", - "mongoosemetrics.com": "mongoose_metrics", - "track.monitis.com": "monitis", - "monitus.net": "monitus", - "fonts.net": "monotype_gmbh", - "fonts.com": "monotype_imaging", - "cdn.monsido.com": "monsido", - "monster.com": "monster_advertising", - "mooxar.com": "mooxar", - "mopinion.com": "mopinion.com", - "mopub.com": "mopub", - "ad.ad-arata.com": "more_communication", - "moras.jp": "moreads", - "nedstatbasic.net": "motigo_webstats", - "webstats.motigo.com": "motigo_webstats", - "analytics.convertlanguage.com": "motionpoint", - "mouseflow.com": "mouseflow", - "mousestats.com": "mousestats", - "s.mousetrace.com": "mousetrace", - "movad.de": "mov.ad", - "movad.net": "mov.ad", - "micpn.com": "movable_ink", - "mvb.me": "movable_media", - "moz.com": "moz", - "storage.mozoo.com": "mozoo", - "tracker.mrpfd.com": "mrp", - "mrpdata.com": "mrpdata", - "mrpdata.net": "mrpdata", - "mrskincash.com": "mrskincash", - "msn.com": "msn", - "s-msn.com": "msn", - "musculahq.appspot.com": "muscula", - "litix.io": "mux_inc", - "mybloglog.com": "mybloglog", - "t.p.mybuys.com": "mybuys", - "mycdn.me": "mycdn.me", - "mycliplister.com": "mycliplister.com", - "mycounter.com.ua": "mycounter.ua", - "mycounter.ua": "mycounter.ua", - "myfonts.net": "myfonts", - "mypagerank.net": "mypagerank", - "stat.mystat.hu": "mystat", - "mythings.com": "mythings", - "mystat-in.net": "mytop_counter", - "nakanohito.jp": "nakanohito.jp", - "namogoo.coom": "namogoo", - "nanigans.com": "nanigans", - "audiencemanager.de": "nano_interactive", - "nanorep.com": "nanorep", - "narando.com": "narando", - "static.bam-x.com": "narrativ", - "narrative.io": "narrative_io", - "p1.ntvk1.ru": "natimatica", - "nativeads.com": "nativeads.com", - "cdn01.nativeroll.tv": "nativeroll", - "ntv.io": "nativo", - "postrelease.com": "nativo", - "navdmp.com": "navegg_dmp", - "naver.com": "naver.com", - "naver.net": "naver.com", - "s-nbcnews.com": "nbc_news", - "richmedia247.com": "ncol", - "needle.com": "needle", - "nekudo.com": "nekudo.com", - "neodatagroup.com": "neodata", - "ad-srv.net": "neory", - "contentspread.net": "neory", - "neory-tm.com": "neory", - "simptrack.com": "neory", - "nerfherdersolo.com": "nerfherdersolo_com", - "wemfbox.ch": "net-metrix", - "cdnma.com": "net-results", - "nr7.us": "net-results", - "netavenir.com": "net_avenir", - "netcommunities.com": "net_communities", - "visibility-stats.com": "net_visibility", - "netbiscuits.net": "netbiscuits", - "bbtrack.net": "netbooster_group", - "netbooster.com": "netbooster_group", - "netflix.com": "netflix", - "nflxext.com": "netflix", - "nflximg.net": "netflix", - "nflxso.net": "netflix", - "nflxvideo.net": "netflix", - "netzathleten-media.de": "netletix", - "netminers.dk": "netminers", - "netmining.com": "netmining", - "netmng.com": "netmining", - "stat.netmonitor.fi": "netmonitor", - "glanceguide.com": "netratings_sitecensus", - "imrworldwide.com": "netratings_sitecensus", - "vizu.com": "netratings_sitecensus", - "netrk.net": "netrk.net", - "netseer.com": "netseer", - "netshelter.net": "netshelter", - "nsaudience.pl": "netsprint_audience", - "nwidget.networkedblogs.com": "networkedblogs", - "adadvisor.net": "neustar_adadvisor", - "d1ros97qkrwjf5.cloudfront.net": "new_relic", - "newrelic.com": "new_relic", - "nr-data.net": "new_relic", - "newscgp.com": "newscgp.com", - "nmcdn.us": "newsmax", - "newstogram.com": "newstogram", - "newsupdatedir.info": "newsupdatedir.info", - "newsupdatewe.info": "newsupdatewe.info", - "ads.newtention.net": "newtention", - "ads.newtentionassets.net": "newtention", - "nexage.com": "nexage", - "nexeps.com": "nexeps.com", - "nxtck.com": "next_performance", - "track.nextuser.com": "next_user", - "imgsrv.nextag.com": "nextag_roi_optimizer", - "nextclick.pl": "nextclick", - "nextstat.com": "nextstat", - "d1d8vn0fpluuz7.cloudfront.net": "neytiv", - "ads.ngageinc.com": "ngage_inc.", - "nice264.com": "nice264.com", - "nimblecommerce.com": "nimblecommerce", - "cho-chin.com": "ninja_access_analysis", - "donburako.com": "ninja_access_analysis", - "hishaku.com": "ninja_access_analysis", - "shinobi.jp": "ninja_access_analysis", - "static.nirror.com": "nirror", - "nitropay.com": "nitropay", - "nk.pl": "nk.pl_widgets", - "noaa.gov": "noaa.gov", - "track.noddus.com": "noddus", - "contextbar.ru": "nolix", - "trkme.net": "nonstop_consulting", - "noop.style": "noop.style", - "nosto.com": "nosto.com", - "adleadevent.com": "notify", - "notifyfox.com": "notifyfox", - "nowinteract.com": "now_interact", - "npario-inc.net": "npario", - "nplexmedia.com": "nplexmedia", - "nrelate.com": "nrelate", - "ns8.com": "ns8", - "nt.vc": "nt.vc", - "featurelink.com": "ntent", - "tracer.jp": "nttcom_online_marketing_solutions", - "nuffnang.com": "nuffnang", - "nuggad.net": "nugg.ad", - "rotator.adjuggler.com": "nui_media", - "numbers.md": "numbers.md", - "channeliq.com": "numerator", - "nyacampwk.com": "nyacampwk.com", - "nyetm2mkch.com": "nyetm2mkch.com", - "nyt.com": "nyt.com", - "nytimes.com": "nyt.com", - "o12zs3u2n.com": "o12zs3u2n.com", - "o2.pl": "o2.pl", - "o2online.de": "o2online.de", - "oath.com": "oath_inc", - "observerapp.com": "observer", - "ocioso.com.br": "ocioso", - "oclasrv.com": "oclasrv.com", - "octapi.net": "octapi.net", - "service.octavius.rocks": "octavius", - "office.com": "office.com", - "office.net": "office.net", - "office365.com": "office365.com", - "oghub.io": "oghub.io", - "ohmystats.com": "oh_my_stats", - "adohana.com": "ohana_advertising_network", - "photorank.me": "olapic", - "olark.com": "olark", - "olx-st.com": "olx-st.com", - "onap.io": "olx-st.com", - "omarsys.com": "omarsys.com", - "ometria.com": "ometria", - "omgpm.com": "omg", - "omniconvert.com": "omniconvert.com", - "omnidsp.com": "omniscienta", - "oms.eu": "oms", - "omsnative.de": "oms", - "onaudience.com": "onaudience", - "btc-echode.api.oneall.com": "oneall", - "tracking.onefeed.co.uk": "onefeed", - "onesignal.com": "onesignal", - "os.tc": "onesignal", - "stat.onestat.com": "onestat", - "ocdn.eu": "onet.pl", - "onet.pl": "onet.pl", - "onetag.com": "onetag", - "s-onetag.com": "onetag", - "onetrust.com": "onetrust", - "fogl1onf.com": "onfocus.io", - "onfocus.io": "onfocus.io", - "onlinewebstat.com": "onlinewebstat", - "onlinewebstats.com": "onlinewebstat", - "onswipe.com": "onswipe", - "onthe.io": "onthe.io", - "moon-ray.com": "ontraport_autopilot", - "moonraymarketing.com": "ontraport_autopilot", - "ooyala.com": "ooyala.com", - "openadex.dk": "open_adexchange", - "247realmedia.com": "open_adstream", - "oaserve.com": "open_adstream", - "realmedia.com": "open_adstream", - "realmediadigital.com": "open_adstream", - "opensharecount.com": "open_share_count", - "oloadcdn.net": "openload", - "openload.co": "openload", - "openstat.net": "openstat", - "spylog.com": "openstat", - "spylog.ru": "openstat", - "opentracker.net": "opentracker", - "openwebanalytics.com": "openwebanalytics", - "odnxs.net": "openx", - "openx.net": "openx", - "openx.org": "openx", - "openxenterprise.com": "openx", - "servedbyopenx.com": "openx", - "adsummos.net": "operative_media", - "opinary.com": "opinary", - "opinionbar.com": "opinionbar", - "emagazines.com": "oplytic", - "opta.net": "opta.net", - "optaim.com": "optaim", - "cookielaw.org": "optanaon", - "service.optify.net": "optify", - "optimatic.com": "optimatic", - "optmd.com": "optimax_media_delivery", - "optimicdn.com": "optimicdn.com", - "optimizely.com": "optimizely", - "optimonk.com": "optimonk", - "mstrlytcs.com": "optinmonster", - "optmnstr.com": "optinmonster", - "optmstr.com": "optinmonster", - "optnmstr.com": "optinmonster", - "optincollect.com": "optinproject.com", - "volvelle.tech": "optomaton", - "ora.tv": "ora.tv", - "instantservice.com": "oracle_live_help", - "ts.istrack.com": "oracle_live_help", - "rightnowtech.com": "oracle_rightnow", - "rnengage.com": "oracle_rightnow", - "orange.fr": "orange", - "orangeads.fr": "orange", - "ads.orange142.com": "orange142", - "wanadoo.fr": "orange_france", - "otracking.com": "orangesoda", - "emxdgt.com": "orc_international", - "static.ordergroove.com": "order_groove", - "orelsite.ru": "orel_site", - "otclick-adv.ru": "otclick", - "othersearch.info": "othersearch.info", - "otm-r.com": "otm-r.com", - "otto.de": "otto.de", - "ottogroup.media": "otto.de", - "outbrain.com": "outbrain", - "outbrainimg.com": "outbrain", - "overheat.it": "overheat.it", - "oewabox.at": "owa", - "owneriq.net": "owneriq", - "ownpage.fr": "ownpage", - "owox.com": "owox.com", - "adconnexa.com": "oxamedia", - "adsbwm.com": "oxamedia", - "oxomi.com": "oxomi.com", - "pageanalytics.space": "pageanalytics.space", - "blockmetrics.com": "pagefair", - "pagefair.com": "pagefair", - "pagefair.net": "pagefair", - "ghmedia.com": "pagescience", - "777seo.com": "paid-to-promote", - "paid-to-promote.net": "paid-to-promote", - "ptp22.com": "paid-to-promote", - "ptp33.com": "paid-to-promote", - "paperg.com": "paperg", - "pardot.com": "pardot", - "d1z2jf7jlzjs58.cloudfront.net": "parsely", - "parsely.com": "parsely", - "partner-ads.com": "partner-ads", - "passionfruitads.com": "passionfruit", - "pathful.com": "pathful", - "pay-hit.com": "pay-hit", - "payclick.it": "payclick", - "app.paykickstart.com": "paykickstart", - "paypal.com": "paypal", - "paypalobjects.com": "paypal", - "pcvark.com": "pcvark.com", - "peer39.com": "peer39", - "peer39.net": "peer39", - "peer5.com": "peer5.com", - "peerius.com": "peerius", - "pendo.io": "pendo.io", - "pepper.com": "pepper.com", - "gopjn.com": "pepperjam", - "pjatr.com": "pepperjam", - "pjtra.com": "pepperjam", - "pntra.com": "pepperjam", - "pntrac.com": "pepperjam", - "pntrs.com": "pepperjam", - "player.pepsia.com": "pepsia", - "perfdrive.com": "perfdrive.com", - "perfectaudience.com": "perfect_audience", - "prfct.co": "perfect_audience", - "perfectmarket.com": "perfect_market", - "performgroup.com": "perform_group", - "analytics.performable.com": "performable", - "performancing.com": "performancing_metrics", - "performax.cz": "performax", - "perimeterx.net": "perimeterx.net", - "permutive.com": "permutive", - "persgroep.net": "persgroep", - "persianstat.com": "persianstat", - "code.pers.io": "persio", - "counter.personyze.com": "personyze", - "petametrics.com": "petametrics", - "ads.pheedo.com": "pheedo", - "app.phonalytics.com": "phonalytics", - "d2bgg7rjywcwsy.cloudfront.net": "phunware", - "piguiqproxy.com": "piguiqproxy.com", - "trgt.eu": "pilot", - "pingdom.net": "pingdom", - "pinimg.com": "pinterest", - "pinterest.com": "pinterest", - "app.pipz.io": "pipz", - "disabled.invalid": "piwik", - "piwik.pro": "piwik_pro_analytics_suite", - "adrta.com": "pixalate", - "app.pixelpop.co": "pixel_union", - "pixfuture.net": "pixfuture", - "vast1.pixfuture.com": "pixfuture", - "piximedia.com": "piximedia", - "pizzaandads.com": "pizzaandads_com", - "ads.placester.net": "placester", - "d3uemyw1e5n0jw.cloudfront.net": "placester", - "pladform.com": "pladform.ru", - "tag.bi.serviceplan.com": "plan.net_experience_cloud", - "pfrm.co": "platform360", - "impact-ad.jp": "platformone", - "loveadvert.ru": "play_by_mamba", - "playbuzz.com": "playbuzz.com", - "pof.com": "plenty_of_fish", - "analytics.plex.tv": "plex_metrics", - "metrics.plex.tv": "plex_metrics", - "plista.com": "plista", - "plugrush.com": "plugrush", - "pluso.ru": "pluso.ru", - "plutusads.com": "plutusads", - "pmddby.com": "pmddby.com", - "pnamic.com": "pnamic.com", - "po.st": "po.st", - "widgets.getpocket.com": "pocket", - "pocketcents.com": "pocketcents", - "pointificsecure.com": "pointific", - "pointroll.com": "pointroll", - "poirreleast.club": "poirreleast.club", - "mediavoice.com": "polar.me", - "polar.me": "polar.me", - "polarmobile.com": "polar.me", - "polldaddy.com": "polldaddy", - "polyad.net": "polyad", - "polyfill.io": "polyfill.io", - "popads.net": "popads", - "popadscdn.net": "popads", - "popcash.net": "popcash", - "desv383oqqc0.cloudfront.net": "popcorn_metrics", - "popin.cc": "popin.cc", - "cdn.popmyads.com": "popmyads", - "poponclick.com": "poponclick", - "populis.com": "populis", - "populisengage.com": "populis", - "phncdn.com": "pornhub", - "pornhub.com": "pornhub", - "prscripts.com": "pornwave", - "prstatics.com": "pornwave", - "prwidgets.com": "pornwave", - "barra.brasil.gov.br": "porta_brazil", - "postaffiliatepro.com": "post_affiliate_pro", - "powerlinks.com": "powerlinks", - "powerreviews.com": "powerreviews", - "powr.io": "powr.io", - "api.pozvonim.com": "pozvonim", - "prebid.org": "prebid", - "precisionclick.com": "precisionclick", - "adserver.com.br": "predicta", - "predicta.net": "predicta", - "prnx.net": "premonix", - "ppjol.com": "press", - "ppjol.net": "press", - "api.pressly.com": "pressly", - "pricegrabber.com": "pricegrabber", - "cdn.pricespider.com": "pricespider", - "pmdrecrute.com": "prismamediadigital.com", - "prismamediadigital.com": "prismamediadigital.com", - "privy.com": "privy.com", - "pswec.com": "proclivity", - "prodperfect.com": "prodperfect", - "lib.productsup.io": "productsup", - "proadsnet.com": "profiliad", - "profitshare.ro": "profitshare", - "tracking.proformics.com": "proformics", - "programattik.com": "programattik", - "projectwonderful.com": "project_wonderful", - "propelmarketing.com": "propel_marketing", - "oclaserver.com": "propeller_ads", - "onclasrv.com": "propeller_ads", - "onclickads.net": "propeller_ads", - "onclkds.com": "propeller_ads", - "propellerads.com": "propeller_ads", - "propellerpops.com": "propeller_ads", - "proper.io": "propermedia", - "st-a.props.id": "props", - "propvideo.net": "propvideo_net", - "tr.prospecteye.com": "prospecteye", - "prosperent.com": "prosperent", - "prostor-lite.ru": "prostor", - "providesupport.com": "provide_support", - "proximic.com": "proximic", - "proxistore.com": "proxistore.com", - "pscp.tv": "pscp.tv", - "pstatic.net": "pstatic.net", - "psyma.com": "psyma", - "ptengine.jp": "pt_engine", - "pub-fit.com": "pub-fit", - "pub.network": "pub.network", - "learnpipe.com": "pubble", - "pubble.co": "pubble", - "pubdirecte.com": "pubdirecte", - "pubgears.com": "pubgears", - "publicidees.com": "public_ideas", - "publicidad.net": "publicidad.net", - "intgr.net": "publir", - "pubmatic.com": "pubmatic", - "pubnub.com": "pubnub.com", - "puboclic.com": "puboclic", - "pulpix.com": "pulpix.com", - "tentaculos.net": "pulpo_media", - "pulse360.com": "pulse360", - "pulseinsights.com": "pulse_insights", - "contextweb.com": "pulsepoint", - "pulsepoint.com": "pulsepoint", - "punchtab.com": "punchtab", - "purch.com": "purch", - "servebom.com": "purch", - "purechat.com": "pure_chat", - "cdn.pprl.io": "pureprofile", - "oopt.fr": "purlive", - "puserving.com": "puserving.com", - "push.world": "push.world", - "pushengage.com": "push_engage", - "pushame.com": "pushame.com", - "zebra.pushbullet.com": "pushbullet", - "pushcrew.com": "pushcrew", - "pusher.com": "pusher.com", - "pusherapp.com": "pusher.com", - "pushnative.com": "pushnative.com", - "cdn.pushnews.eu": "pushnews", - "pushno.com": "pushno.com", - "pushwhy.com": "pushwhy.com", - "pushwoosh.com": "pushwoosh.com", - "pvclouds.com": "pvclouds.com", - "ads.q1media.com": "q1media", - "q1mediahydraplatform.com": "q1media", - "q-divisioncdn.de": "q_division", - "qbaka.net": "qbaka", - "track.qcri.org": "qcri_analytics", - "collect.qeado.com": "qeado", - "s.lianmeng.360.cn": "qihoo_360", - "qq.com": "qq.com", - "qrius.me": "qrius", - "qualaroo.com": "qualaroo", - "bluecava.com": "qualia", - "qualtrics.com": "qualtrics", - "quantcast.com": "quantcast", - "quantserve.com": "quantcast", - "quantcount.com": "quantcount", - "quantummetric.com": "quantum_metric", - "quartic.pl": "quartic.pl", - "quarticon.com": "quartic.pl", - "d3c3cq33003psk.cloudfront.net": "qubit", - "qubit.com": "qubit", - "easyresearch.se": "questback", - "queue-it.net": "queue-it", - "quick-counter.net": "quick-counter.net", - "adsonar.com": "quigo_adsonar", - "qnsr.com": "quinstreet", - "quinstreet.com": "quinstreet", - "thecounter.com": "quinstreet", - "quintelligence.com": "quintelligence", - "qservz.com": "quisma", - "quisma.com": "quisma", - "quora.com": "quora.com", - "ads-digitalkeys.com": "r_advertising", - "rackcdn.com": "rackcdn.com", - "radarurl.com": "radarurl", - "dsa.csdata1.com": "radial", - "gwallet.com": "radiumone", - "r1-cdn.net": "radiumone", - "widget.raisenow.com": "raisenow", - "mediaforge.com": "rakuten_display", - "rmtag.com": "rakuten_display", - "rakuten.co.jp": "rakuten_globalmarket", - "trafficgate.net": "rakuten_globalmarket", - "mtwidget04.affiliate.rakuten.co.jp": "rakuten_widget", - "xml.affilliate.rakuten.co.jp": "rakuten_widget", - "rambler.ru": "rambler", - "top100.ru": "rambler", - "rapidspike.com": "rapidspike", - "ravelin.com": "ravelin", - "rawgit.com": "rawgit", - "raygun.io": "raygun", - "count.rbc.ru": "rbc_counter", - "rcs.it": "rcs.it", - "rcsmediagroup.it": "rcs.it", - "d335luupugsy2.cloudfront.net": "rd_station", - "d12ulf131zb0yj.cloudfront.net": "reachforce", - "reachforce.com": "reachforce", - "reachjunction.com": "reachjunction", - "cdn.rlets.com": "reachlocal", - "reachlocal.com": "reachlocal", - "reachlocallivechat.com": "reachlocal", - "rlcdn.net": "reachlocal", - "plugin.reactful.com": "reactful", - "reactivpub.fr": "reactivpub", - "skinected.com": "reactx", - "readrboard.com": "readerboard", - "readme.com": "readme", - "readme.io": "readme", - "readspeaker.com": "readspeaker.com", - "realclick.co.kr": "realclick", - "realperson.de": "realperson.de", - "powermarketing.com": "realtime", - "realtime.co": "realtime", - "webspectator.com": "realtime", - "dcniko1cv0rz.cloudfront.net": "realytics", - "realytics.io": "realytics", - "static.rbl.ms": "rebel_mouse", - "recettes.net": "recettes.net", - "static.recopick.com": "recopick", - "recreativ.ru": "recreativ", - "analytics.recruitics.com": "recruitics", - "analytics.cohesionapps.com": "red_ventures", - "cdn.cohesionapps.com": "red_ventures", - "redblue.de": "redblue_de", - "atendesoftware.pl": "redcdn.pl", - "redd.it": "reddit", - "reddit-image.s3.amazonaws.com": "reddit", - "reddit.com": "reddit", - "redditmedia.com": "reddit", - "redditstatic.com": "reddit", - "redhelper.ru": "redhelper", - "pixelinteractivemedia.com": "redlotus", - "triggit.com": "redlotus", - "grt01.com": "redtram", - "grt02.com": "redtram", - "redtram.com": "redtram", - "rdtcdn.com": "redtube.com", - "redtube.com": "redtube.com", - "reduxmedia.com": "redux_media", - "reduxmediagroup.com": "redux_media", - "reedbusiness.net": "reed_business_information", - "reembed.com": "reembed.com", - "reevoo.com": "reevoo.com", - "refericon.pl": "refericon", - "ads.referlocal.com": "referlocal", - "refersion.com": "refersion", - "refinedads.com": "refined_labs", - "product.reflektion.com": "reflektion", - "reformal.ru": "reformal", - "reinvigorate.net": "reinvigorate", - "convertglobal.com": "rekko", - "convertglobal.s3.amazonaws.com": "rekko", - "dnhgz729v27ca.cloudfront.net": "rekko", - "reklamstore.com": "reklam_store", - "ad.reklamport.com": "reklamport", - "delivery.reklamz.com": "reklamz", - "adimg.rekmob.com": "rekmob", - "relap.io": "relap", - "svtrd.com": "relay42", - "synovite-scripts.com": "relay42", - "tdn.r42tag.com": "relay42", - "relestar.com": "relestar", - "relevant4.com": "relevant4.com", - "remintrex.com": "remintrex", - "remove.video": "remove.video", - "rp-api.com": "repost.us", - "republer.com": "republer.com", - "resmeter.respublica.al": "res-meter", - "researchnow.com": "research_now", - "reson8.com": "resonate_networks", - "respondhq.com": "respond", - "adinsight.com": "responsetap", - "adinsight.eu": "responsetap", - "responsetap.com": "responsetap", - "data.resultlinks.com": "result_links", - "sli-system.com": "resultspage.com", - "retailrocket.net": "retailrocket.net", - "retailrocket.ru": "retailrocket.net", - "shopify.retargetapp.com": "retarget_app", - "retargeter.com": "retargeter_beacon", - "retargeting.cl": "retargeting.cl", - "d1stxfv94hrhia.cloudfront.net": "retention_science", - "waves.retentionscience.com": "retention_science", - "reutersmedia.net": "reuters_media", - "revcontent.com": "revcontent", - "socialtwist.com": "reve_marketing", - "revenue.com": "revenue", - "clkads.com": "revenuehits", - "clkmon.com": "revenuehits", - "clkrev.com": "revenuehits", - "clksite.com": "revenuehits", - "eclkspbn.com": "revenuehits", - "imageshack.host": "revenuehits", - "revenuemantra.com": "revenuemantra", - "revive-adserver.com": "revive_adserver", - "revolvermaps.com": "revolver_maps", - "cts.tradepub.com": "revresponse", - "revresponse.com": "revresponse", - "incontext.pl": "rewords", - "pl-engine.intextad.net": "rewords", - "addesktop.com": "rhythmone", - "1rx.io": "rhythmone_beacon", - "ria.ru": "ria.ru", - "rmbn.ru": "rich_media_banner_network", - "ics0.com": "richrelevance", - "richrelevance.com": "richrelevance", - "ringier.ch": "ringier.ch", - "meteorsolutions.com": "rio_seo", - "riskified.com": "riskfield.com", - "rncdn3.com": "rncdn3.com", - "ro2.biz": "ro2.biz", - "rbxcdn.com": "roblox", - "getrockerbox.com": "rockerbox", - "rocket.la": "rocket.ia", - "trk.sodoit.com": "roi_trax", - "collector.roistat.com": "roistat", - "rollad.ru": "rollad", - "d37gvrvc0wt4s1.cloudfront.net": "rollbar", - "get.roost.me": "roost", - "getrooster.com": "rooster", - "rqtrk.eu": "roq.ad", - "rotaban.ru": "rotaban", - "routenplaner-karten.com": "routenplaner-karten.com", - "rovion.com": "rovion", - "rsspump.com": "rsspump", - "creativecdn.com": "rtb_house", - "rvty.net": "rtblab", - "rtbsuperhub.com": "rtbsuperhub.com", - "rtl.de": "rtl_group", - "static-fra.de": "rtl_group", - "technical-service.net": "rtl_group", - "rtmark.net": "rtmark.net", - "dpclk.com": "rubicon", - "mobsmith.com": "rubicon", - "nearbyad.com": "rubicon", - "rubiconproject.com": "rubicon", - "tracker.ruhrgebiet-onlineservices.de": "ruhrgebiet", - "click.rummycircle.com": "rummycircle", - "runadtag.com": "run", - "rundsp.com": "run", - "un-syndicate.com": "runative", - "cdn.secretrune.com": "rune", - "runmewivel.com": "runmewivel.com", - "rhythmxchange.com": "rythmxchange", - "s24.com": "s24_com", - "s3xified.com": "s3xified.com", - "camp.sabavision.com": "sabavision", - "sageanalyst.net": "sagemetrics", - "sail-horizon.com": "sailthru_horizon", - "sail-personalize.com": "sailthru_horizon", - "sailthru.com": "sailthru_horizon", - "d16fk4ms6rqz1v.cloudfront.net": "salecycle", - "salecycle.com": "salecycle", - "api.salesfeed.com": "sales_feed", - "salesmanago.com": "sales_manago", - "salesmanago.pl": "sales_manago", - "force.com": "salesforce.com", - "salesforce.com": "salesforce.com", - "liveagentforsalesforce.com": "salesforce_live_agent", - "salesforceliveagent.com": "salesforce_live_agent", - "msgapp.com": "salesfusion", - "salespidermedia.com": "salespider_media", - "salesviewer.com": "salesviewer", - "samba.tv": "samba.tv", - "ilsemedia.nl": "sanoma.fi", - "sanoma.fi": "sanoma.fi", - "d13im3ek7neeqp.cloudfront.net": "sap_crm", - "d28ethi6slcjbm.cloudfront.net": "sap_crm", - "d2uevgmgh16uk4.cloudfront.net": "sap_crm", - "d3m83gvgzupli.cloudfront.net": "sap_crm", - "saas.seewhy.com": "sap_crm", - "leadforce1.com": "sap_sales_cloud", - "vlog.leadformix.com": "sap_sales_cloud", - "sap-xm.org": "sap_xm", - "sape.ru": "sape.ru", - "js.sl.pt": "sapo_ads", - "aimatch.com": "sas", - "sas.com": "sas", - "say.ac": "say.ac", - "ads.saymedia.com": "say_media", - "srv.sayyac.net": "sayyac", - "scarabresearch.com": "scarabresearch", - "schibsted.com": "schibsted", - "schibsted.io": "schibsted", - "schneevonmorgen.com": "schneevonmorgen.com", - "svonm.com": "schneevonmorgen.com", - "rockabox.co": "scoota", - "scorecardresearch.com": "scorecard_research_beacon", - "scoreresearch.com": "scorecard_research_beacon", - "scrsrch.com": "scorecard_research_beacon", - "securestudies.com": "scorecard_research_beacon", - "scout.scoutanalytics.net": "scout_analytics", - "scribblelive.com": "scribblelive", - "scribol.com": "scribol", - "analytics.snidigital.com": "scripps_analytics", - "scroll.com": "scroll", - "scupio.com": "scupio", - "search123.uk.com": "search123", - "searchforce.net": "searchforce", - "searchignite.com": "searchignite", - "srtk.net": "searchrev", - "tacticalrepublic.com": "second_media", - "securedtouch.com": "securedtouch", - "securedvisit.com": "securedvisit", - "bacontent.de": "seeding_alliance", - "nativendo.de": "seeding_alliance", - "seedtag.com": "seedtag.com", - "svlu.net": "seevolution", - "d2dq2ahtl5zl1z.cloudfront.net": "segment", - "d47xnnr8b1rki.cloudfront.net": "segment", - "segment.com": "segment", - "segment.io": "segment", - "rutarget.ru": "segmento", - "segmint.net": "segmint", - "sekindo.com": "sekindo", - "sellpoint.net": "sellpoints", - "sellpoints.com": "sellpoints", - "semantiqo.com": "semantiqo.com", - "semasio.net": "semasio", - "semilo.com": "semilo", - "semknox.com": "semknox.com", - "sibautomation.com": "sendinblue", - "sendpulse.com": "sendpulse.com", - "sendsay.ru": "sendsay", - "track.sensedigital.in": "sense_digital", - "static.sensorsdata.cn": "sensors_data", - "sentifi.com": "sentifi.com", - "d3nslu0hdya83q.cloudfront.net": "sentry", - "getsentry.com": "sentry", - "ravenjs.com": "sentry", - "sentry.io": "sentry", - "sepyra.com": "sepyra", - "d2oh4tlt9mrke9.cloudfront.net": "sessioncam", - "sessioncam.com": "sessioncam", - "sessionly.io": "sessionly", - "71i.de": "sevenone_media", - "sexad.net": "sexadnetwork", - "ads.sexinyourcity.com": "sexinyourcity", - "sextracker.com": "sextracker", - "sexypartners.net": "sexypartners.net", - "im.cz": "seznam", - "imedia.cz": "seznam", - "szn.cz": "seznam", - "dtym7iokkjlif.cloudfront.net": "shareaholic", - "shareaholic.com": "shareaholic", - "shareasale.com": "shareasale", - "quintrics.nl": "sharecompany", - "sharecompany.nl": "sharecompany", - "sharepointonline.com": "sharepoint", - "sharethis.com": "sharethis", - "shareth.ru": "sharethrough", - "sharethrough.com": "sharethrough", - "marketingautomation.services": "sharpspring", - "sharpspring.com": "sharpspring", - "sheego.de": "sheego.de", - "services.sheerid.com": "sheerid", - "shinystat.com": "shinystat", - "shinystat.it": "shinystat", - "app.shoptarget.com.br": "shop_target", - "retargeter.com.br": "shop_target", - "shopauskunft.de": "shopauskunft.de", - "shopgate.com": "shopgate.com", - "shopify.com": "shopify_stats", - "shopifycdn.com": "shopifycdn.com", - "shopifycloud.com": "shopifycloud.com", - "shopperapproved.com": "shopper_approved", - "shoppingshadow.com": "shopping_com", - "tracking.shopping-flux.com": "shopping_flux", - "shoprunner.com": "shoprunner", - "shopsocially.com": "shopsocially", - "shopzilla.com": "shopzilla", - "shortnews.de": "shortnews", - "shink.in": "shrink", - "shutterstock.com": "shutterstock", - "siblesectiveal.club": "siblesectiveal.club", - "d3v27wwd40f0xu.cloudfront.net": "sidecar", - "getsidecar.com": "sidecar", - "dtlilztwypawv.cloudfront.net": "sift_science", - "siftscience.com": "sift_science", - "btstatic.com": "signal", - "signal.co": "signal", - "thebrighttag.com": "signal", - "cdn-scripts.signifyd.com": "signifyd", - "signifyd.com": "signifyd", - "gw-services.vtrenz.net": "silverpop", - "mkt51.net": "silverpop", - "mkt912.com": "silverpop", - "mkt922.com": "silverpop", - "mkt941.com": "silverpop", - "pages01.net": "silverpop", - "pages02.net": "silverpop", - "pages04.net": "silverpop", - "pages05.net": "silverpop", - "similardeals.net": "similardeals.net", - "d8rk54i4mohrb.cloudfront.net": "simplereach", - "simplereach.com": "simplereach", - "simpli.fi": "simpli.fi", - "sina.com.cn": "sina", - "sinaimg.cn": "sina_cdn", - "reporting.singlefeed.com": "singlefeed", - "sddan.com": "sirdata", - "site24x7rum.com": "site24x7", - "site24x7rum.eu": "site24x7", - "sitebooster-fjfmworld-production.azureedge.net": "site_booster", - "a5.ogt.jp": "site_stratos", - "siteapps.com": "siteapps", - "sitebro.com": "sitebro", - "sitebro.com.tw": "sitebro", - "sitebro.net": "sitebro", - "sitebro.tw": "sitebro", - "siteheart.com": "siteheart", - "siteimprove.com": "siteimprove", - "siteimproveanalytics.com": "siteimprove_analytics", - "sitelabweb.com": "sitelabweb.com", - "sitemeter.com": "sitemeter", - "pixel.ad": "sitescout", - "sitescout.com": "sitescout", - "ad.sitemaji.com": "sitetag", - "sitetag.us": "sitetag", - "analytics.sitewit.com": "sitewit", - "ads.sixapart.com": "six_apart_advertising", - "sixt-neuwagen.de": "sixt-neuwagen.de", - "skadtec.com": "skadtec.com", - "redirectingat.com": "skimlinks", - "skimlinks.com": "skimlinks", - "skimresources.com": "skimlinks", - "analytics.skroutz.gr": "skroutz", - "skyglue.com": "skyglue", - "skype.com": "skype", - "skypeassets.com": "skype", - "skysa.com": "skysa", - "skyscnr.com": "skyscnr.com", - "slashdot.org": "slashdot_widget", - "sleeknotestaticcontent.sleeknote.com": "sleeknote", - "resultspage.com": "sli_systems", - "builder.extensionfactory.com": "slice_factory", - "freeskreen.com": "slimcutmedia", - "slingpic.com": "slingpic", - "smaato.net": "smaato", - "smart4ads.com": "smart4ads", - "sascdn.com": "smart_adserver", - "smartadserver.com": "smart_adserver", - "styria-digital.com": "smart_adserver", - "yoc-adserver.com": "smart_adserver", - "smartcall.kz": "smart_call", - "getsmartcontent.com": "smart_content", - "smartdevicemedia.com": "smart_device_media", - "x.cnt.my": "smart_leads", - "tracking.smartselling.cz": "smart_selling", - "bepolite.eu": "smartad", - "smartbn.ru": "smartbn", - "smartclick.net": "smartclick.net", - "smartclip.net": "smartclip", - "smartcontext.pl": "smartcontext", - "d1n00d49gkbray.cloudfront.net": "smarter_remarketer", - "dhxtx5wtu812h.cloudfront.net": "smarter_remarketer", - "smartertravel.com": "smarter_travel", - "travelsmarter.net": "smarter_travel", - "smct.co": "smarterclick", - "smartertrack.com": "smartertrack", - "smartlink.cool": "smartlink.cool", - "getsmartlook.com": "smartlook", - "smartlook.com": "smartlook", - "smartstream.tv": "smartstream.tv", - "smartsuppchat.com": "smartsupp_chat", - "smi2.net": "smi2.ru", - "smi2.ru": "smi2.ru", - "stat.media": "smi2.ru", - "cdn.smooch.io": "smooch", - "smowtion.com": "smowtion", - "smxindia.in": "smx_ventures", - "smyte.com": "smyte", - "snacktv.de": "snacktv", - "snap.com": "snap", - "snapengage.com": "snap_engage", - "sc-static.net": "snapchat", - "snapchat.com": "snapchat", - "h-bid.com": "snigelweb", - "eu2.snoobi.eu": "snoobi", - "snoobi.com": "snoobi_analytics", - "d346whrrklhco7.cloudfront.net": "snowplow", - "d78fikflryjgj.cloudfront.net": "snowplow", - "dc8xl0ndzn2cb.cloudfront.net": "snowplow", - "playwire.com": "snowplow", - "snplow.net": "snowplow", - "go-mpulse.net": "soasta_mpulse", - "mpstat.us": "soasta_mpulse", - "tiaa-cref.org": "soasta_mpulse", - "sociablelabs.com": "sociable_labs", - "socialamp.com": "social_amp", - "socialannex.com": "social_annex", - "soclminer.com.br": "social_miner", - "duu8lzqdm8tsz.cloudfront.net": "socialbeat", - "ratevoice.com": "socialrms", - "sociaplus.com": "sociaplus.com", - "sociomantic.com": "sociomantic", - "images.sohu.com": "sohu", - "sojern.com": "sojern", - "sokrati.com": "sokrati", - "solads.media": "solads.media", - "solidopinion.com": "solidopinion", - "pixel.solvemedia.com": "solve_media", - "soma2.de": "soma_2", - "mobileadtrading.com": "somoaudience", - "sonobi.com": "sonobi", - "sophus3.com": "sophus3", - "deployads.com": "sortable", - "sndcdn.com": "soundcloud", - "soundcloud.com": "soundcloud", - "provenpixel.com": "sourceknowledge_pixel", - "decenthat.com": "sourcepoint", - "summerhamster.com": "sourcepoint", - "d3pkae9owd2lcf.cloudfront.net": "sovrn", - "lijit.com": "sovrn", - "onscroll.com": "sovrn_viewability_solutions", - "rts.sparkstudios.com": "spark_studios", - "sparkasse.de": "sparkasse.de", - "speakpipe.com": "speakpipe", - "adviva.net": "specific_media", - "specificclick.net": "specific_media", - "specificmedia.com": "specific_media", - "spectate.com": "spectate", - "speedshiftmedia.com": "speed_shift_media", - "speedcurve.com": "speedcurve", - "admarket.entireweb.com": "speedyads", - "affiliate.entireweb.com": "speedyads", - "sa.entireweb.com": "speedyads", - "speee-ad.akamaized.net": "speee", - "sphere.com": "sphere", - "surphace.com": "sphere", - "api.spheremall.com": "spheremall", - "zdwidget3-bs.sphereup.com": "sphereup", - "static.sspicy.ru": "spicy", - "spider.ad": "spider.ad", - "metrics.spiderads.eu": "spider_ads", - "spn.ee": "spinnakr", - "embed.spokenlayer.com": "spokenlayer", - "spongecell.com": "spongecell", - "sponsorads.de": "sponsorads.de", - "sportsbetaffiliates.com.au": "sportsbet_affiliates", - "spot.im": "spot.im", - "spoteffects.net": "spoteffect", - "scdn.co": "spotify", - "spotify.com": "spotify", - "embed.spotify.com": "spotify_embed", - "spotscenered.info": "spotscenered.info", - "spotx.tv": "spotxchange", - "spotxcdn.com": "spotxchange", - "spotxchange.com": "spotxchange", - "spoutable.com": "spoutable", - "cdn.springboardplatform.com": "springboard", - "springserve.com": "springserve", - "pixel.sprinklr.com": "sprinklr", - "stat.sputnik.ru": "sputnik", - "email-match.com": "squadata", - "squarespace.com": "squarespace.com", - "srvtrck.com": "srvtrck.com", - "srvvtrk.com": "srvvtrk.com", - "sstatic.net": "sstatic.net", - "hatena.ne.jp": "st-hatena", - "st-hatena.com": "st-hatena", - "stackadapt.com": "stackadapt", - "stackpathdns.com": "stackpathdns.com", - "stailamedia.com": "stailamedia_com", - "stalluva.pro": "stalluva.pro", - "startappservice.com": "startapp", - "hit.stat24.com": "stat24", - "adstat.4u.pl": "stat4u", - "stat.4u.pl": "stat4u", - "statcounter.com": "statcounter", - "stathat.com": "stathat", - "statisfy.net": "statisfy", - "statsy.net": "statsy.net", - "statuscake.com": "statuscake", - "statuspage.io": "statuspage.io", - "stayfriends.de": "stayfriends.de", - "steelhousemedia.com": "steelhouse", - "steepto.com": "steepto.com", - "stepstone.com": "stepstone.com", - "4stats.de": "stetic", - "stetic.com": "stetic", - "stickyadstv.com": "stickyads", - "stocktwits.com": "stocktwits", - "storify.com": "storify", - "storygize.net": "storygize", - "bizsolutions.strands.com": "strands_recommender", - "strava.com": "strava", - "mailfoogae.appspot.com": "streak", - "streamrail.com": "streamrail.com", - "streamrail.net": "streamrail.com", - "stridespark.com": "stride", - "stripcdn.com": "stripchat.com", - "stripchat.com": "stripchat.com", - "stripe.com": "stripe.com", - "stripe.network": "stripe.com", - "stripst.com": "stripst.com", - "interactivemedia.net": "stroer_digital_media", - "stroeerdigitalgroup.de": "stroer_digital_media", - "stroeerdigitalmedia.de": "stroer_digital_media", - "stroeerdp.de": "stroer_digital_media", - "stroeermediabrands.de": "stroer_digital_media", - "spklw.com": "strossle", - "sprinklecontent.com": "strossle", - "strossle.it": "strossle", - "struq.com": "struq", - "stumble-upon.com": "stumbleupon_widgets", - "stumbleupon.com": "stumbleupon_widgets", - "su.pr": "stumbleupon_widgets", - "sub2tech.com": "sub2", - "ayads.co": "sublime_skinz", - "suggest.io": "suggest.io", - "sumologic.com": "sumologic.com", - "sumo.com": "sumome", - "sumome.com": "sumome", - "sundaysky.com": "sundaysky", - "supercounters.com": "supercounters", - "superfastcdn.com": "superfastcdn.com", - "socdm.com": "supership", - "supplyframe.com": "supplyframe", - "surfingbird.ru": "surf_by_surfingbird", - "px.surveywall-api.survata.com": "survata", - "cdn.sweettooth.io": "sweettooth", - "swiftypecdn.com": "swiftype", - "swisscom.ch": "swisscom", - "myswitchads.com": "switch_concepts", - "switchadhub.com": "switch_concepts", - "switchads.com": "switch_concepts", - "switchafrica.com": "switch_concepts", - "shopximity.com": "swoop", - "swoop.com": "swoop", - "analytics-cdn.sykescottages.co.uk": "sykes", - "norton.com": "symantec", - "seal.verisign.com": "symantec", - "symantec.com": "symantec", - "d.hodes.com": "symphony_talent", - "technorati.com": "synacor", - "technoratimedia.com": "synacor", - "cn.clickable.net": "syncapse", - "synergy-e.com": "synergy-e", - "sdp-campaign.de": "t-mobile", - "t-online.de": "t-mobile", - "telekom-dienste.de": "t-mobile", - "telekom.com": "t-mobile", - "telekom.de": "t-mobile", - "toi.de": "t-mobile", - "t8cdn.com": "t8cdn.com", - "tableteducation.com": "tableteducation.com", - "basebanner.com": "taboola", - "taboola.com": "taboola", - "taboolasyndication.com": "taboola", - "tacoda.net": "tacoda", - "commander1.com": "tag_commander", - "tagcommander.com": "tag_commander", - "tags.tagcade.com": "tagcade", - "taggify.net": "taggify", - "taggyad.jp": "taggy", - "levexis.com": "tagman", - "tailtarget.com": "tail_target", - "tailsweep.com": "tailsweep", - "tamedia.ch": "tamedia.ch", - "tanx.com": "tanx", - "alipcsec.com": "taobao", - "tapad.com": "tapad", - "theblogfrog.com": "tapinfluence", - "tarafdari.com": "tarafdari", - "target2sell.com": "target_2_sell", - "trackmytarget.com": "target_circle", - "cdn.targetfuel.com": "target_fuel", - "tawk.to": "tawk", - "tbn.ru": "tbn.ru", - "tchibo-content.de": "tchibo_de", - "tchibo.de": "tchibo_de", - "tdsrmbl.net": "tdsrmbl_net", - "teads.tv": "teads", - "tealeaf.ibmcloud.com": "tealeaf", - "tealium.com": "tealium", - "tealium.hs.llnwd.net": "tealium", - "tealiumiq.com": "tealium", - "tiqcdn.com": "tealium", - "teaser.cc": "teaser.cc", - "emailretargeting.com": "tedemis", - "tracking.dsmmadvantage.com": "teletech", - "tenderapp.com": "tender", - "tensitionschoo.club": "tensitionschoo.club", - "watch.teroti.com": "teroti", - "webterren.com": "terren", - "teufel.de": "teufel.de", - "theadex.com": "the_adex", - "connect.decknetwork.net": "the_deck", - "gu-web.net": "the_guardian", - "guardianapps.co.uk": "the_guardian", - "guim.co.uk": "the_guardian", - "deepthought.online": "the_reach_group", - "reachgroup.com": "the_reach_group", - "redintelligence.net": "the_reach_group", - "thesearchagency.net": "the_search_agency", - "thesun.co.uk": "the_sun", - "w-x.co": "the_weather_company", - "weather.com": "the_weather_company", - "wfxtriggers.com": "the_weather_company", - "tmdb.org": "themoviedb", - "thinglink.com": "thinglink", - "online-metrix.net": "threatmetrix", - "tidbit.co.in": "tidbit", - "code.tidio.co": "tidio", - "widget-v4.tidiochat.com": "tidio", - "analytics.tiktok.com": "tiktok_analytics", - "optimized.by.tiller.co": "tiller", - "vip.timezonedb.com": "timezondb", - "npttech.com": "tinypass", - "tinypass.com": "tinypass", - "tisoomi-services.com": "tisoomi", - "ad.tlvmedia.com": "tlv_media", - "ads.tlvmedia.com": "tlv_media", - "tag.tlvmedia.com": "tlv_media", - "research-int.se": "tns", - "sesamestats.com": "tns", - "spring-tns.net": "tns", - "statistik-gallup.net": "tns", - "tns-cs.net": "tns", - "tns-gallup.dk": "tns", - "tomnewsupdate.info": "tomnewsupdate.info", - "tfag.de": "tomorrow_focus", - "srv.clickfuse.com": "tonefuse", - "toplist.cz": "toplist.cz", - "toponclick.com": "toponclick_com", - "topsy.com": "topsy", - "insight.torbit.com": "torbit", - "toro-tags.com": "toro", - "toroadvertising.com": "toro", - "toroadvertisingmedia.com": "toro", - "tororango.com": "tororango.com", - "i.total-media.net": "total_media", - "inq.com": "touchcommerce", - "tovarro.com": "tovarro.com", - "rialpay.com": "tp-cdn.com", - "tp-cdn.com": "tp-cdn.com", - "kiwe.io": "tracc.it", - "tracc.it": "tracc.it", - "ipnoid.com": "tracemyip", - "tracemyip.org": "tracemyip", - "d2gfdmu30u15x7.cloudfront.net": "traceview", - "tracelytics.com": "traceview", - "cdn.trackduck.com": "track_duck", - "d2zah9y47r7bi2.cloudfront.net": "trackjs", - "dl1d2m8ri9v3j.cloudfront.net": "trackjs", - "trackjs.com": "trackjs", - "conversionlab.trackset.com": "trackset_conversionlab", - "trackuity.com": "trackuity", - "adsrvr.org": "tradedesk", - "tradedoubler.com": "tradedoubler", - "tradelab.fr": "tradelab", - "tradetracker.net": "tradetracker", - "cdntrf.com": "traffective", - "traffective.com": "traffective", - "my.trafficfuel.com": "traffic_fuel", - "trafficrevenue.net": "traffic_revenue", - "trafficstars.com": "traffic_stars", - "tsyndicate.com": "traffic_stars", - "trafficbroker.com": "trafficbroker", - "trafficfabrik.com": "trafficfabrik.com", - "trafficfactory.biz": "trafficfactory", - "trafficforce.com": "trafficforce", - "traffichaus.com": "traffichaus", - "trafficjunky.net": "trafficjunky", - "traffiliate.com": "traffiliate", - "storage.trafic.ro": "trafic", - "trafmag.com": "trafmag.com", - "api.transcend.io": "transcend", - "cdn.transcend.io": "transcend", - "telemetry.transcend.io": "transcend_telemetry", - "backoffice.transmatico.com": "transmatic", - "travelaudience.com": "travel_audience", - "trbo.com": "trbo", - "treasuredata.com": "treasuredata", - "scanscout.com": "tremor_video", - "tremorhub.com": "tremor_video", - "tremormedia.com": "tremor_video", - "tremorvideo.com": "tremor_video", - "videohub.tv": "tremor_video", - "s.tcimg.com": "trendcounter", - "tcimg.com": "trendcounter", - "trendemon.com": "trendemon", - "exponential.com": "tribal_fusion", - "tribalfusion.com": "tribal_fusion", - "tribl.io": "triblio", - "api.temails.com": "trigger_mail_marketing", - "t.myvisitors.se": "triggerbee", - "jscache.com": "tripadvisor", - "tacdn.com": "tripadvisor", - "tamgrt.com": "tripadvisor", - "tripadvisor.co.uk": "tripadvisor", - "tripadvisor.com": "tripadvisor", - "tripadvisor.de": "tripadvisor", - "3lift.com": "triplelift", - "d3iwjrnl4m67rd.cloudfront.net": "triplelift", - "triplelift.com": "triplelift", - "static.triptease.io": "triptease", - "andomedia.com": "triton_digital", - "tritondigital.com": "triton_digital", - "revelations.trovus.co.uk": "trovus_revelations", - "trsv3.com": "trsv3.com", - "truefitcorp.com": "true_fit", - "tru.am": "trueanthem", - "adlegend.com": "trueffect", - "addoer.com": "truehits.net", - "truehits.in.th": "truehits.net", - "truehits.net": "truehits.net", - "trumba.com": "trumba", - "truoptik.com": "truoptik", - "trustarc.com": "trustarc", - "truste.com": "trustarc", - "consent.truste.com": "truste_consent", - "choices-or.truste.com": "truste_notice", - "choices.truste.com": "truste_notice", - "privacy-policy.truste.com": "truste_seal", - "trustedshops.com": "trusted_shops", - "trustev.com": "trustev", - "secure.comodo.net": "trustlogo", - "trustlogo.com": "trustlogo", - "trustpilot.com": "trustpilot", - "trustwave.com": "trustwave.com", - "tubecorporate.com": "tubecorporate", - "tubecup.org": "tubecup.org", - "tubemogul.com": "tubemogul", - "sre-perim.com": "tumblr_analytics", - "txmblr.com": "tumblr_analytics", - "platform.tumblr.com": "tumblr_buttons", - "lib.tunein.com": "tune_in", - "adagio.turboadv.com": "turbo", - "turn.com": "turn_inc.", - "ngtv.io": "turner", - "turner.com": "turner", - "warnermedia.com": "turner", - "turnsocial.com": "turnsocial", - "turnto.com": "turnto", - "tvsquared.com": "tvsquared.com", - "tweetboard.com": "tweetboard", - "tweetmeme.com": "tweetmeme", - "c4tw.net": "twenga", - "twiago.com": "twiago", - "twinedigital.go2cloud.org": "twine", - "ext-twitch.tv": "twitch.tv", - "twitch.tv": "twitch.tv", - "jtvnw.net": "twitch_cdn", - "ttvnw.net": "twitch_cdn", - "twitchcdn.net": "twitch_cdn", - "twitchsvc.net": "twitch_cdn", - "t.co": "twitter", - "twimg.com": "twitter", - "twitter.com": "twitter", - "ads-twitter.com": "twitter_ads", - "analytics.twitter.com": "twitter_analytics", - "tellapart.com": "twitter_for_business", - "syndication.twitter.com": "twitter_syndication", - "twittercounter.com": "twittercounter", - "twyn.com": "twyn", - "txxx.com": "txxx.com", - "tynt.com": "tynt", - "typeform.com": "typeform", - "typepad.com": "typepad_stats", - "typography.com": "typography.com", - "tyroodirect.com": "tyroo", - "tyroodr.com": "tyroo", - "tzetze.it": "tzetze", - "ubersetzung-app.com": "ubersetzung-app.com", - "aralego.net": "ucfunnel", - "ucfunnel.com": "ucfunnel", - "at.ua": "ucoz", - "do.am": "ucoz", - "ucoz.net": "ucoz", - "ad-api-v01.uliza.jp": "uliza", - "api.umbel.com": "umbel", - "umebiggestern.club": "umebiggestern.club", - "unanimis.co.uk": "unanimis", - "d3pkntwtp2ukl5.cloudfront.net": "unbounce", - "t.unbounce.com": "unbounce", - "d21gpk1vhmjuf5.cloudfront.net": "unbxd", - "tracker.unbxdapi.com": "unbxd", - "under-box.com": "under-box.com", - "undercomputer.com": "undercomputer.com", - "udmserve.net": "underdog_media", - "undertone.com": "undertone", - "roitesting.com": "unica", - "unica.com": "unica", - "unister-adservices.com": "unister", - "unister-gmbh.de": "unister", - "uadx.com": "unite", - "nonstoppartner.net": "united_digital_group", - "tifbs.net": "united_internet_media_gmbh", - "ui-portal.de": "united_internet_media_gmbh", - "uimserv.net": "united_internet_media_gmbh", - "univide.com": "univide", - "unpkg.com": "unpkg.com", - "unrulymedia.com": "unruly_media", - "src.kitcode.net": "untriel_finger_printing", - "s.clickability.com": "upland_clickability_beacon", - "uppr.de": "uppr.de", - "upravel.com": "upravel.com", - "upsellit.com": "upsellit", - "kontagent.net": "upsight", - "app.uptain.de": "uptain", - "uptolike.com": "uptolike.com", - "uptrends.com": "uptrends", - "urban-media.com": "urban-media.com", - "urbanairship.com": "urban_airship", - "mobile.usabilitytools.com": "usability_tools", - "usabilla.com": "usabilla", - "usemax.de": "usemax", - "usemaxserver.de": "usemax", - "usemessages.com": "usemessages.com", - "api.usercycle.com": "usercycle", - "userdive.com": "userdive", - "userecho.com": "userecho", - "dq4irj27fs462.cloudfront.net": "userlike.com", - "userlike-cdn-widgets.s3-eu-west-1.amazonaws.com": "userlike.com", - "userlike.com": "userlike.com", - "contactusplus.com": "userpulse", - "user-pulse.appspot.com": "userpulse", - "userpulse.com": "userpulse", - "userreplay.net": "userreplay", - "sdsbucket.s3.amazonaws.com": "userreport", - "userreport.com": "userreport", - "dtkm4pd19nw6z.cloudfront.net": "userrules", - "api.usersnap.com": "usersnap", - "d3mvnvhjmkxpjz.cloudfront.net": "usersnap", - "uservoice.com": "uservoice", - "userzoom.com": "userzoom.com", - "usocial.pro": "usocial", - "utarget.ru": "utarget", - "uuidksinc.net": "uuidksinc.net", - "v12group.com": "v12_group", - "vacaneedasap.com": "vacaneedasap.com", - "ads.brand.net": "valassis", - "vdrn.redplum.com": "valassis", - "api.searchlinks.com": "validclick", - "js.searchlinks.com": "validclick", - "vinsight.de": "valiton", - "valueclick.net": "valueclick_media", - "valuecommerce.com": "valuecommerce", - "valuedopinions.co.uk": "valued_opinions", - "buzzparadise.com": "vanksen", - "vmmpxl.com": "varick_media_management", - "vcita.com": "vcita", - "tracking.vcommission.com": "vcommission", - "vdopia.com": "vdopia", - "veinteractive.com": "ve_interactive", - "vee24.com": "vee24", - "velocecdn.com": "velocecdn.com", - "mdcn.mobi": "velti_mgage_visualize", - "velti.com": "velti_mgage_visualize", - "vendemore.com": "vendemore", - "venturead.com": "venturead.com", - "api.venyoo.ru": "venyoo", - "veoxa.com": "veoxa", - "vergic.com": "vergic.com", - "d3qxef4rp70elm.cloudfront.net": "vero", - "getvero.com": "vero", - "verticalacuity.com": "vertical_acuity", - "roi.vertical-leap.co.uk": "vertical_leap", - "cts.vresp.com": "verticalresponse", - "verticalscope.com": "verticalscope", - "ads.vertoz.com": "vertoz", - "banner.vrtzads.com": "vertoz", - "veruta.com": "veruta", - "vrvm.com": "verve_mobile", - "vgwort.de": "vg_wort", - "digitaltarget.ru": "vi", - "btg.mtvnservices.com": "viacom_tag_container", - "viafoura.com": "viafoura", - "viafoura.net": "viafoura", - "intellitxt.com": "vibrant_ads", - "vicomi.com": "vicomi.com", - "vidazoo.com": "vidazoo.com", - "module-videodesk.com": "video_desk", - "vidtok.ru": "video_potok", - "videoadex.com": "videoadex.com", - "tidaltv.com": "videology", - "videonow.ru": "videonow", - "videoplayerhub.com": "videoplayerhub.com", - "videoplaza.tv": "videoplaza", - "kweb.videostep.com": "videostep", - "content.vidgyor.com": "vidgyor", - "vidible.tv": "vidible", - "assets.vidora.com": "vidora", - "vietad.vn": "vietad", - "viglink.com": "viglink", - "vigo.one": "vigo", - "vigo.ru": "vigo", - "vimeo.com": "vimeo", - "vimeocdn.com": "vimeo", - "vindicosuite.com": "vindico_group", - "vinted.net": "vinted", - "viraladnetwork.net": "viral_ad_network", - "app.viral-loops.com": "viral_loops", - "viralgains.com": "viralgains", - "viralmint.com": "viralmint", - "virgul.com": "virgul", - "ssp.virool.com": "virool_player", - "virtusize.com": "virtusize", - "viewablemedia.net": "visible_measures", - "visiblemeasures.com": "visible_measures", - "visioncriticalpanels.com": "vision_critical", - "visitstreamer.com": "visit_streamer", - "visitortracklog.com": "visitortrack", - "visitorville.com": "visitorville", - "d2hkbi3gan6yg6.cloudfront.net": "visscore", - "myvisualiq.net": "visual_iq", - "visualrevenue.com": "visual_revenue", - "d5phz18u4wuww.cloudfront.net": "visual_website_optimizer", - "visualwebsiteoptimizer.com": "visual_website_optimizer", - "wingify.com": "visual_website_optimizer", - "vdna-assets.com": "visualdna", - "visualdna.com": "visualdna", - "visualstudio.com": "visualstudio.com", - "id-visitors.com": "visualvisitor", - "vi-tag.net": "vivalu", - "vivistats.com": "vivistats", - "vizury.com": "vizury", - "vizzit.se": "vizzit", - "cdn-vk.com": "vk.com", - "vk-analytics.com": "vk.com", - "vkuservideo.net": "vk.com", - "userapi.com": "vkontakte", - "vk.com": "vkontakte", - "vkontakte.ru": "vkontakte", - "vntsm.com": "vntsm.com", - "vodafone.de": "vodafone.de", - "voicefive.com": "voicefive", - "volusion.com": "volusion_chat", - "cwkuki.com": "voluum", - "volumtrk.com": "voluum", - "voluumtrk3.com": "voluum", - "vooxe.com": "vooxe.com", - "vorwerk.de": "vorwerk.de", - "vox-cdn.com": "vox", - "embed.voxus.tv": "voxus", - "voxus-targeting-voxusmidia.netdna-ssl.com": "voxus", - "c-dsp.vpadn.com": "vpon", - "tools.vpscash.nl": "vpscash", - "vtracy.de": "vtracy.de", - "vuukle.com": "vuukle", - "view.vzaar.com": "vzaar", - "w3counter.com": "w3counter", - "w3roi.com": "w3roi", - "contentwidgets.net": "wahoha", - "wahoha.com": "wahoha", - "walkme.com": "walkme.com", - "wsod.com": "wall_street_on_demand", - "walmart.com": "walmart", - "wamcash.com": "wamcash", - "cdn-saveit.wanelo.com": "wanelo", - "static.warp.ly": "warp.ly", - "way2traffic.com": "way2traffic", - "wayfair.com": "wayfair_com", - "wdr.de": "wdr.de", - "web-stat.com": "web-stat", - "web.de": "web.de", - "webde.de": "web.de", - "webstat.net": "web.stat", - "ssl.webserviceaward.com": "web_service_award", - "webtraxs.com": "web_traxs", - "wipe.de": "web_wipe_analytics", - "webads.nl": "webads", - "tr.webantenna.info": "webantenna", - "webclicks24.com": "webclicks24_com", - "webclose.net": "webclose.net", - "webcollage.net": "webcollage", - "goutee.top": "webedia", - "mediaathay.org.uk": "webedia", - "wbdx.fr": "webedia", - "webeffective.keynote.com": "webeffective", - "widgets.webengage.com": "webengage", - "webgains.com": "webgains", - "webgozar.com": "webgozar", - "webgozar.ir": "webgozar", - "webhelpje.be": "webhelpje", - "webhelpje.nl": "webhelpje", - "webleads-tracker.com": "webleads_tracker", - "automation.webmecanik.com": "webmecanik", - "adrcdn.com": "weborama", - "adrcntr.com": "weborama", - "weborama.com": "weborama", - "weborama.fr": "weborama", - "webprospector.de": "webprospector", - "webstat.com": "webstat", - "webstat.se": "webstat.se", - "stat.webtrack.biz": "webtrack", - "webtraffic.no": "webtraffic", - "webtraffic.se": "webtraffic", - "d1r27qvpjiaqj3.cloudfront.net": "webtrekk", - "mateti.net": "webtrekk", - "wbtrk.net": "webtrekk", - "wcfbc.net": "webtrekk", - "webtrekk-asia.net": "webtrekk", - "webtrekk.com": "webtrekk", - "webtrekk.de": "webtrekk", - "webtrekk.net": "webtrekk", - "wt-eu02.net": "webtrekk", - "wt-safetag.com": "webtrekk", - "webtrends.com": "webtrends", - "webtrendslive.com": "webtrends", - "rd.clickshift.com": "webtrends_ads", - "web-visor.com": "webvisor", - "weebly.com": "weebly_ads", - "widget.weibo.com": "weibo_widget", - "westlotto.com": "westlotto_com", - "wetter.com": "wetter_com", - "wettercomassets.com": "wetter_com", - "whatsbroadcast.com": "whatbroadcast", - "amung.us": "whos.amung.us", - "whoson.com": "whoson", - "api.wibbitz.com": "wibbitz", - "cdn4.wibbitz.com": "wibbitz", - "cdn.wibiya.com": "wibiya_toolbar", - "predictad.com": "widdit", - "widerplanet.com": "widerplanet", - "widespace.com": "widespace", - "widgetserver.com": "widgetbox", - "3c45d848d99.se": "wiget_media", - "wigetmedia.com": "wiget_media", - "tracker.wigzopush.com": "wigzo", - "wikia-services.com": "wikia-services.com", - "wikia-beacon.com": "wikia_beacon", - "nocookie.net": "wikia_cdn", - "wikimedia.org": "wikimedia.org", - "wikipedia.org": "wikimedia.org", - "wikiquote.org": "wikimedia.org", - "tracking.winaffiliates.com": "winaffiliates", - "api.wipmania.com": "wipmania", - "col1.wiqhit.com": "wiqhit", - "wirecard.com": "wirecard", - "wirecard.de": "wirecard", - "leadlab.click": "wiredminds", - "wiredminds.com": "wiredminds", - "wiredminds.de": "wiredminds", - "adtotal.pl": "wirtualna_polska", - "wisepops.com": "wisepops", - "cdn.wishpond.net": "wishpond", - "wistia.com": "wistia", - "wistia.net": "wistia", - "parastorage.com": "wix.com", - "wix.com": "wix.com", - "public.wixab-cloud.com": "wixab", - "wixmp.com": "wixmp", - "wnzmauurgol.com": "wnzmauurgol.com", - "wonderpush.com": "wonderpush", - "woopic.com": "woopic.com", - "woopra.com": "woopra", - "pubmine.com": "wordpress_ads", - "w.org": "wordpress_stats", - "wordpress.com": "wordpress_stats", - "wp.com": "wordpress_stats", - "tracker.wordstream.com": "wordstream", - "worldnaturenet.xyz": "worldnaturenet_xyz", - "wp.pl": "wp.pl", - "wpimg.pl": "wp.pl", - "wpengine.com": "wp_engine", - "clickanalyzer.jp": "writeup_clickanalyzer", - "wurfl.io": "wurfl", - "wwwpromoter.com": "wwwpromoter", - "imgwykop.pl": "wykop", - "wykop.pl": "wykop", - "wysistat.com": "wysistat.com", - "wysistat.net": "wysistat.com", - "wywy.com": "wywy.com", - "wywyuserservice.com": "wywy.com", - "cdn.x-lift.jp": "x-lift", - "xapads.com": "xapads", - "xen-media.com": "xen-media.com", - "xfreeservice.com": "xfreeservice.com", - "xhamster.com": "xhamster", - "xhamsterlive.com": "xhamster", - "xhamsterpremium.com": "xhamster", - "xhcdn.com": "xhamster", - "xing-share.com": "xing", - "xing.com": "xing", - "xmediaclicks.com": "xmediaclicks", - "xnxx-cdn.com": "xnxx_cdn", - "xplosion.de": "xplosion", - "xtendmedia.com": "xtend", - "xvideos-cdn.com": "xvideos_com", - "xvideos.com": "xvideos_com", - "xxxlshop.de": "xxxlshop.de", - "xxxlutz.de": "xxxlutz", - "adx.com.ru": "yabbi", - "yabbi.me": "yabbi", - "yabuka.com": "yabuka", - "tumblr.com": "yahoo", - "yahoo.com": "yahoo", - "yahooapis.com": "yahoo", - "yimg.com": "yahoo", - "ads.yahoo.com": "yahoo_ad_exchange", - "yads.yahoo.com": "yahoo_ad_exchange", - "yieldmanager.com": "yahoo_ad_exchange", - "pr-bh.ybp.yahoo.com": "yahoo_ad_manager", - "analytics.yahoo.com": "yahoo_analytics", - "np.lexity.com": "yahoo_commerce_central", - "storage-yahoo.jp": "yahoo_japan_retargeting", - "yahoo.co.jp": "yahoo_japan_retargeting", - "yahooapis.jp": "yahoo_japan_retargeting", - "yimg.jp": "yahoo_japan_retargeting", - "yjtag.jp": "yahoo_japan_retargeting", - "ov.yahoo.co.jp": "yahoo_overture", - "overture.com": "yahoo_overture", - "luminate.com": "yahoo_small_business", - "pixazza.com": "yahoo_small_business", - "awaps.yandex.ru": "yandex", - "d31j93rd8oukbv.cloudfront.net": "yandex", - "webvisor.org": "yandex", - "yandex.net": "yandex", - "yandex.ru": "yandex", - "yastatic.net": "yandex", - "yandex.st": "yandex.api", - "yandexadexchange.net": "yandex_adexchange", - "metabar.ru": "yandex_advisor", - "an.webvisor.org": "yandex_direct", - "an.yandex.ru": "yandex_direct", - "bs.yandex.ru": "yandex_direct", - "mc.yandex.ru": "yandex_metrika", - "passport.yandex.ru": "yandex_passport", - "yapfiles.ru": "yapfiles.ru", - "yashi.com": "yashi", - "ad.adserverplus.com": "ybrant_media", - "player.sambaads.com": "ycontent", - "cdn.yektanet.com": "yektanet", - "fetch.yektanet.com": "yektanet", - "yengo.com": "yengo", - "yengointernational.com": "yengo", - "link.p0.com": "yesmail", - "adsrevenue.net": "yesup_advertising", - "infinityads.com": "yesup_advertising", - "momentsharing.com": "yesup_advertising", - "multipops.com": "yesup_advertising", - "onlineadultadvertising.com": "yesup_advertising", - "paypopup.com": "yesup_advertising", - "popupxxx.com": "yesup_advertising", - "xtargeting.com": "yesup_advertising", - "xxxwebtraffic.com": "yesup_advertising", - "app.yesware.com": "yesware", - "yldbt.com": "yieldbot", - "yieldify.com": "yieldify", - "yieldlab.net": "yieldlab", - "yieldlove-ad-serving.net": "yieldlove", - "yieldlove.com": "yieldlove", - "yieldmo.com": "yieldmo", - "254a.com": "yieldr", - "collect.yldr.io": "yieldr_air", - "yieldsquare.com": "yieldsquare", - "analytics-sdk.yle.fi": "yle", - "yllix.com": "yllixmedia", - "ymetrica1.com": "ymetrica1.com", - "ymzrrizntbhde.com": "ymzrrizntbhde.com", - "yoapp.s3.amazonaws.com": "yo_button", - "natpal.com": "yodle", - "analytics.yola.net": "yola_analytics", - "pixel.yola.net": "yola_analytics", - "delivery.yomedia.vn": "yomedia", - "yoochoose.net": "yoochoose.net", - "yotpo.com": "yotpo", - "yottaa.net": "yottaa", - "yottlyscript.com": "yottly", - "api.youcanbook.me": "youcanbookme", - "youcanbook.me": "youcanbookme", - "player.youku.com": "youku", - "youporn.com": "youporn", - "ypncdn.com": "youporn", - "googlevideo.com": "youtube", - "youtube-nocookie.com": "youtube", - "youtube.com": "youtube", - "ytimg.com": "youtube", - "c.ypcdn.com": "yp", - "i1.ypcdn.com": "yp", - "yellowpages.com": "yp", - "prod-js.aws.y-track.com": "ysance", - "y-track.com": "ysance", - "yume.com": "yume", - "yumenetworks.com": "yume,_inc.", - "gravityrd-services.com": "yusp", - "api.zadarma.com": "zadarma", - "zalan.do": "zalando_de", - "zalando.de": "zalando_de", - "ztat.net": "zalando_de", - "zaloapp.com": "zalo", - "zanox-affiliate.de": "zanox", - "zanox.com": "zanox", - "zanox.ws": "zanox", - "zaparena.com": "zaparena", - "zapunited.com": "zaparena", - "track.zappos.com": "zappos", - "zdassets.com": "zdassets.com", - "zebestof.com": "zebestof.com", - "zedo.com": "zedo", - "zemanta.com": "zemanta", - "zencdn.net": "zencoder", - "zendesk.com": "zendesk", - "zergnet.com": "zergnet", - "zero.kz": "zero.kz", - "app.insightgrit.com": "zeta", - "app.ubertags.com": "zeta", - "cdn.boomtrain.com": "zeta", - "events.api.boomtrain.com": "zeta", - "rfihub.com": "zeta", - "rfihub.net": "zeta", - "ru4.com": "zeta", - "xplusone.com": "zeta", - "zeusclicks.com": "zeusclicks", - "webtest.net": "ziff_davis", - "zdbb.net": "ziff_davis", - "ziffdavis.com": "ziff_davis", - "ziffdavisinternational.com": "ziff_davis", - "ziffprod.com": "ziff_davis", - "ziffstatic.com": "ziff_davis", - "analytics.ziftsolutions.com": "zift_solutions", - "zimbio.com": "zimbio.com", - "api.zippyshare.com": "zippyshare_widget", - "zmags.com": "zmags", - "zmctrack.net": "zmctrack.net", - "zog.link": "zog.link", - "js.zohostatic.eu": "zoho", - "zononi.com": "zononi.com", - "zopim.com": "zopim", - "zukxd6fkxqn.com": "zukxd6fkxqn.com", - "zwaar.net": "zwaar", - "zwaar.org": "zwaar", - "extend.tv": "zypmedia" - } -} \ No newline at end of file diff --git a/go.mod b/go.mod index 2d54d4c4..39e40a4c 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,8 @@ go 1.19 require ( // TODO(a.garipov): Use v0.48.0 when it's released. - github.com/AdguardTeam/dnsproxy v0.47.1-0.20230207130636-533058b17239 - github.com/AdguardTeam/golibs v0.11.4 + github.com/AdguardTeam/dnsproxy v0.48.0 + github.com/AdguardTeam/golibs v0.12.0 github.com/AdguardTeam/urlfilter v0.16.1 github.com/NYTimes/gziphandler v1.1.1 github.com/ameshkov/dnscrypt/v2 v2.2.5 @@ -51,16 +51,16 @@ require ( github.com/josharian/native v1.1.0 // indirect github.com/mdlayher/packet v1.1.1 // indirect github.com/mdlayher/socket v0.4.0 // indirect - github.com/onsi/ginkgo/v2 v2.8.1 // indirect + github.com/onsi/ginkgo/v2 v2.8.3 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pierrec/lz4/v4 v4.1.17 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quic-go/qpack v0.4.0 // indirect github.com/quic-go/qtls-go1-18 v0.2.0 // indirect - github.com/quic-go/qtls-go1-19 v0.2.0 // indirect - github.com/quic-go/qtls-go1-20 v0.1.0 // indirect - github.com/u-root/uio v0.0.0-20230215032506-9aa6f7e2d72c // indirect + github.com/quic-go/qtls-go1-19 v0.2.1 // indirect + github.com/quic-go/qtls-go1-20 v0.1.1 // indirect + github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 // indirect golang.org/x/mod v0.8.0 // indirect golang.org/x/sync v0.1.0 // indirect golang.org/x/text v0.7.0 // indirect diff --git a/go.sum b/go.sum index 68a4b1ab..8060927f 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,9 @@ -github.com/AdguardTeam/dnsproxy v0.47.1-0.20230207130636-533058b17239 h1:n1oOiywOvdeqWLto809bK1rK1EPDkpaSfT/r1OiCVaQ= -github.com/AdguardTeam/dnsproxy v0.47.1-0.20230207130636-533058b17239/go.mod h1:+Sdi5ISrjDFbeCsKNqzcC1Ag7pJ5Hh9y+UBNb3dfqJ4= +github.com/AdguardTeam/dnsproxy v0.48.0 h1:sGViYy2pV0cEp2zCsxPjFd9rlgD0+yELpIeLkBxHAoI= +github.com/AdguardTeam/dnsproxy v0.48.0/go.mod h1:9OHoeaVod+moWwrLjHF95RQnFWGi/6B1tfKsxWc/yGE= github.com/AdguardTeam/golibs v0.4.0/go.mod h1:skKsDKIBB7kkFflLJBpfGX+G8QFTx0WKUzB6TIgtUj4= github.com/AdguardTeam/golibs v0.10.4/go.mod h1:rSfQRGHIdgfxriDDNgNJ7HmE5zRoURq8R+VdR81Zuzw= -github.com/AdguardTeam/golibs v0.11.4 h1:IltyvxwCTN+xxJF5sh6VadF8Zfbf8elgCm9dgijSVzM= -github.com/AdguardTeam/golibs v0.11.4/go.mod h1:87bN2x4VsTritptE3XZg9l8T6gznWsIxHBcQ1DeRIXA= +github.com/AdguardTeam/golibs v0.12.0 h1:z4Q3Mz0pHJ2Zag4B0RBaIXEUue1TPOKkbRiYkwC4r7I= +github.com/AdguardTeam/golibs v0.12.0/go.mod h1:87bN2x4VsTritptE3XZg9l8T6gznWsIxHBcQ1DeRIXA= github.com/AdguardTeam/gomitmproxy v0.2.0/go.mod h1:Qdv0Mktnzer5zpdpi5rAwixNJzW2FN91LjKJCkVbYGU= github.com/AdguardTeam/urlfilter v0.16.1 h1:ZPi0rjqo8cQf2FVdzo6cqumNoHZx2KPXj2yZa1A5BBw= github.com/AdguardTeam/urlfilter v0.16.1/go.mod h1:46YZDOV1+qtdRDuhZKVPSSp7JWWes0KayqHrKAFBdEI= @@ -108,9 +108,9 @@ github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/onsi/ginkgo/v2 v2.8.1 h1:xFTEVwOFa1D/Ty24Ws1npBWkDYEV9BqZrsDxVrVkrrU= -github.com/onsi/ginkgo/v2 v2.8.1/go.mod h1:N1/NbDngAFcSLdyZ+/aYTYGSlq9qMCS/cNKGJjy+csc= -github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= +github.com/onsi/ginkgo/v2 v2.8.3 h1:RpbK1G8nWPNaCVFBWsOGnEQQGgASi6b8fxcWBvDYjxQ= +github.com/onsi/ginkgo/v2 v2.8.3/go.mod h1:6OaUA8BCi0aZfmzYT/q9AacwTzDpNbxILUT+TlBq6MY= +github.com/onsi/gomega v1.27.0 h1:QLidEla4bXUuZVFa4KX6JHCsuGgbi85LC/pCHrt/O08= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= @@ -125,10 +125,10 @@ github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= github.com/quic-go/qtls-go1-18 v0.2.0 h1:5ViXqBZ90wpUcZS0ge79rf029yx0dYB0McyPJwqqj7U= github.com/quic-go/qtls-go1-18 v0.2.0/go.mod h1:moGulGHK7o6O8lSPSZNoOwcLvJKJ85vVNc7oJFD65bc= -github.com/quic-go/qtls-go1-19 v0.2.0 h1:Cvn2WdhyViFUHoOqK52i51k4nDX8EwIh5VJiVM4nttk= -github.com/quic-go/qtls-go1-19 v0.2.0/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI= -github.com/quic-go/qtls-go1-20 v0.1.0 h1:d1PK3ErFy9t7zxKsG3NXBJXZjp/kMLoIb3y/kV54oAI= -github.com/quic-go/qtls-go1-20 v0.1.0/go.mod h1:JKtK6mjbAVcUTN/9jZpvLbGxvdWIKS8uT7EiStoU1SM= +github.com/quic-go/qtls-go1-19 v0.2.1 h1:aJcKNMkH5ASEJB9FXNeZCyTEIHU1J7MmHyz1Q1TSG1A= +github.com/quic-go/qtls-go1-19 v0.2.1/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI= +github.com/quic-go/qtls-go1-20 v0.1.1 h1:KbChDlg82d3IHqaj2bn6GfKRj84Per2VGf5XV3wSwQk= +github.com/quic-go/qtls-go1-20 v0.1.1/go.mod h1:JKtK6mjbAVcUTN/9jZpvLbGxvdWIKS8uT7EiStoU1SM= github.com/quic-go/quic-go v0.32.0 h1:lY02md31s1JgPiiyfqJijpu/UX/Iun304FI3yUqX7tA= github.com/quic-go/quic-go v0.32.0/go.mod h1:/fCsKANhQIeD5l76c2JFU+07gVE3KaA0FP+0zMWwfwo= github.com/shirou/gopsutil/v3 v3.21.8 h1:nKct+uP0TV8DjjNiHanKf8SAuub+GNsbrOtM9Nl9biA= @@ -155,8 +155,8 @@ github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ= github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= github.com/u-root/uio v0.0.0-20221213070652-c3537552635f/go.mod h1:IogEAUBXDEwX7oR/BMmCctShYs80ql4hF0ySdzGxf7E= -github.com/u-root/uio v0.0.0-20230215032506-9aa6f7e2d72c h1:PHoGTnweZP+KIg/8Zc6+iOesrIF5yHkpb4GBDxHm7yE= -github.com/u-root/uio v0.0.0-20230215032506-9aa6f7e2d72c/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264= +github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 h1:tHNk7XK9GkmKUR6Gh8gVBKXc2MVSZ4G/NnWLtzw4gNA= +github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= diff --git a/internal/aghnet/arpdb_bsd.go b/internal/aghnet/arpdb_bsd.go index c4048939..50287785 100644 --- a/internal/aghnet/arpdb_bsd.go +++ b/internal/aghnet/arpdb_bsd.go @@ -67,7 +67,7 @@ func parseArpA(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { } host := fields[0] - err = netutil.ValidateDomainName(host) + err = netutil.ValidateHostname(host) if err != nil { log.Debug("arpdb: parsing arp output: host: %s", err) } else { diff --git a/internal/aghnet/arpdb_linux.go b/internal/aghnet/arpdb_linux.go index e6e51feb..d3ebe4a7 100644 --- a/internal/aghnet/arpdb_linux.go +++ b/internal/aghnet/arpdb_linux.go @@ -198,7 +198,7 @@ func parseArpA(sc *bufio.Scanner, lenHint int) (ns []Neighbor) { } host := fields[0] - if verr := netutil.ValidateDomainName(host); verr != nil { + if verr := netutil.ValidateHostname(host); verr != nil { log.Debug("arpdb: parsing arp output: host: %s", verr) } else { n.Name = host diff --git a/internal/aghnet/hostscontainer.go b/internal/aghnet/hostscontainer.go index 62886730..c53f9d7c 100644 --- a/internal/aghnet/hostscontainer.go +++ b/internal/aghnet/hostscontainer.go @@ -343,7 +343,7 @@ func (hp *hostsParser) parseLine(line string) (ip netip.Addr, hosts []string) { // See https://github.com/AdguardTeam/AdGuardHome/issues/3946. // // TODO(e.burkov): Investigate if hosts may contain DNS-SD domains. - err = netutil.ValidateDomainName(f) + err = netutil.ValidateHostname(f) if err != nil { log.Error("%s: host %q is invalid, ignoring", hostsContainerPref, f) diff --git a/internal/dhcpd/config.go b/internal/dhcpd/config.go index 8b255f76..c942039a 100644 --- a/internal/dhcpd/config.go +++ b/internal/dhcpd/config.go @@ -45,8 +45,10 @@ type DHCPServer interface { AddStaticLease(l *Lease) (err error) // RemoveStaticLease - remove a static lease RemoveStaticLease(l *Lease) (err error) - // FindMACbyIP - find a MAC address by IP address in the currently active DHCP leases - FindMACbyIP(ip net.IP) net.HardwareAddr + + // FindMACbyIP returns a MAC address by the IP address of its lease, if + // there is one. + FindMACbyIP(ip netip.Addr) (mac net.HardwareAddr) // WriteDiskConfig4 - copy disk configuration WriteDiskConfig4(c *V4ServerConf) diff --git a/internal/dhcpd/dhcpd.go b/internal/dhcpd/dhcpd.go index 3602b4db..ef7fe19f 100644 --- a/internal/dhcpd/dhcpd.go +++ b/internal/dhcpd/dhcpd.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "net" + "net/netip" "path/filepath" "time" @@ -42,7 +43,11 @@ type Lease struct { Hostname string `json:"hostname"` HWAddr net.HardwareAddr `json:"mac"` - IP net.IP `json:"ip"` + + // IP is the IP address leased to the client. + // + // TODO(a.garipov): Migrate leases.db and use netip.Addr. + IP net.IP `json:"ip"` } // Clone returns a deep copy of l. @@ -160,7 +165,7 @@ type Interface interface { Leases(flags GetLeasesFlags) (leases []*Lease) SetOnLeaseChanged(onLeaseChanged OnLeaseChangedT) - FindMACbyIP(ip net.IP) (mac net.HardwareAddr) + FindMACbyIP(ip netip.Addr) (mac net.HardwareAddr) WriteDiskConfig(c *ServerConfig) } @@ -174,7 +179,7 @@ type MockInterface struct { OnEnabled func() (ok bool) OnLeases func(flags GetLeasesFlags) (leases []*Lease) OnSetOnLeaseChanged func(f OnLeaseChangedT) - OnFindMACbyIP func(ip net.IP) (mac net.HardwareAddr) + OnFindMACbyIP func(ip netip.Addr) (mac net.HardwareAddr) OnWriteDiskConfig func(c *ServerConfig) } @@ -195,8 +200,10 @@ func (s *MockInterface) Leases(flags GetLeasesFlags) (ls []*Lease) { return s.On // SetOnLeaseChanged implements the Interface for *MockInterface. func (s *MockInterface) SetOnLeaseChanged(f OnLeaseChangedT) { s.OnSetOnLeaseChanged(f) } -// FindMACbyIP implements the Interface for *MockInterface. -func (s *MockInterface) FindMACbyIP(ip net.IP) (mac net.HardwareAddr) { return s.OnFindMACbyIP(ip) } +// FindMACbyIP implements the [Interface] for *MockInterface. +func (s *MockInterface) FindMACbyIP(ip netip.Addr) (mac net.HardwareAddr) { + return s.OnFindMACbyIP(ip) +} // WriteDiskConfig implements the Interface for *MockInterface. func (s *MockInterface) WriteDiskConfig(c *ServerConfig) { s.OnWriteDiskConfig(c) } @@ -375,11 +382,13 @@ func (s *server) Leases(flags GetLeasesFlags) (leases []*Lease) { return append(s.srv4.GetLeases(flags), s.srv6.GetLeases(flags)...) } -// FindMACbyIP - find a MAC address by IP address in the currently active DHCP leases -func (s *server) FindMACbyIP(ip net.IP) net.HardwareAddr { - if ip.To4() != nil { +// FindMACbyIP returns a MAC address by the IP address of its lease, if there is +// one. +func (s *server) FindMACbyIP(ip netip.Addr) (mac net.HardwareAddr) { + if ip.Is4() { return s.srv4.FindMACbyIP(ip) } + return s.srv6.FindMACbyIP(ip) } diff --git a/internal/dhcpd/options_unix.go b/internal/dhcpd/options_unix.go index 082826d5..6881d942 100644 --- a/internal/dhcpd/options_unix.go +++ b/internal/dhcpd/options_unix.go @@ -263,15 +263,12 @@ func (s *v4Server) prepareOptions() { // IP-Layer Per Interface - // Since nearly all networks in the Internet currently support an MTU of - // 576 or greater, we strongly recommend the use of 576 for datagrams - // sent to non-local networks. + // Don't set the Interface MTU because client may choose the value on + // their own since it's listed in the [Host Requirements RFC]. It also + // seems the values listed there sometimes appear obsolete, see + // https://github.com/AdguardTeam/AdGuardHome/issues/5281. // - // See https://datatracker.ietf.org/doc/html/rfc1122#section-3.3.3. - dhcpv4.Option{ - Code: dhcpv4.OptionInterfaceMTU, - Value: dhcpv4.Uint16(576), - }, + // [Host Requirements RFC]: https://datatracker.ietf.org/doc/html/rfc1122#section-3.3.3. // Set the All Subnets Are Local Option to false since commonly the // connected hosts aren't expected to be multihomed. diff --git a/internal/dhcpd/v46_windows.go b/internal/dhcpd/v46_windows.go index 624ec767..dcdb3caf 100644 --- a/internal/dhcpd/v46_windows.go +++ b/internal/dhcpd/v46_windows.go @@ -4,23 +4,26 @@ package dhcpd // 'u-root/u-root' package, a dependency of 'insomniacslk/dhcp' package, doesn't build on Windows -import "net" +import ( + "net" + "net/netip" +) type winServer struct{} // type check var _ DHCPServer = winServer{} -func (winServer) ResetLeases(_ []*Lease) (err error) { return nil } -func (winServer) GetLeases(_ GetLeasesFlags) (leases []*Lease) { return nil } -func (winServer) getLeasesRef() []*Lease { return nil } -func (winServer) AddStaticLease(_ *Lease) (err error) { return nil } -func (winServer) RemoveStaticLease(_ *Lease) (err error) { return nil } -func (winServer) FindMACbyIP(_ net.IP) (mac net.HardwareAddr) { return nil } -func (winServer) WriteDiskConfig4(_ *V4ServerConf) {} -func (winServer) WriteDiskConfig6(_ *V6ServerConf) {} -func (winServer) Start() (err error) { return nil } -func (winServer) Stop() (err error) { return nil } +func (winServer) ResetLeases(_ []*Lease) (err error) { return nil } +func (winServer) GetLeases(_ GetLeasesFlags) (leases []*Lease) { return nil } +func (winServer) getLeasesRef() []*Lease { return nil } +func (winServer) AddStaticLease(_ *Lease) (err error) { return nil } +func (winServer) RemoveStaticLease(_ *Lease) (err error) { return nil } +func (winServer) FindMACbyIP(_ netip.Addr) (mac net.HardwareAddr) { return nil } +func (winServer) WriteDiskConfig4(_ *V4ServerConf) {} +func (winServer) WriteDiskConfig6(_ *V6ServerConf) {} +func (winServer) Start() (err error) { return nil } +func (winServer) Stop() (err error) { return nil } func v4Create(_ *V4ServerConf) (s DHCPServer, err error) { return winServer{}, nil } func v6Create(_ V6ServerConf) (s DHCPServer, err error) { return winServer{}, nil } diff --git a/internal/dhcpd/v4_unix.go b/internal/dhcpd/v4_unix.go index d83e0125..63ae46d9 100644 --- a/internal/dhcpd/v4_unix.go +++ b/internal/dhcpd/v4_unix.go @@ -108,7 +108,7 @@ func (s *v4Server) validHostnameForClient(cliHostname string, ip net.IP) (hostna hostname = aghnet.GenerateHostname(ip) } - err = netutil.ValidateDomainName(hostname) + err = netutil.ValidateHostname(hostname) if err != nil { log.Info("dhcpv4: %s", err) hostname = "" @@ -200,20 +200,20 @@ func (s *v4Server) GetLeases(flags GetLeasesFlags) (leases []*Lease) { return leases } -// FindMACbyIP - find a MAC address by IP address in the currently active DHCP leases -func (s *v4Server) FindMACbyIP(ip net.IP) net.HardwareAddr { +// FindMACbyIP implements the [Interface] for *v4Server. +func (s *v4Server) FindMACbyIP(ip netip.Addr) (mac net.HardwareAddr) { now := time.Now() s.leasesLock.Lock() defer s.leasesLock.Unlock() - ip4 := ip.To4() - if ip4 == nil { + if !ip.Is4() { return nil } + netIP := ip.AsSlice() for _, l := range s.leases { - if l.IP.Equal(ip4) { + if l.IP.Equal(netIP) { if l.Expiry.After(now) || l.IsStatic() { return l.HWAddr } @@ -372,7 +372,7 @@ func (s *v4Server) AddStaticLease(l *Lease) (err error) { return err } - err = netutil.ValidateDomainName(hostname) + err = netutil.ValidateHostname(hostname) if err != nil { return fmt.Errorf("validating hostname: %w", err) } diff --git a/internal/dhcpd/v4_unix_test.go b/internal/dhcpd/v4_unix_test.go index 411e36d9..8c1255e1 100644 --- a/internal/dhcpd/v4_unix_test.go +++ b/internal/dhcpd/v4_unix_test.go @@ -251,8 +251,8 @@ func TestV4Server_AddRemove_static(t *testing.T) { }, name: "bad_hostname", wantErrMsg: `dhcpv4: adding static lease: validating hostname: ` + - `bad domain name "bad-lbl-.local": ` + - `bad domain name label "bad-lbl-": bad domain name label rune '-'`, + `bad hostname "bad-lbl-.local": ` + + `bad hostname label "bad-lbl-": bad hostname label rune '-'`, }} for _, tc := range testCases { diff --git a/internal/dhcpd/v6_unix.go b/internal/dhcpd/v6_unix.go index 96512ddb..d69d47c2 100644 --- a/internal/dhcpd/v6_unix.go +++ b/internal/dhcpd/v6_unix.go @@ -6,6 +6,7 @@ import ( "bytes" "fmt" "net" + "net/netip" "sync" "time" @@ -107,21 +108,26 @@ func (s *v6Server) getLeasesRef() []*Lease { return s.leases } -// FindMACbyIP - find a MAC address by IP address in the currently active DHCP leases -func (s *v6Server) FindMACbyIP(ip net.IP) net.HardwareAddr { - now := time.Now().Unix() +// FindMACbyIP implements the [Interface] for *v6Server. +func (s *v6Server) FindMACbyIP(ip netip.Addr) (mac net.HardwareAddr) { + now := time.Now() s.leasesLock.Lock() defer s.leasesLock.Unlock() + if !ip.Is6() { + return nil + } + + netIP := ip.AsSlice() for _, l := range s.leases { - if l.IP.Equal(ip) { - unix := l.Expiry.Unix() - if unix > now || unix == leaseExpireStatic { + if l.IP.Equal(netIP) { + if l.Expiry.After(now) || l.IsStatic() { return l.HWAddr } } } + return nil } diff --git a/internal/dnsforward/access.go b/internal/dnsforward/access.go index 6d45a6d5..12f5f3c7 100644 --- a/internal/dnsforward/access.go +++ b/internal/dnsforward/access.go @@ -13,6 +13,7 @@ import ( "github.com/AdguardTeam/golibs/stringutil" "github.com/AdguardTeam/urlfilter" "github.com/AdguardTeam/urlfilter/filterlist" + "github.com/AdguardTeam/urlfilter/rules" ) // unit is a convenient alias for struct{} @@ -127,8 +128,12 @@ func (a *accessManager) isBlockedClientID(id string) (ok bool) { } // isBlockedHost returns true if host should be blocked. -func (a *accessManager) isBlockedHost(host string) (ok bool) { - _, ok = a.blockedHostsEng.Match(strings.ToLower(host)) +func (a *accessManager) isBlockedHost(host string, qt rules.RRType) (ok bool) { + _, ok = a.blockedHostsEng.MatchRequest(&urlfilter.DNSRequest{ + Hostname: host, + ClientIP: "0.0.0.0", + DNSType: qt, + }) return ok } diff --git a/internal/dnsforward/access_test.go b/internal/dnsforward/access_test.go index 7889cdad..d5d7da26 100644 --- a/internal/dnsforward/access_test.go +++ b/internal/dnsforward/access_test.go @@ -4,6 +4,8 @@ import ( "net/netip" "testing" + "github.com/AdguardTeam/urlfilter/rules" + "github.com/miekg/dns" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -28,54 +30,75 @@ func TestIsBlockedHost(t *testing.T) { "host1", "*.host.com", "||host3.com^", + "||*^$dnstype=HTTPS", }) require.NoError(t, err) testCases := []struct { + want assert.BoolAssertionFunc name string host string - want bool + qt rules.RRType }{{ + want: assert.True, name: "plain_match", host: "host1", - want: true, + qt: dns.TypeA, }, { + want: assert.False, name: "plain_mismatch", host: "host2", - want: false, + qt: dns.TypeA, }, { + want: assert.True, name: "subdomain_match_short", host: "asdf.host.com", - want: true, + qt: dns.TypeA, }, { + want: assert.True, name: "subdomain_match_long", host: "qwer.asdf.host.com", - want: true, + qt: dns.TypeA, }, { + want: assert.False, name: "subdomain_mismatch_no_lead", host: "host.com", - want: false, + qt: dns.TypeA, }, { + want: assert.False, name: "subdomain_mismatch_bad_asterisk", host: "asdf.zhost.com", - want: false, + qt: dns.TypeA, }, { + want: assert.True, name: "rule_match_simple", host: "host3.com", - want: true, + qt: dns.TypeA, }, { + want: assert.True, name: "rule_match_complex", host: "asdf.host3.com", - want: true, + qt: dns.TypeA, }, { + want: assert.False, name: "rule_mismatch", host: ".host3.com", - want: false, + qt: dns.TypeA, + }, { + want: assert.True, + name: "by_qtype", + host: "site-with-https-record.example", + qt: dns.TypeHTTPS, + }, { + want: assert.False, + name: "by_qtype_other", + host: "site-with-https-record.example", + qt: dns.TypeA, }} for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - assert.Equal(t, tc.want, a.isBlockedHost(tc.host)) + tc.want(t, a.isBlockedHost(tc.host, tc.qt)) }) } } @@ -93,29 +116,29 @@ func TestIsBlockedIP(t *testing.T) { require.NoError(t, err) testCases := []struct { + ip netip.Addr name string wantRule string - ip netip.Addr wantBlocked bool }{{ + ip: netip.MustParseAddr("1.2.3.4"), name: "match_ip", wantRule: "1.2.3.4", - ip: netip.MustParseAddr("1.2.3.4"), wantBlocked: true, }, { + ip: netip.MustParseAddr("5.6.7.100"), name: "match_cidr", wantRule: "5.6.7.8/24", - ip: netip.MustParseAddr("5.6.7.100"), wantBlocked: true, }, { + ip: netip.MustParseAddr("9.2.3.4"), name: "no_match_ip", wantRule: "", - ip: netip.MustParseAddr("9.2.3.4"), wantBlocked: false, }, { + ip: netip.MustParseAddr("9.6.7.100"), name: "no_match_cidr", wantRule: "", - ip: netip.MustParseAddr("9.6.7.100"), wantBlocked: false, }} diff --git a/internal/dnsforward/clientid.go b/internal/dnsforward/clientid.go index b48d4a4c..a7f2902a 100644 --- a/internal/dnsforward/clientid.go +++ b/internal/dnsforward/clientid.go @@ -14,7 +14,7 @@ import ( // ValidateClientID returns an error if id is not a valid ClientID. func ValidateClientID(id string) (err error) { - err = netutil.ValidateDomainNameLabel(id) + err = netutil.ValidateHostnameLabel(id) if err != nil { // Replace the domain name label wrapper with our own. return fmt.Errorf("invalid clientid %q: %w", id, errors.Unwrap(err)) diff --git a/internal/dnsforward/clientid_test.go b/internal/dnsforward/clientid_test.go index 458b66d3..5391ddc0 100644 --- a/internal/dnsforward/clientid_test.go +++ b/internal/dnsforward/clientid_test.go @@ -119,7 +119,7 @@ func TestServer_clientIDFromDNSContext(t *testing.T) { cliSrvName: "!!!.example.com", wantClientID: "", wantErrMsg: `clientid check: invalid clientid "!!!": ` + - `bad domain name label rune '!'`, + `bad hostname label rune '!'`, inclHTTPTLS: false, strictSNI: true, }, { @@ -131,7 +131,7 @@ func TestServer_clientIDFromDNSContext(t *testing.T) { wantClientID: "", wantErrMsg: `clientid check: invalid clientid "abcdefghijklmno` + `pqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789": ` + - `domain name label is too long: got 72, max 63`, + `hostname label is too long: got 72, max 63`, inclHTTPTLS: false, strictSNI: true, }, { @@ -330,7 +330,7 @@ func TestClientIDFromDNSContextHTTPS(t *testing.T) { path: "/dns-query/!!!", cliSrvName: "example.com", wantClientID: "", - wantErrMsg: `clientid check: invalid clientid "!!!": bad domain name label rune '!'`, + wantErrMsg: `clientid check: invalid clientid "!!!": bad hostname label rune '!'`, }, { name: "both_ids", path: "/dns-query/right", diff --git a/internal/dnsforward/config.go b/internal/dnsforward/config.go index b48eb776..f18e7513 100644 --- a/internal/dnsforward/config.go +++ b/internal/dnsforward/config.go @@ -7,7 +7,6 @@ import ( "net" "net/netip" "os" - "sort" "strings" "time" @@ -23,6 +22,7 @@ import ( "github.com/AdguardTeam/golibs/stringutil" "github.com/AdguardTeam/golibs/timeutil" "github.com/ameshkov/dnscrypt/v2" + "golang.org/x/exp/slices" ) // BlockingMode is an enum of all allowed blocking modes. @@ -53,7 +53,6 @@ const ( // The zero FilteringConfig is empty and ready for use. type FilteringConfig struct { // Callbacks for other modules - // -- // FilterHandler is an optional additional filtering callback. FilterHandler func(clientAddr net.IP, clientID string, settings *filtering.Settings) `yaml:"-"` @@ -64,50 +63,82 @@ type FilteringConfig struct { GetCustomUpstreamByClient func(id string) (conf *proxy.UpstreamConfig, err error) `yaml:"-"` // Protection configuration - // -- - ProtectionEnabled bool `yaml:"protection_enabled"` // whether or not use any of filtering features - BlockingMode BlockingMode `yaml:"blocking_mode"` // mode how to answer filtered requests - BlockingIPv4 net.IP `yaml:"blocking_ipv4"` // IP address to be returned for a blocked A request - BlockingIPv6 net.IP `yaml:"blocking_ipv6"` // IP address to be returned for a blocked AAAA request - BlockedResponseTTL uint32 `yaml:"blocked_response_ttl"` // if 0, then default is used (3600) + // ProtectionEnabled defines whether or not use any of filtering features. + ProtectionEnabled bool `yaml:"protection_enabled"` - // IP (or domain name) which is used to respond to DNS requests blocked by parental control or safe-browsing - ParentalBlockHost string `yaml:"parental_block_host"` + // BlockingMode defines the way how blocked responses are constructed. + BlockingMode BlockingMode `yaml:"blocking_mode"` + + // BlockingIPv4 is the IP address to be returned for a blocked A request. + BlockingIPv4 net.IP `yaml:"blocking_ipv4"` + + // BlockingIPv6 is the IP address to be returned for a blocked AAAA + // request. + BlockingIPv6 net.IP `yaml:"blocking_ipv6"` + + // BlockedResponseTTL is the time-to-live value for blocked responses. If + // 0, then default value is used (3600). + BlockedResponseTTL uint32 `yaml:"blocked_response_ttl"` + + // ParentalBlockHost is the IP (or domain name) which is used to respond to + // DNS requests blocked by parental control. + ParentalBlockHost string `yaml:"parental_block_host"` + + // SafeBrowsingBlockHost is the IP (or domain name) which is used to + // respond to DNS requests blocked by safe-browsing. SafeBrowsingBlockHost string `yaml:"safebrowsing_block_host"` // Anti-DNS amplification - // -- - Ratelimit uint32 `yaml:"ratelimit"` // max number of requests per second from a given IP (0 to disable) - RatelimitWhitelist []string `yaml:"ratelimit_whitelist"` // a list of whitelisted client IP addresses - RefuseAny bool `yaml:"refuse_any"` // if true, refuse ANY requests + // Ratelimit is the maximum number of requests per second from a given IP + // (0 to disable). + Ratelimit uint32 `yaml:"ratelimit"` + + // RatelimitWhitelist is the list of whitelisted client IP addresses. + RatelimitWhitelist []string `yaml:"ratelimit_whitelist"` + + // RefuseAny, if true, refuse ANY requests. + RefuseAny bool `yaml:"refuse_any"` // Upstream DNS servers configuration - // -- - UpstreamDNS []string `yaml:"upstream_dns"` - UpstreamDNSFileName string `yaml:"upstream_dns_file"` - BootstrapDNS []string `yaml:"bootstrap_dns"` // a list of bootstrap DNS for DoH and DoT (plain DNS only) - AllServers bool `yaml:"all_servers"` // if true, parallel queries to all configured upstream servers are enabled - FastestAddr bool `yaml:"fastest_addr"` // use Fastest Address algorithm + // UpstreamDNS is the list of upstream DNS servers. + UpstreamDNS []string `yaml:"upstream_dns"` + + // UpstreamDNSFileName, if set, points to the file which contains upstream + // DNS servers. + UpstreamDNSFileName string `yaml:"upstream_dns_file"` + + // BootstrapDNS is the list of bootstrap DNS servers for DoH and DoT + // resolvers (plain DNS only). + BootstrapDNS []string `yaml:"bootstrap_dns"` + + // AllServers, if true, parallel queries to all configured upstream servers + // are enabled. + AllServers bool `yaml:"all_servers"` + + // FastestAddr, if true, use Fastest Address algorithm. + FastestAddr bool `yaml:"fastest_addr"` + // FastestTimeout replaces the default timeout for dialing IP addresses // when FastestAddr is true. FastestTimeout timeutil.Duration `yaml:"fastest_timeout"` // Access settings - // -- - // AllowedClients is the slice of IP addresses, CIDR networks, and ClientIDs - // of allowed clients. If not empty, only these clients are allowed, and - // [FilteringConfig.DisallowedClients] are ignored. + // AllowedClients is the slice of IP addresses, CIDR networks, and + // ClientIDs of allowed clients. If not empty, only these clients are + // allowed, and [FilteringConfig.DisallowedClients] are ignored. AllowedClients []string `yaml:"allowed_clients"` // DisallowedClients is the slice of IP addresses, CIDR networks, and // ClientIDs of disallowed clients. DisallowedClients []string `yaml:"disallowed_clients"` - BlockedHosts []string `yaml:"blocked_hosts"` // hosts that should be blocked + // BlockedHosts is the list of hosts that should be blocked. + BlockedHosts []string `yaml:"blocked_hosts"` + // TrustedProxies is the list of IP addresses and CIDR networks to detect // proxy servers addresses the DoH requests from which should be handled. // The value of nil or an empty slice for this field makes Proxy not trust @@ -115,26 +146,46 @@ type FilteringConfig struct { TrustedProxies []string `yaml:"trusted_proxies"` // DNS cache settings - // -- - CacheSize uint32 `yaml:"cache_size"` // DNS cache size (in bytes) - CacheMinTTL uint32 `yaml:"cache_ttl_min"` // override TTL value (minimum) received from upstream server - CacheMaxTTL uint32 `yaml:"cache_ttl_max"` // override TTL value (maximum) received from upstream server + // CacheSize is the DNS cache size (in bytes). + CacheSize uint32 `yaml:"cache_size"` + + // CacheMinTTL is the override TTL value (minimum) received from upstream + // server. + CacheMinTTL uint32 `yaml:"cache_ttl_min"` + + // CacheMaxTTL is the override TTL value (maximum) received from upstream + // server. + CacheMaxTTL uint32 `yaml:"cache_ttl_max"` + // CacheOptimistic defines if optimistic cache mechanism should be used. CacheOptimistic bool `yaml:"cache_optimistic"` // Other settings - // -- - BogusNXDomain []string `yaml:"bogus_nxdomain"` // transform responses with these IP addresses to NXDOMAIN - AAAADisabled bool `yaml:"aaaa_disabled"` // Respond with an empty answer to all AAAA requests - EnableDNSSEC bool `yaml:"enable_dnssec"` // Set AD flag in outcoming DNS request - EnableEDNSClientSubnet bool `yaml:"edns_client_subnet"` // Enable EDNS Client Subnet option - MaxGoroutines uint32 `yaml:"max_goroutines"` // Max. number of parallel goroutines for processing incoming requests - HandleDDR bool `yaml:"handle_ddr"` // Handle DDR requests + // BogusNXDomain is the list of IP addresses, responses with them will be + // transformed to NXDOMAIN. + BogusNXDomain []string `yaml:"bogus_nxdomain"` - // IpsetList is the ipset configuration that allows AdGuard Home to add - // IP addresses of the specified domain names to an ipset list. Syntax: + // AAAADisabled, if true, respond with an empty answer to all AAAA + // requests. + AAAADisabled bool `yaml:"aaaa_disabled"` + + // EnableDNSSEC, if true, set AD flag in outcoming DNS request. + EnableDNSSEC bool `yaml:"enable_dnssec"` + + // EDNSClientSubnet is the settings list for EDNS Client Subnet. + EDNSClientSubnet *EDNSClientSubnet `yaml:"edns_client_subnet"` + + // MaxGoroutines is the max number of parallel goroutines for processing + // incoming requests. + MaxGoroutines uint32 `yaml:"max_goroutines"` + + // HandleDDR, if true, handle DDR requests + HandleDDR bool `yaml:"handle_ddr"` + + // IpsetList is the ipset configuration that allows AdGuard Home to add IP + // addresses of the specified domain names to an ipset list. Syntax: // // DOMAIN[,DOMAIN].../IPSET_NAME // @@ -146,6 +197,18 @@ type FilteringConfig struct { IpsetListFileName string `yaml:"ipset_file"` } +// EDNSClientSubnet is the settings list for EDNS Client Subnet. +type EDNSClientSubnet struct { + // CustomIP for EDNS Client Subnet. + CustomIP string `yaml:"custom_ip"` + + // Enabled defines if EDNS Client Subnet is enabled. + Enabled bool `yaml:"enabled"` + + // UseCustom defines if CustomIP should be used. + UseCustom bool `yaml:"use_custom"` +} + // TLSConfig is the TLS configuration for HTTPS, DNS-over-HTTPS, and DNS-over-TLS type TLSConfig struct { cert tls.Certificate @@ -270,12 +333,24 @@ func (s *Server) createProxyConfig() (conf proxy.Config, err error) { UpstreamConfig: srvConf.UpstreamConfig, BeforeRequestHandler: s.beforeRequestHandler, RequestHandler: s.handleDNSRequest, - EnableEDNSClientSubnet: srvConf.EnableEDNSClientSubnet, + EnableEDNSClientSubnet: srvConf.EDNSClientSubnet.Enabled, MaxGoroutines: int(srvConf.MaxGoroutines), UseDNS64: srvConf.UseDNS64, DNS64Prefs: srvConf.DNS64Prefixes, } + if srvConf.EDNSClientSubnet.UseCustom { + // TODO(s.chzhen): Add wrapper around netip.Addr. + var ip net.IP + ip, err = netutil.ParseIP(srvConf.EDNSClientSubnet.CustomIP) + if err != nil { + return conf, fmt.Errorf("edns: %w", err) + } + + // TODO(s.chzhen): Use netip.Addr instead of net.IP inside dnsproxy. + conf.EDNSAddr = ip + } + if srvConf.CacheSize != 0 { conf.CacheEnabled = true conf.CacheSizeBytes = int(srvConf.CacheSize) @@ -510,7 +585,7 @@ func (s *Server) prepareTLS(proxyConfig *proxy.Config) (err error) { if len(cert.DNSNames) != 0 { s.conf.dnsNames = cert.DNSNames log.Debug("dnsforward: using certificate's SAN as DNS names: %v", cert.DNSNames) - sort.Strings(s.conf.dnsNames) + slices.Sort(s.conf.dnsNames) } else { s.conf.dnsNames = append(s.conf.dnsNames, cert.Subject.CommonName) log.Debug("dnsforward: using certificate's CN as DNS name: %s", cert.Subject.CommonName) @@ -526,16 +601,6 @@ func (s *Server) prepareTLS(proxyConfig *proxy.Config) (err error) { return nil } -// isInSorted returns true if s is in the sorted slice strs. -func isInSorted(strs []string, s string) (ok bool) { - i := sort.SearchStrings(strs, s) - if i == len(strs) || strs[i] != s { - return false - } - - return true -} - // isWildcard returns true if host is a wildcard hostname. func isWildcard(host string) (ok bool) { return len(host) >= 2 && host[0] == '*' && host[1] == '.' @@ -550,11 +615,12 @@ func matchesDomainWildcard(host, pat string) (ok bool) { // anyNameMatches returns true if sni, the client's SNI value, matches any of // the DNS names and patterns from certificate. dnsNames must be sorted. func anyNameMatches(dnsNames []string, sni string) (ok bool) { - if netutil.ValidateDomainName(sni) != nil { + // Check sni is either a valid hostname or a valid IP address. + if netutil.ValidateHostname(sni) != nil && net.ParseIP(sni) == nil { return false } - if isInSorted(dnsNames, sni) { + if _, ok = slices.BinarySearch(dnsNames, sni); ok { return true } diff --git a/internal/dnsforward/config_test.go b/internal/dnsforward/config_test.go index f98e2c22..a13a567b 100644 --- a/internal/dnsforward/config_test.go +++ b/internal/dnsforward/config_test.go @@ -1,15 +1,15 @@ package dnsforward import ( - "sort" "testing" "github.com/stretchr/testify/assert" + "golang.org/x/exp/slices" ) func TestAnyNameMatches(t *testing.T) { dnsNames := []string{"host1", "*.host2", "1.2.3.4"} - sort.Strings(dnsNames) + slices.Sort(dnsNames) testCases := []struct { name string @@ -31,6 +31,10 @@ func TestAnyNameMatches(t *testing.T) { name: "match", dnsName: "1.2.3.4", want: true, + }, { + name: "mismatch_bad_ip", + dnsName: "1.2.3.256", + want: false, }, { name: "mismatch", dnsName: "host2", diff --git a/internal/dnsforward/dns.go b/internal/dnsforward/dns.go index 8d924f3b..9289eb45 100644 --- a/internal/dnsforward/dns.go +++ b/internal/dnsforward/dns.go @@ -230,7 +230,7 @@ func (s *Server) onDHCPLeaseChanged(flags int) { for _, l := range ll { // TODO(a.garipov): Remove this after we're finished with the client // hostname validations in the DHCP server code. - err := netutil.ValidateDomainName(l.Hostname) + err := netutil.ValidateHostname(l.Hostname) if err != nil { log.Debug("dnsforward: skipping invalid hostname %q from dhcp: %s", l.Hostname, err) @@ -468,7 +468,7 @@ func (s *Server) processRestrictLocal(dctx *dnsContext) (rc resultCode) { return resultCodeError } - log.Debug("dnsforward: request is for a service domain") + log.Debug("dnsforward: request is not for arpa domain") return resultCodeSuccess } diff --git a/internal/dnsforward/dns64_test.go b/internal/dnsforward/dns64_test.go index f3679b51..85a07fc1 100644 --- a/internal/dnsforward/dns64_test.go +++ b/internal/dnsforward/dns64_test.go @@ -273,18 +273,25 @@ func TestServer_HandleDNSRequest_dns64(t *testing.T) { return resp, nil }) - s := createTestServer(t, &filtering.Config{}, ServerConfig{ - UDPListenAddrs: []*net.UDPAddr{{}}, - TCPListenAddrs: []*net.TCPAddr{{}}, - UseDNS64: true, - }, localUps) - client := &dns.Client{ Net: "tcp", Timeout: 1 * time.Second, } for _, tc := range testCases { + // TODO(e.burkov): It seems [proxy.Proxy] isn't intended to be reused + // right after stop, due to a data race in [proxy.Proxy.Init] method + // when setting an OOB size. As a temporary workaround, recreate the + // whole server for each test case. + s := createTestServer(t, &filtering.Config{}, ServerConfig{ + UDPListenAddrs: []*net.UDPAddr{{}}, + TCPListenAddrs: []*net.TCPAddr{{}}, + UseDNS64: true, + FilteringConfig: FilteringConfig{ + EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, + }, + }, localUps) + t.Run(tc.name, func(t *testing.T) { s.conf.UpstreamConfig.Upstreams = []upstream.Upstream{newUps(tc.upsAns)} startDeferStop(t, s) diff --git a/internal/dnsforward/dns_test.go b/internal/dnsforward/dns_test.go index d07c30dc..02f1eb61 100644 --- a/internal/dnsforward/dns_test.go +++ b/internal/dnsforward/dns_test.go @@ -467,6 +467,11 @@ func TestServer_ProcessRestrictLocal(t *testing.T) { s := createTestServer(t, &filtering.Config{}, ServerConfig{ UDPListenAddrs: []*net.UDPAddr{{}}, TCPListenAddrs: []*net.TCPAddr{{}}, + // TODO(s.chzhen): Add tests where EDNSClientSubnet.Enabled is true. + // Improve FilteringConfig declaration for tests. + FilteringConfig: FilteringConfig{ + EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, + }, }, ups) s.conf.UpstreamConfig.Upstreams = []upstream.Upstream{ups} startDeferStop(t, s) @@ -539,6 +544,9 @@ func TestServer_ProcessLocalPTR_usingResolvers(t *testing.T) { ServerConfig{ UDPListenAddrs: []*net.UDPAddr{{}}, TCPListenAddrs: []*net.TCPAddr{{}}, + FilteringConfig: FilteringConfig{ + EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, + }, }, aghtest.NewUpstreamMock(func(req *dns.Msg) (resp *dns.Msg, err error) { return aghalg.Coalesce( diff --git a/internal/dnsforward/dnsforward_test.go b/internal/dnsforward/dnsforward_test.go index a95b03df..d0a0ada7 100644 --- a/internal/dnsforward/dnsforward_test.go +++ b/internal/dnsforward/dnsforward_test.go @@ -11,6 +11,7 @@ import ( "fmt" "math/big" "net" + "net/netip" "sync" "sync/atomic" "testing" @@ -155,6 +156,9 @@ func createTestTLS(t *testing.T, tlsConf TLSConfig) (s *Server, certPem []byte) s = createTestServer(t, &filtering.Config{}, ServerConfig{ UDPListenAddrs: []*net.UDPAddr{{}}, TCPListenAddrs: []*net.TCPAddr{{}}, + FilteringConfig: FilteringConfig{ + EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, + }, }, nil) tlsConf.CertificateChainData, tlsConf.PrivateKeyData = certPem, keyPem @@ -266,6 +270,9 @@ func TestServer(t *testing.T) { s := createTestServer(t, &filtering.Config{}, ServerConfig{ UDPListenAddrs: []*net.UDPAddr{{}}, TCPListenAddrs: []*net.TCPAddr{{}}, + FilteringConfig: FilteringConfig{ + EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, + }, }, nil) s.conf.UpstreamConfig.Upstreams = []upstream.Upstream{newGoogleUpstream()} startDeferStop(t, s) @@ -304,7 +311,8 @@ func TestServer_timeout(t *testing.T) { srvConf := &ServerConfig{ UpstreamTimeout: timeout, FilteringConfig: FilteringConfig{ - BlockingMode: BlockingModeDefault, + BlockingMode: BlockingModeDefault, + EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, } @@ -322,6 +330,9 @@ func TestServer_timeout(t *testing.T) { require.NoError(t, err) s.conf.FilteringConfig.BlockingMode = BlockingModeDefault + s.conf.FilteringConfig.EDNSClientSubnet = &EDNSClientSubnet{ + Enabled: false, + } err = s.Prepare(&s.conf) require.NoError(t, err) @@ -333,6 +344,9 @@ func TestServerWithProtectionDisabled(t *testing.T) { s := createTestServer(t, &filtering.Config{}, ServerConfig{ UDPListenAddrs: []*net.UDPAddr{{}}, TCPListenAddrs: []*net.TCPAddr{{}}, + FilteringConfig: FilteringConfig{ + EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, + }, }, nil) s.conf.UpstreamConfig.Upstreams = []upstream.Upstream{newGoogleUpstream()} startDeferStop(t, s) @@ -437,6 +451,9 @@ func TestSafeSearch(t *testing.T) { TCPListenAddrs: []*net.TCPAddr{{}}, FilteringConfig: FilteringConfig{ ProtectionEnabled: true, + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, }, } s := createTestServer(t, filterConf, forwardConf, nil) @@ -492,6 +509,11 @@ func TestInvalidRequest(t *testing.T) { s := createTestServer(t, &filtering.Config{}, ServerConfig{ UDPListenAddrs: []*net.UDPAddr{{}}, TCPListenAddrs: []*net.TCPAddr{{}}, + FilteringConfig: FilteringConfig{ + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, + }, }, nil) startDeferStop(t, s) @@ -518,6 +540,9 @@ func TestBlockedRequest(t *testing.T) { FilteringConfig: FilteringConfig{ ProtectionEnabled: true, BlockingMode: BlockingModeDefault, + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, }, } s := createTestServer(t, &filtering.Config{}, forwardConf, nil) @@ -543,6 +568,9 @@ func TestServerCustomClientUpstream(t *testing.T) { TCPListenAddrs: []*net.TCPAddr{{}}, FilteringConfig: FilteringConfig{ ProtectionEnabled: true, + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, }, } s := createTestServer(t, &filtering.Config{}, forwardConf, nil) @@ -591,6 +619,11 @@ func TestBlockCNAMEProtectionEnabled(t *testing.T) { s := createTestServer(t, &filtering.Config{}, ServerConfig{ UDPListenAddrs: []*net.UDPAddr{{}}, TCPListenAddrs: []*net.TCPAddr{{}}, + FilteringConfig: FilteringConfig{ + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, + }, }, nil) testUpstm := &aghtest.Upstream{ CName: testCNAMEs, @@ -621,6 +654,9 @@ func TestBlockCNAME(t *testing.T) { FilteringConfig: FilteringConfig{ ProtectionEnabled: true, BlockingMode: BlockingModeDefault, + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, }, } s := createTestServer(t, &filtering.Config{}, forwardConf, nil) @@ -690,6 +726,9 @@ func TestClientRulesForCNAMEMatching(t *testing.T) { FilterHandler: func(_ net.IP, _ string, settings *filtering.Settings) { settings.FilteringEnabled = false }, + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, }, } s := createTestServer(t, &filtering.Config{}, forwardConf, nil) @@ -731,6 +770,9 @@ func TestNullBlockedRequest(t *testing.T) { FilteringConfig: FilteringConfig{ ProtectionEnabled: true, BlockingMode: BlockingModeNullIP, + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, }, } s := createTestServer(t, &filtering.Config{}, forwardConf, nil) @@ -783,6 +825,9 @@ func TestBlockedCustomIP(t *testing.T) { BlockingMode: BlockingModeCustomIP, BlockingIPv4: nil, UpstreamDNS: []string{"8.8.8.8:53", "8.8.4.4:53"}, + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, }, } @@ -831,6 +876,9 @@ func TestBlockedByHosts(t *testing.T) { FilteringConfig: FilteringConfig{ ProtectionEnabled: true, BlockingMode: BlockingModeDefault, + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, }, } @@ -864,6 +912,9 @@ func TestBlockedBySafeBrowsing(t *testing.T) { FilteringConfig: FilteringConfig{ SafeBrowsingBlockHost: ans4.String(), ProtectionEnabled: true, + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, }, } s := createTestServer(t, filterConf, forwardConf, nil) @@ -918,6 +969,9 @@ func TestRewrite(t *testing.T) { ProtectionEnabled: true, BlockingMode: BlockingModeDefault, UpstreamDNS: []string{"8.8.8.8:53"}, + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, }, })) @@ -1009,7 +1063,7 @@ var testDHCP = &dhcpd.MockInterface{ }} }, OnSetOnLeaseChanged: func(olct dhcpd.OnLeaseChangedT) {}, - OnFindMACbyIP: func(ip net.IP) (mac net.HardwareAddr) { panic("not implemented") }, + OnFindMACbyIP: func(ip netip.Addr) (mac net.HardwareAddr) { panic("not implemented") }, OnWriteDiskConfig: func(c *dhcpd.ServerConfig) { panic("not implemented") }, } @@ -1032,6 +1086,7 @@ func TestPTRResponseFromDHCPLeases(t *testing.T) { s.conf.UpstreamDNS = []string{"127.0.0.1:53"} s.conf.FilteringConfig.ProtectionEnabled = true s.conf.FilteringConfig.BlockingMode = BlockingModeDefault + s.conf.FilteringConfig.EDNSClientSubnet = &EDNSClientSubnet{Enabled: false} err = s.Prepare(&s.conf) require.NoError(t, err) @@ -1107,6 +1162,7 @@ func TestPTRResponseFromHosts(t *testing.T) { s.conf.TCPListenAddrs = []*net.TCPAddr{{}} s.conf.UpstreamDNS = []string{"127.0.0.1:53"} s.conf.FilteringConfig.BlockingMode = BlockingModeDefault + s.conf.FilteringConfig.EDNSClientSubnet = &EDNSClientSubnet{Enabled: false} err = s.Prepare(&s.conf) require.NoError(t, err) @@ -1171,7 +1227,8 @@ func TestNewServer(t *testing.T) { LocalDomain: "!!!", }, wantErrMsg: `local domain: bad domain name "!!!": ` + - `bad domain name label "!!!": bad domain name label rune '!'`, + `bad top-level domain name label "!!!": ` + + `bad top-level domain name label rune '!'`, }} for _, tc := range testCases { diff --git a/internal/dnsforward/filter.go b/internal/dnsforward/filter.go index f36fd52a..6ee4e0f3 100644 --- a/internal/dnsforward/filter.go +++ b/internal/dnsforward/filter.go @@ -31,9 +31,11 @@ func (s *Server) beforeRequestHandler( } if len(pctx.Req.Question) == 1 { - host := strings.TrimSuffix(pctx.Req.Question[0].Name, ".") - if s.access.isBlockedHost(host) { - log.Debug("host %s is in access blocklist", host) + q := pctx.Req.Question[0] + qt := q.Qtype + host := strings.TrimSuffix(q.Name, ".") + if s.access.isBlockedHost(host, qt) { + log.Debug("request %s %s is in access blocklist", dns.Type(qt), host) return s.preBlockedResponse(pctx) } diff --git a/internal/dnsforward/filter_test.go b/internal/dnsforward/filter_test.go index 7fa0985a..3fbe58cc 100644 --- a/internal/dnsforward/filter_test.go +++ b/internal/dnsforward/filter_test.go @@ -29,6 +29,9 @@ func TestHandleDNSRequest_filterDNSResponse(t *testing.T) { FilteringConfig: FilteringConfig{ ProtectionEnabled: true, BlockingMode: BlockingModeDefault, + EDNSClientSubnet: &EDNSClientSubnet{ + Enabled: false, + }, }, } filters := []filtering.Filter{{ diff --git a/internal/dnsforward/http.go b/internal/dnsforward/http.go index 18c4e82e..a876a411 100644 --- a/internal/dnsforward/http.go +++ b/internal/dnsforward/http.go @@ -57,7 +57,7 @@ func (s *Server) getDNSConfig() (c *jsonDNSConfig) { blockingIPv4 := s.conf.BlockingIPv4 blockingIPv6 := s.conf.BlockingIPv6 ratelimit := s.conf.Ratelimit - enableEDNSClientSubnet := s.conf.EnableEDNSClientSubnet + enableEDNSClientSubnet := s.conf.EDNSClientSubnet.Enabled enableDNSSEC := s.conf.EnableDNSSEC aaaaDisabled := s.conf.AAAADisabled cacheSize := s.conf.CacheSize @@ -280,7 +280,7 @@ func (s *Server) setConfigRestartable(dc *jsonDNSConfig) (shouldRestart bool) { setIfNotNil(&s.conf.LocalPTRResolvers, dc.LocalPTRUpstreams), setIfNotNil(&s.conf.UpstreamDNSFileName, dc.UpstreamsFile), setIfNotNil(&s.conf.BootstrapDNS, dc.Bootstraps), - setIfNotNil(&s.conf.EnableEDNSClientSubnet, dc.EDNSCSEnabled), + setIfNotNil(&s.conf.EDNSClientSubnet.Enabled, dc.EDNSCSEnabled), setIfNotNil(&s.conf.CacheSize, dc.CacheSize), setIfNotNil(&s.conf.CacheMinTTL, dc.CacheMinTTL), setIfNotNil(&s.conf.CacheMaxTTL, dc.CacheMaxTTL), diff --git a/internal/dnsforward/http_test.go b/internal/dnsforward/http_test.go index 5e0b8018..9d48151d 100644 --- a/internal/dnsforward/http_test.go +++ b/internal/dnsforward/http_test.go @@ -69,6 +69,7 @@ func TestDNSForwardHTTP_handleGetConfig(t *testing.T) { ProtectionEnabled: true, BlockingMode: BlockingModeDefault, UpstreamDNS: []string{"8.8.8.8:53", "8.8.4.4:53"}, + EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, ConfigModified: func() {}, } @@ -144,6 +145,7 @@ func TestDNSForwardHTTP_handleSetConfig(t *testing.T) { ProtectionEnabled: true, BlockingMode: BlockingModeDefault, UpstreamDNS: []string{"8.8.8.8:53", "8.8.4.4:53"}, + EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, }, ConfigModified: func() {}, } @@ -227,7 +229,10 @@ func TestDNSForwardHTTP_handleSetConfig(t *testing.T) { require.True(t, ok) t.Run(tc.name, func(t *testing.T) { - t.Cleanup(func() { s.conf = defaultConf }) + t.Cleanup(func() { + s.conf = defaultConf + s.conf.FilteringConfig.EDNSClientSubnet.Enabled = false + }) rBody := io.NopCloser(bytes.NewReader(caseData.Req)) var r *http.Request @@ -337,7 +342,8 @@ func TestValidateUpstreams(t *testing.T) { }, { name: "bad_domain", wantErr: `bad upstream for domain "[/!/]8.8.8.8": domain at index 0: ` + - `bad domain name "!": bad domain name label "!": bad domain name label rune '!'`, + `bad domain name "!": bad top-level domain name label "!": ` + + `bad top-level domain name label rune '!'`, set: []string{"[/!/]8.8.8.8"}, }} @@ -442,6 +448,9 @@ func TestServer_handleTestUpstreaDNS(t *testing.T) { UDPListenAddrs: []*net.UDPAddr{{}}, TCPListenAddrs: []*net.TCPAddr{{}}, UpstreamTimeout: upsTimeout, + FilteringConfig: FilteringConfig{ + EDNSClientSubnet: &EDNSClientSubnet{Enabled: false}, + }, }, nil) startDeferStop(t, srv) diff --git a/internal/filtering/blocked_test.go b/internal/filtering/blocked_test.go deleted file mode 100644 index 575f75cc..00000000 --- a/internal/filtering/blocked_test.go +++ /dev/null @@ -1,38 +0,0 @@ -//go:build ignore -// +build ignore - -package filtering - -import ( - "fmt" - "sort" - "testing" -) - -// This is a simple tool that takes a list of services and prints them to the output. -// It is supposed to be used to update: -// client/src/helpers/constants.js -// client/src/components/ui/Icons.js -// -// Usage: -// 1. go run ./internal/filtering/blocked_test.go -// 2. Use the output to replace `SERVICES` array in "client/src/helpers/constants.js". -// 3. You'll need to enter services names manually. -// 4. Don't forget to add missing icons to "client/src/components/ui/Icons.js". -// -// TODO(ameshkov): Rework generator: have a JSON file with all the metadata we need -// then use this JSON file to generate JS and Go code -func TestGenServicesArray(t *testing.T) { - services := make([]svc, len(serviceRulesArray)) - copy(services, serviceRulesArray) - - sort.Slice(services, func(i, j int) bool { - return services[i].name < services[j].name - }) - - fmt.Println("export const SERVICES = [") - for _, s := range services { - fmt.Printf(" {\n id: '%s',\n name: '%s',\n },\n", s.name, s.name) - } - fmt.Println("];") -} diff --git a/internal/filtering/filtering.go b/internal/filtering/filtering.go index 977691f9..c7c1d8ff 100644 --- a/internal/filtering/filtering.go +++ b/internal/filtering/filtering.go @@ -420,11 +420,11 @@ type ResultRule struct { // Result contains the result of a request check. // -// All fields transitively have omitempty tags so that the query log -// doesn't become too large. +// All fields transitively have omitempty tags so that the query log doesn't +// become too large. // -// TODO(a.garipov): Clarify relationships between fields. Perhaps -// replace with a sum type or an interface? +// TODO(a.garipov): Clarify relationships between fields. Perhaps replace with +// a sum type or an interface? type Result struct { // DNSRewriteResult is the $dnsrewrite filter rule result. DNSRewriteResult *DNSRewriteResult `json:",omitempty"` @@ -813,17 +813,18 @@ func (d *DNSFilter) matchHostProcessDNSResult( return res } - if dnsres.HostRulesV4 != nil || dnsres.HostRulesV6 != nil { - // Question type doesn't match the host rules. Return the first matched - // host rule, but without an IP address. - var matchedRules []rules.Rule - if dnsres.HostRulesV4 != nil { - matchedRules = []rules.Rule{dnsres.HostRulesV4[0]} - } else if dnsres.HostRulesV6 != nil { - matchedRules = []rules.Rule{dnsres.HostRulesV6[0]} - } + return hostResultForOtherQType(dnsres) +} - return makeResult(matchedRules, FilteredBlockList) +// hostResultForOtherQType returns a result based on the host rules in dnsres, +// if any. dnsres.HostRulesV4 take precedence over dnsres.HostRulesV6. +func hostResultForOtherQType(dnsres *urlfilter.DNSResult) (res Result) { + if len(dnsres.HostRulesV4) != 0 { + return makeResult([]rules.Rule{dnsres.HostRulesV4[0]}, FilteredBlockList) + } + + if len(dnsres.HostRulesV6) != 0 { + return makeResult([]rules.Rule{dnsres.HostRulesV6[0]}, FilteredBlockList) } return Result{} @@ -840,7 +841,7 @@ func (d *DNSFilter) matchHost( return Result{}, nil } - ureq := &urlfilter.DNSRequest{ + ufReq := &urlfilter.DNSRequest{ Hostname: host, SortedClientTags: setts.ClientTags, // TODO(e.burkov): Wait for urlfilter update to pass net.IP. @@ -857,7 +858,7 @@ func (d *DNSFilter) matchHost( defer d.engineLock.RUnlock() if setts.ProtectionEnabled && d.filteringEngineAllow != nil { - dnsres, ok := d.filteringEngineAllow.MatchRequest(ureq) + dnsres, ok := d.filteringEngineAllow.MatchRequest(ufReq) if ok { return d.matchHostProcessAllowList(host, dnsres) } @@ -867,17 +868,13 @@ func (d *DNSFilter) matchHost( return Result{}, nil } - dnsres, ok := d.filteringEngine.MatchRequest(ureq) + dnsres, matchedEngine := d.filteringEngine.MatchRequest(ufReq) + // Check DNS rewrites first, because the API there is a bit awkward. - if dnsr := dnsres.DNSRewrites(); len(dnsr) > 0 { - res = d.processDNSRewrites(dnsr) - if res.Reason == RewrittenRule && res.CanonName == host { - // A rewrite of a host to itself. Go on and try matching other - // things. - } else { - return res, nil - } - } else if !ok { + dnsRWRes := d.processDNSResultRewrites(dnsres, host) + if dnsRWRes.Reason != NotFilteredNotFound { + return dnsRWRes, nil + } else if !matchedEngine { return Result{}, nil } @@ -899,6 +896,26 @@ func (d *DNSFilter) matchHost( return res, nil } +// processDNSResultRewrites returns an empty Result if there are no dnsrewrite +// rules in dnsres. Otherwise, it returns the processed Result. +func (d *DNSFilter) processDNSResultRewrites( + dnsres *urlfilter.DNSResult, + host string, +) (dnsRWRes Result) { + dnsr := dnsres.DNSRewrites() + if len(dnsr) == 0 { + return Result{} + } + + res := d.processDNSRewrites(dnsr) + if res.Reason == RewrittenRule && res.CanonName == host { + // A rewrite of a host to itself. Go on and try matching other things. + return Result{} + } + + return res +} + // makeResult returns a properly constructed Result. func makeResult(matchedRules []rules.Rule, reason Reason) (res Result) { resRules := make([]*ResultRule, len(matchedRules)) diff --git a/internal/filtering/rewrites.go b/internal/filtering/rewrites.go index 873272a1..3e10da55 100644 --- a/internal/filtering/rewrites.go +++ b/internal/filtering/rewrites.go @@ -1,11 +1,8 @@ -// DNS Rewrites - package filtering import ( "fmt" "net" - "sort" "strings" "github.com/AdguardTeam/golibs/errors" @@ -14,6 +11,8 @@ import ( "golang.org/x/exp/slices" ) +// Legacy DNS rewrites + // LegacyRewrite is a single legacy DNS rewrite record. // // Instances of *LegacyRewrite must never be nil. @@ -123,38 +122,24 @@ func matchDomainWildcard(host, wildcard string) (ok bool) { return isWildcard(wildcard) && strings.HasSuffix(host, wildcard[1:]) } -// rewritesSorted is a slice of legacy rewrites for sorting. +// legacyRewriteSortsBefore sorts rewirtes according to the following priority: // -// The sorting priority: -// -// 1. A and AAAA > CNAME -// 2. wildcard > exact -// 3. lower level wildcard > higher level wildcard -// -// TODO(a.garipov): Replace with slices.Sort. -type rewritesSorted []*LegacyRewrite - -// Len implements the sort.Interface interface for rewritesSorted. -func (a rewritesSorted) Len() (l int) { return len(a) } - -// Swap implements the sort.Interface interface for rewritesSorted. -func (a rewritesSorted) Swap(i, j int) { a[i], a[j] = a[j], a[i] } - -// Less implements the sort.Interface interface for rewritesSorted. -func (a rewritesSorted) Less(i, j int) (less bool) { - ith, jth := a[i], a[j] - if ith.Type == dns.TypeCNAME && jth.Type != dns.TypeCNAME { +// 1. A and AAAA > CNAME; +// 2. wildcard > exact; +// 3. lower level wildcard > higher level wildcard; +func legacyRewriteSortsBefore(a, b *LegacyRewrite) (sortsBefore bool) { + if a.Type == dns.TypeCNAME && b.Type != dns.TypeCNAME { return true - } else if ith.Type != dns.TypeCNAME && jth.Type == dns.TypeCNAME { + } else if a.Type != dns.TypeCNAME && b.Type == dns.TypeCNAME { return false } - if iw, jw := isWildcard(ith.Domain), isWildcard(jth.Domain); iw != jw { - return jw + if aIsWld, bIsWld := isWildcard(a.Domain), isWildcard(b.Domain); aIsWld != bIsWld { + return bIsWld } - // Both are either wildcards or not. - return len(ith.Domain) > len(jth.Domain) + // Both are either wildcards or both aren't. + return len(a.Domain) > len(b.Domain) } // prepareRewrites normalizes and validates all legacy DNS rewrites. @@ -196,7 +181,7 @@ func findRewrites( return nil, matched } - sort.Sort(rewritesSorted(rewrites)) + slices.SortFunc(rewrites, legacyRewriteSortsBefore) for i, r := range rewrites { if isWildcard(r.Domain) { diff --git a/internal/filtering/safebrowsing.go b/internal/filtering/safebrowsing.go index 2e648346..3fb814d7 100644 --- a/internal/filtering/safebrowsing.go +++ b/internal/filtering/safebrowsing.go @@ -8,7 +8,6 @@ import ( "fmt" "net" "net/http" - "sort" "strings" "sync" "time" @@ -19,6 +18,7 @@ import ( "github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/stringutil" "github.com/miekg/dns" + "golang.org/x/exp/slices" "golang.org/x/net/publicsuffix" ) @@ -241,8 +241,8 @@ func (c *sbCtx) processTXT(resp *dns.Msg) (bool, [][]byte) { } func (c *sbCtx) storeCache(hashes [][]byte) { - sort.Slice(hashes, func(a, b int) bool { - return bytes.Compare(hashes[a], hashes[b]) == -1 + slices.SortFunc(hashes, func(a, b []byte) (sortsBefore bool) { + return bytes.Compare(a, b) == -1 }) var curData []byte diff --git a/internal/filtering/safesearch.go b/internal/filtering/safesearch.go index f7661dd6..b3eea28e 100644 --- a/internal/filtering/safesearch.go +++ b/internal/filtering/safesearch.go @@ -13,8 +13,37 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/aghhttp" "github.com/AdguardTeam/golibs/cache" "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/urlfilter/rules" ) +// SafeSearch interface describes a service for search engines hosts rewrites. +type SafeSearch interface { + // SearchHost returns a replacement address for the search engine host. + SearchHost(host string, qtype uint16) (res *rules.DNSRewrite) + + // CheckHost checks host with safe search engine. + CheckHost(host string, qtype uint16) (res Result, err error) +} + +// SafeSearchConfig is a struct with safe search related settings. +type SafeSearchConfig struct { + // CustomResolver is the resolver used by safe search. + CustomResolver Resolver `yaml:"-"` + + // Enabled indicates if safe search is enabled entirely. + Enabled bool `yaml:"enabled" json:"enabled"` + + // Services flags. Each flag indicates if the corresponding service is + // enabled or disabled. + + Bing bool `yaml:"bing" json:"bing"` + DuckDuckGo bool `yaml:"duckduckgo" json:"duckduckgo"` + Google bool `yaml:"google" json:"google"` + Pixabay bool `yaml:"pixabay" json:"pixabay"` + Yandex bool `yaml:"yandex" json:"yandex"` + YouTube bool `yaml:"youtube" json:"youtube"` +} + /* expire byte[4] res Result diff --git a/internal/filtering/safesearch/rules.go b/internal/filtering/safesearch/rules.go new file mode 100644 index 00000000..75e512e8 --- /dev/null +++ b/internal/filtering/safesearch/rules.go @@ -0,0 +1,34 @@ +package safesearch + +import _ "embed" + +//go:embed rules/bing.txt +var bing string + +//go:embed rules/google.txt +var google string + +//go:embed rules/pixabay.txt +var pixabay string + +//go:embed rules/duckduckgo.txt +var duckduckgo string + +//go:embed rules/yandex.txt +var yandex string + +//go:embed rules/youtube.txt +var youtube string + +// safeSearchRules is a map with rules texts grouped by search providers. +// Source rules downloaded from: +// https://adguardteam.github.io/HostlistsRegistry/assets/engines_safe_search.txt, +// https://adguardteam.github.io/HostlistsRegistry/assets/youtube_safe_search.txt. +var safeSearchRules = map[Service]string{ + Bing: bing, + DuckDuckGo: duckduckgo, + Google: google, + Pixabay: pixabay, + Yandex: yandex, + YouTube: youtube, +} diff --git a/internal/filtering/safesearch/rules/bing.txt b/internal/filtering/safesearch/rules/bing.txt new file mode 100644 index 00000000..8c61b63c --- /dev/null +++ b/internal/filtering/safesearch/rules/bing.txt @@ -0,0 +1 @@ +|www.bing.com^$dnsrewrite=NOERROR;CNAME;strict.bing.com \ No newline at end of file diff --git a/internal/filtering/safesearch/rules/duckduckgo.txt b/internal/filtering/safesearch/rules/duckduckgo.txt new file mode 100644 index 00000000..084f1be0 --- /dev/null +++ b/internal/filtering/safesearch/rules/duckduckgo.txt @@ -0,0 +1,3 @@ +|duckduckgo.com^$dnsrewrite=NOERROR;CNAME;safe.duckduckgo.com +|start.duckduckgo.com^$dnsrewrite=NOERROR;CNAME;safe.duckduckgo.com +|www.duckduckgo.com^$dnsrewrite=NOERROR;CNAME;safe.duckduckgo.com \ No newline at end of file diff --git a/internal/filtering/safesearch/rules/google.txt b/internal/filtering/safesearch/rules/google.txt new file mode 100644 index 00000000..62f13067 --- /dev/null +++ b/internal/filtering/safesearch/rules/google.txt @@ -0,0 +1,191 @@ +|www.google.ad^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ae^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.al^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.am^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.as^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.at^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.az^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ba^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.be^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.bf^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.bg^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.bi^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.bj^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.bs^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.bt^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.by^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ca^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.cat^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.cd^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.cf^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.cg^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ch^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ci^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.cl^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.cm^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.cn^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.ao^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.bw^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.ck^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.cr^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.id^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.il^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.in^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.jp^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.ke^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.kr^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.ls^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.ma^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.mz^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.nz^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.th^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.tz^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.ug^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.uk^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.uz^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.ve^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.co.vi^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.af^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.ag^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.ai^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.ar^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.au^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.bd^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.bh^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.bn^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.bo^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.br^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.bz^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.co^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.cu^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.cy^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.do^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.ec^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.eg^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.et^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.fj^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.gh^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.gi^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.gt^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.hk^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.jm^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.kh^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.kw^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.lb^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.ly^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.mm^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.mt^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.mx^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.my^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.na^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.nf^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.ng^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.ni^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.np^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.om^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.pa^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.pe^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.pg^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.ph^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.pk^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.pr^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.py^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.qa^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.sa^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.sb^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.sg^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.sl^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.sv^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.tj^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.tr^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.tw^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.ua^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.uy^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.vc^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com.vn^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.com^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.cv^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.cz^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.de^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.dj^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.dk^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.dm^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.dz^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ee^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.es^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.fi^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.fm^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.fr^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ga^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ge^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.gg^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.gl^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.gm^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.gp^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.gr^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.gy^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.hn^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.hr^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ht^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.hu^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ie^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.im^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.iq^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.is^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.it^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.je^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.jo^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.kg^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ki^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.kz^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.la^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.li^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.lk^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.lt^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.lu^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.lv^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.md^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.me^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.mg^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.mk^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ml^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.mn^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ms^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.mu^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.mv^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.mw^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ne^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.nl^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.no^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.nr^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.nu^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.pl^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.pn^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ps^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.pt^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ro^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.rs^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ru^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.rw^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.sc^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.se^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.sh^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.si^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.sk^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.sm^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.sn^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.so^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.sr^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.st^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.td^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.tg^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.tk^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.tl^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.tm^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.tn^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.to^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.tt^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.vg^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.vu^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com +|www.google.ws^$dnsrewrite=NOERROR;CNAME;forcesafesearch.google.com \ No newline at end of file diff --git a/internal/filtering/safesearch/rules/pixabay.txt b/internal/filtering/safesearch/rules/pixabay.txt new file mode 100644 index 00000000..0ab07746 --- /dev/null +++ b/internal/filtering/safesearch/rules/pixabay.txt @@ -0,0 +1 @@ +|pixabay.com^$dnsrewrite=NOERROR;CNAME;safesearch.pixabay.com \ No newline at end of file diff --git a/internal/filtering/safesearch/rules/yandex.txt b/internal/filtering/safesearch/rules/yandex.txt new file mode 100644 index 00000000..b6f4afb7 --- /dev/null +++ b/internal/filtering/safesearch/rules/yandex.txt @@ -0,0 +1,52 @@ +|www.xn--d1acpjx3f.xn--p1ai^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.ya.ru^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.az^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.by^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.co.il^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.com.am^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.com.ge^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.com.ru^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.com.tr^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.com^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.de^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.ee^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.eu^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.fi^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.fr^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.kz^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.lt^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.lv^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.md^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.net^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.org^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.pl^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.ru^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.tj^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.tm^$dnsrewrite=NOERROR;A;213.180.193.56 +|www.yandex.uz^$dnsrewrite=NOERROR;A;213.180.193.56 +|xn--d1acpjx3f.xn--p1ai^$dnsrewrite=NOERROR;A;213.180.193.56 +|ya.ru^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.az^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.by^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.co.il^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.com.am^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.com.ge^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.com.ru^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.com.tr^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.com^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.de^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.ee^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.eu^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.fi^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.fr^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.kz^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.lt^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.lv^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.md^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.net^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.org^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.pl^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.ru^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.tj^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.tm^$dnsrewrite=NOERROR;A;213.180.193.56 +|yandex.uz^$dnsrewrite=NOERROR;A;213.180.193.56 \ No newline at end of file diff --git a/internal/filtering/safesearch/rules/youtube.txt b/internal/filtering/safesearch/rules/youtube.txt new file mode 100644 index 00000000..70e3ae46 --- /dev/null +++ b/internal/filtering/safesearch/rules/youtube.txt @@ -0,0 +1,5 @@ +|www.youtube.com^$dnsrewrite=NOERROR;CNAME;restrictmoderate.youtube.com +|m.youtube.com^$dnsrewrite=NOERROR;CNAME;restrictmoderate.youtube.com +|youtubei.googleapis.com^$dnsrewrite=NOERROR;CNAME;restrictmoderate.youtube.com +|youtube.googleapis.com^$dnsrewrite=NOERROR;CNAME;restrictmoderate.youtube.com +|www.youtube-nocookie.com^$dnsrewrite=NOERROR;CNAME;restrictmoderate.youtube.com \ No newline at end of file diff --git a/internal/filtering/safesearch/safesearch.go b/internal/filtering/safesearch/safesearch.go new file mode 100644 index 00000000..e944e217 --- /dev/null +++ b/internal/filtering/safesearch/safesearch.go @@ -0,0 +1,269 @@ +// Package safesearch implements safesearch host matching. +package safesearch + +import ( + "bytes" + "context" + "encoding/binary" + "encoding/gob" + "fmt" + "net" + "strings" + "time" + + "github.com/AdguardTeam/AdGuardHome/internal/filtering" + "github.com/AdguardTeam/golibs/cache" + "github.com/AdguardTeam/golibs/log" + "github.com/AdguardTeam/urlfilter" + "github.com/AdguardTeam/urlfilter/filterlist" + "github.com/AdguardTeam/urlfilter/rules" + "github.com/miekg/dns" +) + +// Service is a enum with service names used as search providers. +type Service string + +// Service enum members. +const ( + Bing Service = "bing" + DuckDuckGo Service = "duckduckgo" + Google Service = "google" + Pixabay Service = "pixabay" + Yandex Service = "yandex" + YouTube Service = "youtube" +) + +// isServiceProtected returns true if the service safe search is active. +func isServiceProtected(s filtering.SafeSearchConfig, service Service) (ok bool) { + switch service { + case Bing: + return s.Bing + case DuckDuckGo: + return s.DuckDuckGo + case Google: + return s.Google + case Pixabay: + return s.Pixabay + case Yandex: + return s.Yandex + case YouTube: + return s.YouTube + default: + panic(fmt.Errorf("safesearch: invalid sources: not found service %q", service)) + } +} + +// DefaultSafeSearch is the default safesearch struct. +type DefaultSafeSearch struct { + engine *urlfilter.DNSEngine + safeSearchCache cache.Cache + resolver filtering.Resolver + cacheTime time.Duration +} + +// NewDefaultSafeSearch returns new safesearch struct. CacheTime is an element +// TTL (in minutes). +func NewDefaultSafeSearch( + conf filtering.SafeSearchConfig, + cacheSize uint, + cacheTime time.Duration, +) (ss *DefaultSafeSearch, err error) { + engine, err := newEngine(filtering.SafeSearchListID, conf) + if err != nil { + return nil, err + } + + var resolver filtering.Resolver = net.DefaultResolver + if conf.CustomResolver != nil { + resolver = conf.CustomResolver + } + + return &DefaultSafeSearch{ + engine: engine, + safeSearchCache: cache.New(cache.Config{ + EnableLRU: true, + MaxSize: cacheSize, + }), + cacheTime: cacheTime, + resolver: resolver, + }, nil +} + +// newEngine creates new engine for provided safe search configuration. +func newEngine(listID int, conf filtering.SafeSearchConfig) (engine *urlfilter.DNSEngine, err error) { + var sb strings.Builder + for service, serviceRules := range safeSearchRules { + if isServiceProtected(conf, service) { + sb.WriteString(serviceRules) + } + } + + strList := &filterlist.StringRuleList{ + ID: listID, + RulesText: sb.String(), + IgnoreCosmetic: true, + } + + rs, err := filterlist.NewRuleStorage([]filterlist.RuleList{strList}) + if err != nil { + return nil, fmt.Errorf("creating rule storage: %w", err) + } + + engine = urlfilter.NewDNSEngine(rs) + log.Info("safesearch: filter %d: reset %d rules", listID, engine.RulesCount) + + return engine, nil +} + +// type check +var _ filtering.SafeSearch = (*DefaultSafeSearch)(nil) + +// SearchHost implements the [filtering.SafeSearch] interface for *DefaultSafeSearch. +func (ss *DefaultSafeSearch) SearchHost(host string, qtype uint16) (res *rules.DNSRewrite) { + r, _ := ss.engine.MatchRequest(&urlfilter.DNSRequest{ + Hostname: strings.ToLower(host), + DNSType: qtype, + }) + + rewritesRules := r.DNSRewrites() + if len(rewritesRules) > 0 { + return rewritesRules[0].DNSRewrite + } + + return nil +} + +// CheckHost implements the [filtering.SafeSearch] interface for +// *DefaultSafeSearch. +func (ss *DefaultSafeSearch) CheckHost( + host string, + qtype uint16, +) (res filtering.Result, err error) { + if log.GetLevel() >= log.DEBUG { + timer := log.StartTimer() + defer timer.LogElapsed("safesearch: lookup for %s", host) + } + + // Check cache. Return cached result if it was found + cachedValue, isFound := ss.getCachedResult(host) + if isFound { + log.Debug("safesearch: found in cache: %s", host) + + return cachedValue, nil + } + + rewrite := ss.SearchHost(host, qtype) + if rewrite == nil { + return filtering.Result{}, nil + } + + dRes, err := ss.newResult(rewrite, qtype) + if err != nil { + log.Debug("safesearch: failed to lookup addresses for %s: %s", host, err) + + return filtering.Result{}, err + } + + if dRes != nil { + res = *dRes + ss.setCacheResult(host, res) + + return res, nil + } + + return filtering.Result{}, fmt.Errorf("no ipv4 addresses in safe search response for %s", host) +} + +// newResult creates Result object from rewrite rule. +func (ss *DefaultSafeSearch) newResult( + rewrite *rules.DNSRewrite, + qtype uint16, +) (res *filtering.Result, err error) { + res = &filtering.Result{ + Rules: []*filtering.ResultRule{{ + FilterListID: filtering.SafeSearchListID, + }}, + Reason: filtering.FilteredSafeSearch, + IsFiltered: true, + } + + if rewrite.RRType == qtype && (qtype == dns.TypeA || qtype == dns.TypeAAAA) { + ip, ok := rewrite.Value.(net.IP) + if !ok || ip == nil { + return nil, nil + } + + res.Rules[0].IP = ip + + return res, nil + } + + if rewrite.NewCNAME == "" { + return nil, nil + } + + ips, err := ss.resolver.LookupIP(context.Background(), "ip", rewrite.NewCNAME) + if err != nil { + return nil, err + } + + for _, ip := range ips { + if ip = ip.To4(); ip == nil { + continue + } + + res.Rules[0].IP = ip + + return res, nil + } + + return nil, nil +} + +// setCacheResult stores data in cache for host. +func (ss *DefaultSafeSearch) setCacheResult(host string, res filtering.Result) { + expire := uint32(time.Now().Add(ss.cacheTime).Unix()) + exp := make([]byte, 4) + binary.BigEndian.PutUint32(exp, expire) + buf := bytes.NewBuffer(exp) + + err := gob.NewEncoder(buf).Encode(res) + if err != nil { + log.Error("safesearch: cache encoding: %s", err) + + return + } + + val := buf.Bytes() + _ = ss.safeSearchCache.Set([]byte(host), val) + + log.Debug("safesearch: stored in cache: %s (%d bytes)", host, len(val)) +} + +// getCachedResult returns stored data from cache for host. +func (ss *DefaultSafeSearch) getCachedResult(host string) (res filtering.Result, ok bool) { + res = filtering.Result{} + + data := ss.safeSearchCache.Get([]byte(host)) + if data == nil { + return res, false + } + + exp := binary.BigEndian.Uint32(data[:4]) + if exp <= uint32(time.Now().Unix()) { + ss.safeSearchCache.Del([]byte(host)) + + return res, false + } + + buf := bytes.NewBuffer(data[4:]) + + err := gob.NewDecoder(buf).Decode(&res) + if err != nil { + log.Debug("safesearch: cache decoding: %s", err) + + return filtering.Result{}, false + } + + return res, true +} diff --git a/internal/filtering/safesearch/safesearch_test.go b/internal/filtering/safesearch/safesearch_test.go new file mode 100644 index 00000000..97d18f95 --- /dev/null +++ b/internal/filtering/safesearch/safesearch_test.go @@ -0,0 +1,202 @@ +package safesearch + +import ( + "context" + "net" + "testing" + "time" + + "github.com/AdguardTeam/AdGuardHome/internal/aghtest" + "github.com/AdguardTeam/AdGuardHome/internal/filtering" + "github.com/AdguardTeam/urlfilter/rules" + "github.com/miekg/dns" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +const ( + safeSearchCacheSize = 5000 + cacheTime = 30 * time.Minute +) + +var defaultSafeSearchConf = filtering.SafeSearchConfig{ + Enabled: true, + Bing: true, + DuckDuckGo: true, + Google: true, + Pixabay: true, + Yandex: true, + YouTube: true, +} + +var yandexIP = net.IPv4(213, 180, 193, 56) + +func newForTest(t testing.TB, ssConf filtering.SafeSearchConfig) (ss *DefaultSafeSearch) { + ss, err := NewDefaultSafeSearch(ssConf, safeSearchCacheSize, cacheTime) + require.NoError(t, err) + + return ss +} + +func TestSafeSearch(t *testing.T) { + ss := newForTest(t, defaultSafeSearchConf) + val := ss.SearchHost("www.google.com", dns.TypeA) + + assert.Equal(t, &rules.DNSRewrite{NewCNAME: "forcesafesearch.google.com"}, val) +} + +func TestCheckHostSafeSearchYandex(t *testing.T) { + ss := newForTest(t, defaultSafeSearchConf) + + // Check host for each domain. + for _, host := range []string{ + "yandex.ru", + "yAndeX.ru", + "YANdex.COM", + "yandex.by", + "yandex.kz", + "www.yandex.com", + } { + res, err := ss.CheckHost(host, dns.TypeA) + require.NoError(t, err) + + assert.True(t, res.IsFiltered) + + require.Len(t, res.Rules, 1) + + assert.Equal(t, yandexIP, res.Rules[0].IP) + assert.EqualValues(t, filtering.SafeSearchListID, res.Rules[0].FilterListID) + } +} + +func TestCheckHostSafeSearchGoogle(t *testing.T) { + resolver := &aghtest.TestResolver{} + ip, _ := resolver.HostToIPs("forcesafesearch.google.com") + + ss := newForTest(t, defaultSafeSearchConf) + ss.resolver = resolver + + // Check host for each domain. + for _, host := range []string{ + "www.google.com", + "www.google.im", + "www.google.co.in", + "www.google.iq", + "www.google.is", + "www.google.it", + "www.google.je", + } { + t.Run(host, func(t *testing.T) { + res, err := ss.CheckHost(host, dns.TypeA) + require.NoError(t, err) + + assert.True(t, res.IsFiltered) + + require.Len(t, res.Rules, 1) + + assert.Equal(t, ip, res.Rules[0].IP) + assert.EqualValues(t, filtering.SafeSearchListID, res.Rules[0].FilterListID) + }) + } +} + +func TestSafeSearchCacheYandex(t *testing.T) { + const domain = "yandex.ru" + + ss := newForTest(t, filtering.SafeSearchConfig{Enabled: false}) + + // Check host with disabled safesearch. + res, err := ss.CheckHost(domain, dns.TypeA) + require.NoError(t, err) + + assert.False(t, res.IsFiltered) + assert.Empty(t, res.Rules) + + ss = newForTest(t, defaultSafeSearchConf) + res, err = ss.CheckHost(domain, dns.TypeA) + require.NoError(t, err) + + // For yandex we already know valid IP. + require.Len(t, res.Rules, 1) + + assert.Equal(t, res.Rules[0].IP, yandexIP) + + // Check cache. + cachedValue, isFound := ss.getCachedResult(domain) + require.True(t, isFound) + require.Len(t, cachedValue.Rules, 1) + + assert.Equal(t, cachedValue.Rules[0].IP, yandexIP) +} + +func TestSafeSearchCacheGoogle(t *testing.T) { + const domain = "www.google.ru" + + ss := newForTest(t, filtering.SafeSearchConfig{Enabled: false}) + + res, err := ss.CheckHost(domain, dns.TypeA) + require.NoError(t, err) + + assert.False(t, res.IsFiltered) + assert.Empty(t, res.Rules) + + resolver := &aghtest.TestResolver{} + ss = newForTest(t, defaultSafeSearchConf) + ss.resolver = resolver + + // Lookup for safesearch domain. + rewrite := ss.SearchHost(domain, dns.TypeA) + + ips, err := resolver.LookupIP(context.Background(), "ip", rewrite.NewCNAME) + require.NoError(t, err) + + var foundIP net.IP + for _, ip := range ips { + if ip.To4() != nil { + foundIP = ip + + break + } + } + + res, err = ss.CheckHost(domain, dns.TypeA) + require.NoError(t, err) + require.Len(t, res.Rules, 1) + + assert.True(t, res.Rules[0].IP.Equal(foundIP)) + + // Check cache. + cachedValue, isFound := ss.getCachedResult(domain) + require.True(t, isFound) + require.Len(t, cachedValue.Rules, 1) + + assert.True(t, cachedValue.Rules[0].IP.Equal(foundIP)) +} + +const googleHost = "www.google.com" + +var dnsRewriteSink *rules.DNSRewrite + +func BenchmarkSafeSearch(b *testing.B) { + ss := newForTest(b, defaultSafeSearchConf) + + for n := 0; n < b.N; n++ { + dnsRewriteSink = ss.SearchHost(googleHost, dns.TypeA) + } + + assert.Equal(b, "forcesafesearch.google.com", dnsRewriteSink.NewCNAME) +} + +var dnsRewriteParallelSink *rules.DNSRewrite + +func BenchmarkSafeSearch_parallel(b *testing.B) { + ss := newForTest(b, defaultSafeSearchConf) + + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + dnsRewriteParallelSink = ss.SearchHost(googleHost, dns.TypeA) + } + }) + + assert.Equal(b, "forcesafesearch.google.com", dnsRewriteParallelSink.NewCNAME) +} diff --git a/internal/filtering/servicelist.go b/internal/filtering/servicelist.go index 93fe79cd..112db944 100644 --- a/internal/filtering/servicelist.go +++ b/internal/filtering/servicelist.go @@ -71,6 +71,7 @@ var blockedServices = []blockedService{{ "||amazon.jp^", "||amazon.nl^", "||amazon.red^", + "||amazon.se^", "||amazon.sg^", "||amazon^", "||amazonalexavoxcon.com^", @@ -1171,6 +1172,16 @@ var blockedServices = []blockedService{{ "||zuckerberg.com^", "||zuckerberg.net^", }, +}, { + ID: "gog", + Name: "GOG", + IconSVG: []byte(""), + Rules: []string{ + "||gog-cdn-lumen.secure2.footprint.net^", + "||gog-statics.com^", + "||gog.com^", + "||gogalaxy.com^", + }, }, { ID: "hulu", Name: "Hulu", @@ -1280,6 +1291,14 @@ var blockedServices = []blockedService{{ "||iq.com^", "||iqiyi.com^", }, +}, { + ID: "kakaotalk", + Name: "KakaoTalk", + IconSVG: []byte(""), + Rules: []string{ + "||kakao.com^", + "||kgslb.com^", + }, }, { ID: "leagueoflegends", Name: "League of Legends", @@ -1291,6 +1310,24 @@ var blockedServices = []blockedService{{ "||lolstatic.com^", "||lolusercontent.com^", }, +}, { + ID: "line", + Name: "LINE", + IconSVG: []byte(""), + Rules: []string{ + "||gcld-line.com^", + "||lin.ee^", + "||line-apps-beta.com^", + "||line-apps-rc.com^", + "||line-apps.com^", + "||line-cdn.net^", + "||line-scdn.net^", + "||line.me^", + "||line.naver.jp^", + "||linecorp.com^", + "||linemyshop.com^", + "||lineshoppingseller.com^", + }, }, { ID: "mail_ru", Name: "Mail.ru", @@ -1308,13 +1345,13 @@ var blockedServices = []blockedService{{ "||aus.social^", "||awscommunity.social^", "||cyberplace.social^", + "||defcon.social^", "||det.social^", "||fosstodon.org^", "||glasgow.social^", "||h4.io^", "||hachyderm.io^", "||hessen.social^", - "||home.social^", "||hostux.social^", "||ieji.de^", "||indieweb.social^", @@ -1333,6 +1370,7 @@ var blockedServices = []blockedService{{ "||mastodon.au^", "||mastodon.bida.im^", "||mastodon.com.tr^", + "||mastodon.eus^", "||mastodon.green^", "||mastodon.ie^", "||mastodon.iriseden.eu^", @@ -1360,10 +1398,8 @@ var blockedServices = []blockedService{{ "||mindly.social^", "||mstdn.ca^", "||mstdn.jp^", - "||mstdn.party^", "||mstdn.social^", "||muenchen.social^", - "||nerdculture.de^", "||newsie.social^", "||noc.social^", "||norden.social^", @@ -1382,6 +1418,7 @@ var blockedServices = []blockedService{{ "||social.anoxinon.de^", "||social.cologne^", "||social.dev-wiki.de^", + "||social.linux.pizza^", "||social.politicaconciencia.org^", "||social.vivaldi.net^", "||sself.co^", @@ -1398,11 +1435,11 @@ var blockedServices = []blockedService{{ "||toot.wales^", "||troet.cafe^", "||twingyeo.kr^", - "||uiuxdev.social^", "||union.place^", "||universeodon.com^", "||urbanists.social^", "||vocalodon.net^", + "||wien.rocks^", "||wxw.moe^", }, }, { @@ -1599,6 +1636,14 @@ var blockedServices = []blockedService{{ "||snapchat.com^", "||snapkit.co", }, +}, { + ID: "soundcloud", + Name: "SoundCloud", + IconSVG: []byte(""), + Rules: []string{ + "||sndcdn.com^", + "||soundcloud.com^", + }, }, { ID: "spotify", Name: "Spotify", diff --git a/internal/home/client.go b/internal/home/client.go new file mode 100644 index 00000000..d84b7c26 --- /dev/null +++ b/internal/home/client.go @@ -0,0 +1,102 @@ +package home + +import ( + "encoding" + "fmt" + + "github.com/AdguardTeam/dnsproxy/proxy" +) + +// Client contains information about persistent clients. +type Client struct { + // upstreamConfig is the custom upstream config for this client. If + // it's nil, it has not been initialized yet. If it's non-nil and + // empty, there are no valid upstreams. If it's non-nil and non-empty, + // these upstream must be used. + upstreamConfig *proxy.UpstreamConfig + + Name string + + IDs []string + Tags []string + BlockedServices []string + Upstreams []string + + UseOwnSettings bool + FilteringEnabled bool + SafeSearchEnabled bool + SafeBrowsingEnabled bool + ParentalEnabled bool + UseOwnBlockedServices bool +} + +// closeUpstreams closes the client-specific upstream config of c if any. +func (c *Client) closeUpstreams() (err error) { + if c.upstreamConfig != nil { + err = c.upstreamConfig.Close() + if err != nil { + return fmt.Errorf("closing upstreams of client %q: %w", c.Name, err) + } + } + + return nil +} + +// clientSource represents the source from which the information about the +// client has been obtained. +type clientSource uint + +// Clients information sources. The order determines the priority. +const ( + ClientSourceNone clientSource = iota + ClientSourceWHOIS + ClientSourceARP + ClientSourceRDNS + ClientSourceDHCP + ClientSourceHostsFile + ClientSourcePersistent +) + +// type check +var _ fmt.Stringer = clientSource(0) + +// String returns a human-readable name of cs. +func (cs clientSource) String() (s string) { + switch cs { + case ClientSourceWHOIS: + return "WHOIS" + case ClientSourceARP: + return "ARP" + case ClientSourceRDNS: + return "rDNS" + case ClientSourceDHCP: + return "DHCP" + case ClientSourceHostsFile: + return "etc/hosts" + default: + return "" + } +} + +// type check +var _ encoding.TextMarshaler = clientSource(0) + +// MarshalText implements encoding.TextMarshaler for the clientSource. +func (cs clientSource) MarshalText() (text []byte, err error) { + return []byte(cs.String()), nil +} + +// RuntimeClient is a client information about which has been obtained using the +// source described in the Source field. +type RuntimeClient struct { + WHOISInfo *RuntimeClientWHOISInfo + Host string + Source clientSource +} + +// RuntimeClientWHOISInfo is the filtered WHOIS data for a runtime client. +type RuntimeClientWHOISInfo struct { + City string `json:"city,omitempty"` + Country string `json:"country,omitempty"` + Orgname string `json:"orgname,omitempty"` +} diff --git a/internal/home/clients.go b/internal/home/clients.go index 5d0a9ef2..d5e0d02d 100644 --- a/internal/home/clients.go +++ b/internal/home/clients.go @@ -2,11 +2,9 @@ package home import ( "bytes" - "encoding" "fmt" "net" "net/netip" - "sort" "strings" "sync" "time" @@ -26,122 +24,16 @@ import ( "golang.org/x/exp/slices" ) -const clientsUpdatePeriod = 10 * time.Minute - -var webHandlersRegistered = false - -// Client contains information about persistent clients. -type Client struct { - // upstreamConfig is the custom upstream config for this client. If - // it's nil, it has not been initialized yet. If it's non-nil and - // empty, there are no valid upstreams. If it's non-nil and non-empty, - // these upstream must be used. - upstreamConfig *proxy.UpstreamConfig - - Name string - - IDs []string - Tags []string - BlockedServices []string - Upstreams []string - - UseOwnSettings bool - FilteringEnabled bool - SafeSearchEnabled bool - SafeBrowsingEnabled bool - ParentalEnabled bool - UseOwnBlockedServices bool -} - -// closeUpstreams closes the client-specific upstream config of c if any. -func (c *Client) closeUpstreams() (err error) { - if c.upstreamConfig != nil { - err = c.upstreamConfig.Close() - if err != nil { - return fmt.Errorf("closing upstreams of client %q: %w", c.Name, err) - } - } - - return nil -} - -type clientSource uint - -// Clients information sources. The order determines the priority. -const ( - ClientSourceNone clientSource = iota - ClientSourceWHOIS - ClientSourceARP - ClientSourceRDNS - ClientSourceDHCP - ClientSourceHostsFile - ClientSourcePersistent -) - -// type check -var _ fmt.Stringer = clientSource(0) - -// String returns a human-readable name of cs. -func (cs clientSource) String() (s string) { - switch cs { - case ClientSourceWHOIS: - return "WHOIS" - case ClientSourceARP: - return "ARP" - case ClientSourceRDNS: - return "rDNS" - case ClientSourceDHCP: - return "DHCP" - case ClientSourceHostsFile: - return "etc/hosts" - default: - return "" - } -} - -// type check -var _ encoding.TextMarshaler = clientSource(0) - -// MarshalText implements encoding.TextMarshaler for the clientSource. -func (cs clientSource) MarshalText() (text []byte, err error) { - return []byte(cs.String()), nil -} - -// clientSourceConf is used to configure where the runtime clients will be -// obtained from. -type clientSourcesConf struct { - WHOIS bool `yaml:"whois"` - ARP bool `yaml:"arp"` - RDNS bool `yaml:"rdns"` - DHCP bool `yaml:"dhcp"` - HostsFile bool `yaml:"hosts"` -} - -// RuntimeClient information -type RuntimeClient struct { - WHOISInfo *RuntimeClientWHOISInfo - Host string - Source clientSource -} - -// RuntimeClientWHOISInfo is the filtered WHOIS data for a runtime client. -type RuntimeClientWHOISInfo struct { - City string `json:"city,omitempty"` - Country string `json:"country,omitempty"` - Orgname string `json:"orgname,omitempty"` -} - +// clientsContainer is the storage of all runtime and persistent clients. type clientsContainer struct { - // TODO(a.garipov): Perhaps use a number of separate indices for - // different types (string, netip.Addr, and so on). + // TODO(a.garipov): Perhaps use a number of separate indices for different + // types (string, netip.Addr, and so on). list map[string]*Client // name -> client idIndex map[string]*Client // ID -> client // ipToRC is the IP address to *RuntimeClient map. ipToRC map[netip.Addr]*RuntimeClient - lock sync.Mutex - allTags *stringutil.Set // dhcpServer is used for looking up clients IP addresses by MAC addresses @@ -157,7 +49,16 @@ type clientsContainer struct { // arpdb stores the neighbors retrieved from ARP. arpdb aghnet.ARPDB - testing bool // if TRUE, this object is used for internal tests + // lock protects all fields. + // + // TODO(a.garipov): Use a pointer and describe which fields are protected in + // more detail. + lock sync.Mutex + + // testing is a flag that disables some features for internal tests. + // + // TODO(a.garipov): Awful. Remove. + testing bool } // Init initializes clients container @@ -203,24 +104,34 @@ func (clients *clientsContainer) handleHostsUpdates() { } } -// Start - start the module +// webHandlersRegistered prevents a [clientsContainer] from regisering its web +// handlers more than once. +// +// TODO(a.garipov): Refactor HTTP handler registration logic. +var webHandlersRegistered = false + +// Start starts the clients container. func (clients *clientsContainer) Start() { - if !clients.testing { - if !webHandlersRegistered { - webHandlersRegistered = true - clients.registerWebHandlers() - } - go clients.periodicUpdate() + if clients.testing { + return } + + if !webHandlersRegistered { + webHandlersRegistered = true + clients.registerWebHandlers() + } + + go clients.periodicUpdate() } -// Reload reloads runtime clients. -func (clients *clientsContainer) Reload() { +// reloadARP reloads runtime clients from ARP, if configured. +func (clients *clientsContainer) reloadARP() { if clients.arpdb != nil { clients.addFromSystemARP() } } +// clientObject is the YAML representation of a persistent client. type clientObject struct { Name string `yaml:"name"` @@ -271,7 +182,7 @@ func (clients *clientsContainer) addFromConfig(objects []*clientObject) { } } - sort.Strings(cli.Tags) + slices.Sort(cli.Tags) _, err := clients.Add(cli) if err != nil { @@ -311,17 +222,22 @@ func (clients *clientsContainer) forConfig() (objs []*clientObject) { // above loop can generate different orderings when writing to the config // file: this produces lots of diffs in config files, so sort objects by // name before writing. - sort.Slice(objs, func(i, j int) bool { return objs[i].Name < objs[j].Name }) + slices.SortStableFunc(objs, func(a, b *clientObject) (sortsBefore bool) { + return a.Name < b.Name + }) return objs } +// arpClientsUpdatePeriod defines how often ARP clients are updated. +const arpClientsUpdatePeriod = 10 * time.Minute + func (clients *clientsContainer) periodicUpdate() { defer log.OnPanic("clients container") for { - clients.Reload() - time.Sleep(clientsUpdatePeriod) + clients.reloadARP() + time.Sleep(arpClientsUpdatePeriod) } } @@ -484,7 +400,8 @@ func (clients *clientsContainer) findUpstreams( return conf, nil } -// findLocked searches for a client by its ID. For internal use only. +// findLocked searches for a client by its ID. clients.lock is expected to be +// locked. func (clients *clientsContainer) findLocked(id string) (c *Client, ok bool) { c, ok = clients.idIndex[id] if ok { @@ -498,13 +415,13 @@ func (clients *clientsContainer) findLocked(id string) (c *Client, ok bool) { for _, c = range clients.list { for _, id := range c.IDs { - var n netip.Prefix - n, err = netip.ParsePrefix(id) + var subnet netip.Prefix + subnet, err = netip.ParsePrefix(id) if err != nil { continue } - if n.Contains(ip) { + if subnet.Contains(ip) { return c, true } } @@ -514,20 +431,25 @@ func (clients *clientsContainer) findLocked(id string) (c *Client, ok bool) { return nil, false } - macFound := clients.dhcpServer.FindMACbyIP(ip.AsSlice()) - if macFound == nil { + return clients.findDHCP(ip) +} + +// findDHCP searches for a client by its MAC, if the DHCP server is active and +// there is such client. clients.lock is expected to be locked. +func (clients *clientsContainer) findDHCP(ip netip.Addr) (c *Client, ok bool) { + foundMAC := clients.dhcpServer.FindMACbyIP(ip) + if foundMAC == nil { return nil, false } for _, c = range clients.list { for _, id := range c.IDs { - var mac net.HardwareAddr - mac, err = net.ParseMAC(id) + mac, err := net.ParseMAC(id) if err != nil { continue } - if bytes.Equal(mac, macFound) { + if bytes.Equal(mac, foundMAC) { return c, true } } @@ -564,24 +486,13 @@ func (clients *clientsContainer) check(c *Client) (err error) { } for i, id := range c.IDs { - // Normalize structured data. - var ( - ip netip.Addr - n netip.Prefix - mac net.HardwareAddr - ) - - if ip, err = netip.ParseAddr(id); err == nil { - c.IDs[i] = ip.String() - } else if n, err = netip.ParsePrefix(id); err == nil { - c.IDs[i] = n.String() - } else if mac, err = net.ParseMAC(id); err == nil { - c.IDs[i] = mac.String() - } else if err = dnsforward.ValidateClientID(id); err == nil { - c.IDs[i] = strings.ToLower(id) - } else { - return fmt.Errorf("invalid clientid at index %d: %q", i, id) + var norm string + norm, err = normalizeClientIdentifier(id) + if err != nil { + return fmt.Errorf("client at index %d: %w", i, err) } + + c.IDs[i] = norm } for _, t := range c.Tags { @@ -590,7 +501,7 @@ func (clients *clientsContainer) check(c *Client) (err error) { } } - sort.Strings(c.Tags) + slices.Sort(c.Tags) err = dnsforward.ValidateUpstreams(c.Upstreams) if err != nil { @@ -600,6 +511,35 @@ func (clients *clientsContainer) check(c *Client) (err error) { return nil } +// normalizeClientIdentifier returns a normalized version of idStr. If idStr +// cannot be normalized, it returns an error. +func normalizeClientIdentifier(idStr string) (norm string, err error) { + if idStr == "" { + return "", errors.Error("clientid is empty") + } + + var ip netip.Addr + if ip, err = netip.ParseAddr(idStr); err == nil { + return ip.String(), nil + } + + var subnet netip.Prefix + if subnet, err = netip.ParsePrefix(idStr); err == nil { + return subnet.String(), nil + } + + var mac net.HardwareAddr + if mac, err = net.ParseMAC(idStr); err == nil { + return mac.String(), nil + } + + if err = dnsforward.ValidateClientID(idStr); err == nil { + return strings.ToLower(idStr), nil + } + + return "", fmt.Errorf("bad client identifier %q", idStr) +} + // Add adds a new client object. ok is false if such client already exists or // if an error occurred. func (clients *clientsContainer) Add(c *Client) (ok bool, err error) { @@ -665,21 +605,6 @@ func (clients *clientsContainer) Del(name string) (ok bool) { return true } -// equalStringSlices returns true if the slices are equal. -func equalStringSlices(a, b []string) (ok bool) { - if len(a) != len(b) { - return false - } - - for i := range a { - if a[i] != b[i] { - return false - } - } - - return true -} - // Update updates a client by its name. func (clients *clientsContainer) Update(name string, c *Client) (err error) { err = clients.check(c) @@ -703,22 +628,11 @@ func (clients *clientsContainer) Update(name string, c *Client) (err error) { } } - // Second, check the IP index. - if !equalStringSlices(prev.IDs, c.IDs) { - for _, id := range c.IDs { - c2, ok2 := clients.idIndex[id] - if ok2 && c2 != prev { - return fmt.Errorf("another client uses the same id (%q): %q", id, c2.Name) - } - } - - // Update ID index. - for _, id := range prev.IDs { - delete(clients.idIndex, id) - } - for _, id := range c.IDs { - clients.idIndex[id] = prev - } + // Second, update the ID index. + err = clients.updateIDIndex(prev, c.IDs) + if err != nil { + // Don't wrap the error, because it's informative enough as is. + return err } // Update name index. @@ -738,6 +652,32 @@ func (clients *clientsContainer) Update(name string, c *Client) (err error) { return nil } +// updateIDIndex updates the ID index data for cli using the information from +// newIDs. +func (clients *clientsContainer) updateIDIndex(cli *Client, newIDs []string) (err error) { + if slices.Equal(cli.IDs, newIDs) { + return nil + } + + for _, id := range newIDs { + existing, ok := clients.idIndex[id] + if ok && existing != cli { + return fmt.Errorf("id %q is used by client with name %q", id, existing.Name) + } + } + + // Update the IDs in the index. + for _, id := range cli.IDs { + delete(clients.idIndex, id) + } + + for _, id := range newIDs { + clients.idIndex[id] = cli + } + + return nil +} + // setWHOISInfo sets the WHOIS information for a client. func (clients *clientsContainer) setWHOISInfo(ip netip.Addr, wi *RuntimeClientWHOISInfo) { clients.lock.Lock() diff --git a/internal/home/config.go b/internal/home/config.go index 69baa18c..6aad27b6 100644 --- a/internal/home/config.go +++ b/internal/home/config.go @@ -6,7 +6,6 @@ import ( "net/netip" "os" "path/filepath" - "sort" "sync" "github.com/AdguardTeam/AdGuardHome/internal/aghalg" @@ -21,6 +20,7 @@ import ( "github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/timeutil" "github.com/google/renameio/maybe" + "golang.org/x/exp/slices" yaml "gopkg.in/yaml.v3" ) @@ -75,11 +75,21 @@ type osConfig struct { type clientsConfig struct { // Sources defines the set of sources to fetch the runtime clients from. - Sources *clientSourcesConf `yaml:"runtime_sources"` + Sources *clientSourcesConfig `yaml:"runtime_sources"` // Persistent are the configured clients. Persistent []*clientObject `yaml:"persistent"` } +// clientSourceConfig is used to configure where the runtime clients will be +// obtained from. +type clientSourcesConfig struct { + WHOIS bool `yaml:"whois"` + ARP bool `yaml:"arp"` + RDNS bool `yaml:"rdns"` + DHCP bool `yaml:"dhcp"` + HostsFile bool `yaml:"hosts"` +} + // configuration is loaded from YAML // field ordering is important -- yaml fields will mirror ordering from here type configuration struct { @@ -275,6 +285,12 @@ var config = &configuration{ TrustedProxies: []string{"127.0.0.0/8", "::1/128"}, CacheSize: 4 * 1024 * 1024, + EDNSClientSubnet: &dnsforward.EDNSClientSubnet{ + CustomIP: "", + Enabled: false, + UseCustom: false, + }, + // set default maximum concurrent queries to 300 // we introduced a default limit due to this: // https://github.com/AdguardTeam/AdGuardHome/issues/2015#issuecomment-674041912 @@ -336,7 +352,7 @@ var config = &configuration{ }, }, Clients: &clientsConfig{ - Sources: &clientSourcesConf{ + Sources: &clientSourcesConfig{ WHOIS: true, ARP: true, RDNS: true, @@ -490,7 +506,7 @@ func (c *configuration) write() (err error) { config.Stats.Interval = statsConf.LimitDays config.Stats.Enabled = statsConf.Enabled config.Stats.Ignored = statsConf.Ignored.Values() - sort.Strings(config.Stats.Ignored) + slices.Sort(config.Stats.Ignored) } if Context.queryLog != nil { @@ -502,7 +518,7 @@ func (c *configuration) write() (err error) { config.QueryLog.Interval = timeutil.Duration{Duration: dc.RotationIvl} config.QueryLog.MemSize = dc.MemSize config.QueryLog.Ignored = dc.Ignored.Values() - sort.Strings(config.QueryLog.Ignored) + slices.Sort(config.Stats.Ignored) } if Context.filters != nil { diff --git a/internal/home/controlupdate.go b/internal/home/controlupdate.go index 5718bfaa..1cea1d14 100644 --- a/internal/home/controlupdate.go +++ b/internal/home/controlupdate.go @@ -98,7 +98,7 @@ func requestVersionInfo(resp *versionResponse, recheck bool) (err error) { if err != nil { vcu := Context.updater.VersionCheckURL() - return fmt.Errorf("getting version info from %s: %s", vcu, err) + return fmt.Errorf("getting version info from %s: %w", vcu, err) } return nil diff --git a/internal/home/home.go b/internal/home/home.go index 2fb74b3c..9c0351eb 100644 --- a/internal/home/home.go +++ b/internal/home/home.go @@ -125,7 +125,7 @@ func Main(clientBuildFS fs.FS) { log.Info("Received signal %q", sig) switch sig { case syscall.SIGHUP: - Context.clients.Reload() + Context.clients.reloadARP() Context.tls.reload() default: cleanup(context.Background()) diff --git a/internal/home/upgrade.go b/internal/home/upgrade.go index 0f53bcdc..b8f0b407 100644 --- a/internal/home/upgrade.go +++ b/internal/home/upgrade.go @@ -22,7 +22,7 @@ import ( ) // currentSchemaVersion is the current schema version. -const currentSchemaVersion = 16 +const currentSchemaVersion = 17 // These aliases are provided for convenience. type ( @@ -89,6 +89,7 @@ func upgradeConfigSchema(oldVersion int, diskConf yobj) (err error) { upgradeSchema13to14, upgradeSchema14to15, upgradeSchema15to16, + upgradeSchema16to17, } n := 0 @@ -792,7 +793,7 @@ func upgradeSchema13to14(diskConf yobj) (err error) { diskConf["clients"] = yobj{ "persistent": clientsVal, - "runtime_sources": &clientSourcesConf{ + "runtime_sources": &clientSourcesConfig{ WHOIS: true, ARP: true, RDNS: rdnsSrc, @@ -892,19 +893,56 @@ func upgradeSchema15to16(diskConf yobj) (err error) { "ignored": []any{}, } - k := "statistics_interval" - v, has := dns[k] + const field = "statistics_interval" + v, has := dns[field] if has { stats["enabled"] = v != 0 stats["interval"] = v } - delete(dns, k) + delete(dns, field) diskConf["statistics"] = stats return nil } +// upgradeSchema16to17 performs the following changes: +// +// # BEFORE: +// 'dns': +// 'edns_client_subnet': false +// +// # AFTER: +// 'dns': +// 'edns_client_subnet': +// 'enabled': false +// 'use_custom': false +// 'custom_ip': "" +func upgradeSchema16to17(diskConf yobj) (err error) { + log.Printf("Upgrade yaml: 16 to 17") + diskConf["schema_version"] = 17 + + dnsVal, ok := diskConf["dns"] + if !ok { + return nil + } + + dns, ok := dnsVal.(yobj) + if !ok { + return fmt.Errorf("unexpected type of dns: %T", dnsVal) + } + + const field = "edns_client_subnet" + + dns[field] = map[string]any{ + "enabled": dns[field] == true, + "use_custom": false, + "custom_ip": "", + } + + return nil +} + // TODO(a.garipov): Replace with log.Output when we port it to our logging // package. func funcName() string { diff --git a/internal/home/upgrade_test.go b/internal/home/upgrade_test.go index 14a43f70..23fd6393 100644 --- a/internal/home/upgrade_test.go +++ b/internal/home/upgrade_test.go @@ -579,7 +579,7 @@ func TestUpgradeSchema13to14(t *testing.T) { // The clients field will be added anyway. "clients": yobj{ "persistent": yarr{}, - "runtime_sources": &clientSourcesConf{ + "runtime_sources": &clientSourcesConfig{ WHOIS: true, ARP: true, RDNS: false, @@ -597,7 +597,7 @@ func TestUpgradeSchema13to14(t *testing.T) { "schema_version": newSchemaVer, "clients": yobj{ "persistent": []*clientObject{testClient}, - "runtime_sources": &clientSourcesConf{ + "runtime_sources": &clientSourcesConfig{ WHOIS: true, ARP: true, RDNS: false, @@ -618,7 +618,7 @@ func TestUpgradeSchema13to14(t *testing.T) { "schema_version": newSchemaVer, "clients": yobj{ "persistent": []*clientObject{testClient}, - "runtime_sources": &clientSourcesConf{ + "runtime_sources": &clientSourcesConfig{ WHOIS: true, ARP: true, RDNS: true, @@ -747,3 +747,64 @@ func TestUpgradeSchema15to16(t *testing.T) { }) } } + +func TestUpgradeSchema16to17(t *testing.T) { + const newSchemaVer = 17 + + defaultWantObj := yobj{ + "dns": map[string]any{ + "edns_client_subnet": map[string]any{ + "enabled": false, + "use_custom": false, + "custom_ip": "", + }, + }, + "schema_version": newSchemaVer, + } + + testCases := []struct { + in yobj + want yobj + name string + }{{ + in: yobj{ + "dns": map[string]any{ + "edns_client_subnet": false, + }, + }, + want: defaultWantObj, + name: "basic", + }, { + in: yobj{ + "dns": map[string]any{}, + }, + want: defaultWantObj, + name: "default_values", + }, { + in: yobj{ + "dns": map[string]any{ + "edns_client_subnet": true, + }, + }, + want: yobj{ + "dns": map[string]any{ + "edns_client_subnet": map[string]any{ + "enabled": true, + "use_custom": false, + "custom_ip": "", + }, + }, + "schema_version": newSchemaVer, + }, + name: "is_true", + }} + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + err := upgradeSchema16to17(tc.in) + require.NoError(t, err) + + assert.Equal(t, tc.want, tc.in) + }) + } +} diff --git a/internal/querylog/decode.go b/internal/querylog/decode.go index b4cfd7e5..8cb2a164 100644 --- a/internal/querylog/decode.go +++ b/internal/querylog/decode.go @@ -247,55 +247,20 @@ var resultHandlers = map[string]logEntryHandler{ } func decodeResultRuleKey(key string, i int, dec *json.Decoder, ent *logEntry) { + var vToken json.Token switch key { case "FilterListID": - vToken, err := dec.Token() - if err != nil { - if err != io.EOF { - log.Debug("decodeResultRuleKey %s err: %s", key, err) - } - - return - } - - if len(ent.Result.Rules) < i+1 { - ent.Result.Rules = append(ent.Result.Rules, &filtering.ResultRule{}) - } - + ent.Result.Rules, vToken = decodeVTokenAndAddRule(key, i, dec, ent.Result.Rules) if n, ok := vToken.(json.Number); ok { ent.Result.Rules[i].FilterListID, _ = n.Int64() } case "IP": - vToken, err := dec.Token() - if err != nil { - if err != io.EOF { - log.Debug("decodeResultRuleKey %s err: %s", key, err) - } - - return - } - - if len(ent.Result.Rules) < i+1 { - ent.Result.Rules = append(ent.Result.Rules, &filtering.ResultRule{}) - } - + ent.Result.Rules, vToken = decodeVTokenAndAddRule(key, i, dec, ent.Result.Rules) if ipStr, ok := vToken.(string); ok { ent.Result.Rules[i].IP = net.ParseIP(ipStr) } case "Text": - vToken, err := dec.Token() - if err != nil { - if err != io.EOF { - log.Debug("decodeResultRuleKey %s err: %s", key, err) - } - - return - } - - if len(ent.Result.Rules) < i+1 { - ent.Result.Rules = append(ent.Result.Rules, &filtering.ResultRule{}) - } - + ent.Result.Rules, vToken = decodeVTokenAndAddRule(key, i, dec, ent.Result.Rules) if s, ok := vToken.(string); ok { ent.Result.Rules[i].Text = s } @@ -304,6 +269,30 @@ func decodeResultRuleKey(key string, i int, dec *json.Decoder, ent *logEntry) { } } +func decodeVTokenAndAddRule( + key string, + i int, + dec *json.Decoder, + rules []*filtering.ResultRule, +) (newRules []*filtering.ResultRule, vToken json.Token) { + newRules = rules + + vToken, err := dec.Token() + if err != nil { + if err != io.EOF { + log.Debug("decodeResultRuleKey %s err: %s", key, err) + } + + return newRules, nil + } + + if len(rules) < i+1 { + newRules = append(newRules, &filtering.ResultRule{}) + } + + return newRules, vToken +} + func decodeResultRules(dec *json.Decoder, ent *logEntry) { for { delimToken, err := dec.Token() diff --git a/internal/querylog/http.go b/internal/querylog/http.go index e8fbbc30..1d983d35 100644 --- a/internal/querylog/http.go +++ b/internal/querylog/http.go @@ -54,10 +54,7 @@ func (l *queryLog) handleQueryLog(w http.ResponseWriter, r *http.Request) { return } - // search for the log entries entries, oldest := l.search(params) - - // convert log entries to JSON data := l.entriesToJSON(entries, oldest) _ = aghhttp.WriteJSONResponse(w, r, data) diff --git a/internal/querylog/json.go b/internal/querylog/json.go index f570d40f..33fc997a 100644 --- a/internal/querylog/json.go +++ b/internal/querylog/json.go @@ -1,7 +1,6 @@ package querylog import ( - "fmt" "strconv" "strings" "time" @@ -117,7 +116,7 @@ func (l *queryLog) setMsgData(entry *logEntry, jsonEntry jobject) { // it from there as well. jsonEntry["answer_dnssec"] = entry.AuthenticatedData || msg.AuthenticatedData - if a := answerToMap(msg); a != nil { + if a := answerToJSON(msg); a != nil { jsonEntry["answer"] = a } } @@ -136,7 +135,7 @@ func (l *queryLog) setOrigAns(entry *logEntry, jsonEntry jobject) { return } - if a := answerToMap(orig); a != nil { + if a := answerToJSON(orig); a != nil { jsonEntry["original_answer"] = a } } @@ -159,55 +158,24 @@ type dnsAnswer struct { TTL uint32 `json:"ttl"` } -func answerToMap(a *dns.Msg) (answers []*dnsAnswer) { - if a == nil || len(a.Answer) == 0 { +// answerToJSON converts the answer records of msg, if any, to their JSON form. +func answerToJSON(msg *dns.Msg) (answers []*dnsAnswer) { + if msg == nil || len(msg.Answer) == 0 { return nil } - answers = make([]*dnsAnswer, 0, len(a.Answer)) - for _, k := range a.Answer { - header := k.Header() - answer := &dnsAnswer{ + answers = make([]*dnsAnswer, 0, len(msg.Answer)) + for _, rr := range msg.Answer { + header := rr.Header() + a := &dnsAnswer{ Type: dns.TypeToString[header.Rrtype], - TTL: header.Ttl, + // Remove the header string from the answer value since it's mostly + // unnecessary in the log. + Value: strings.TrimPrefix(rr.String(), header.String()), + TTL: header.Ttl, } - // Some special treatment for some well-known types. - // - // TODO(a.garipov): Consider just calling String() for everyone - // instead. - switch v := k.(type) { - case nil: - // Probably unlikely, but go on. - case *dns.A: - answer.Value = v.A.String() - case *dns.AAAA: - answer.Value = v.AAAA.String() - case *dns.MX: - answer.Value = fmt.Sprintf("%v %v", v.Preference, v.Mx) - case *dns.CNAME: - answer.Value = v.Target - case *dns.NS: - answer.Value = v.Ns - case *dns.SPF: - answer.Value = strings.Join(v.Txt, "\n") - case *dns.TXT: - answer.Value = strings.Join(v.Txt, "\n") - case *dns.PTR: - answer.Value = v.Ptr - case *dns.SOA: - answer.Value = fmt.Sprintf("%v %v %v %v %v %v %v", v.Ns, v.Mbox, v.Serial, v.Refresh, v.Retry, v.Expire, v.Minttl) - case *dns.CAA: - answer.Value = fmt.Sprintf("%v %v \"%v\"", v.Flag, v.Tag, v.Value) - case *dns.HINFO: - answer.Value = fmt.Sprintf("\"%v\" \"%v\"", v.Cpu, v.Os) - case *dns.RRSIG: - answer.Value = fmt.Sprintf("%v %v %v %v %v %v %v %v %v", dns.TypeToString[v.TypeCovered], v.Algorithm, v.Labels, v.OrigTtl, v.Expiration, v.Inception, v.KeyTag, v.SignerName, v.Signature) - default: - answer.Value = v.String() - } - - answers = append(answers, answer) + answers = append(answers, a) } return answers diff --git a/internal/querylog/qlog.go b/internal/querylog/qlog.go index 32ac1a73..3b6c9efe 100644 --- a/internal/querylog/qlog.go +++ b/internal/querylog/qlog.go @@ -31,7 +31,8 @@ type queryLog struct { // bufferLock protects buffer. bufferLock sync.RWMutex - // buffer contains recent log entries. + // buffer contains recent log entries. The entries in this buffer must not + // be modified. buffer []*logEntry fileFlushLock sync.Mutex // synchronize a file-flushing goroutine and main thread @@ -100,6 +101,13 @@ type logEntry struct { AuthenticatedData bool `json:"AD,omitempty"` } +// shallowClone returns a shallow clone of e. +func (e *logEntry) shallowClone() (clone *logEntry) { + cloneVal := *e + + return &cloneVal +} + func (l *queryLog) Start() { if l.conf.HTTPRegister != nil { l.initWeb() diff --git a/internal/querylog/qlog_test.go b/internal/querylog/qlog_test.go index 75f02536..cb9ea3f0 100644 --- a/internal/querylog/qlog_test.go +++ b/internal/querylog/qlog_test.go @@ -2,11 +2,8 @@ package querylog import ( "fmt" - "math/rand" "net" - "sort" "testing" - "time" "github.com/AdguardTeam/AdGuardHome/internal/filtering" "github.com/AdguardTeam/dnsproxy/proxyutil" @@ -352,72 +349,3 @@ func assertLogEntry(t *testing.T, entry *logEntry, host string, answer, client n ip := proxyutil.IPFromRR(msg.Answer[0]).To16() assert.Equal(t, answer, ip) } - -func testEntries() (entries []*logEntry) { - rsrc := rand.NewSource(time.Now().UnixNano()) - rgen := rand.New(rsrc) - - entries = make([]*logEntry, 1000) - for i := range entries { - min := rgen.Intn(60) - sec := rgen.Intn(60) - entries[i] = &logEntry{ - Time: time.Date(2020, 1, 1, 0, min, sec, 0, time.UTC), - } - } - - return entries -} - -// logEntriesByTimeDesc is a wrapper over []*logEntry for sorting. -// -// NOTE(a.garipov): Weirdly enough, on my machine this gets consistently -// outperformed by sort.Slice, see the benchmark below. I'm leaving this -// implementation here, in tests, in case we want to make sure it outperforms on -// most machines, but for now this is unused in the actual code. -type logEntriesByTimeDesc []*logEntry - -// Len implements the sort.Interface interface for logEntriesByTimeDesc. -func (les logEntriesByTimeDesc) Len() (n int) { return len(les) } - -// Less implements the sort.Interface interface for logEntriesByTimeDesc. -func (les logEntriesByTimeDesc) Less(i, j int) (less bool) { - return les[i].Time.After(les[j].Time) -} - -// Swap implements the sort.Interface interface for logEntriesByTimeDesc. -func (les logEntriesByTimeDesc) Swap(i, j int) { les[i], les[j] = les[j], les[i] } - -func BenchmarkLogEntry_sort(b *testing.B) { - b.Run("methods", func(b *testing.B) { - for i := 0; i < b.N; i++ { - b.StopTimer() - entries := testEntries() - b.StartTimer() - - sort.Stable(logEntriesByTimeDesc(entries)) - } - }) - - b.Run("reflect", func(b *testing.B) { - for i := 0; i < b.N; i++ { - b.StopTimer() - entries := testEntries() - b.StartTimer() - - sort.SliceStable(entries, func(i, j int) (less bool) { - return entries[i].Time.After(entries[j].Time) - }) - } - }) -} - -func TestLogEntriesByTime_sort(t *testing.T) { - entries := testEntries() - sort.Sort(logEntriesByTimeDesc(entries)) - - for i := range entries[1:] { - assert.False(t, entries[i+1].Time.After(entries[i].Time), - "%s %s", entries[i+1].Time, entries[i].Time) - } -} diff --git a/internal/querylog/search.go b/internal/querylog/search.go index c1df5d5f..332c2e81 100644 --- a/internal/querylog/search.go +++ b/internal/querylog/search.go @@ -2,10 +2,10 @@ package querylog import ( "io" - "sort" "time" "github.com/AdguardTeam/golibs/log" + "golang.org/x/exp/slices" ) // client finds the client info, if any, by its ClientID and IP address, @@ -52,7 +52,9 @@ func (l *queryLog) searchMemory(params *searchParams, cache clientCache) (entrie // Go through the buffer in the reverse order, from newer to older. var err error for i := len(l.buffer) - 1; i >= 0; i-- { - e := l.buffer[i] + // A shallow clone is enough, since the only thing that this loop + // modifies is the client field. + e := l.buffer[i].shallowClone() e.client, err = l.client(e.ClientID, e.IP.String(), cache) if err != nil { @@ -98,8 +100,8 @@ func (l *queryLog) search(params *searchParams) (entries []*logEntry, oldest tim // weird on the frontend. // // See https://github.com/AdguardTeam/AdGuardHome/issues/2293. - sort.SliceStable(entries, func(i, j int) (less bool) { - return entries[i].Time.After(entries[j].Time) + slices.SortStableFunc(entries, func(a, b *logEntry) (sortsBefore bool) { + return a.Time.After(b.Time) }) if params.offset > 0 { @@ -130,7 +132,7 @@ func (l *queryLog) search(params *searchParams) (entries []*logEntry, oldest tim // searchFiles looks up log records from all log files. It optionally uses the // client cache, if provided. searchFiles does not scan more than // maxFileScanEntries so callers may need to call it several times to get all -// results. oldset and total are the time of the oldest processed entry and the +// results. oldest and total are the time of the oldest processed entry and the // total number of processed entries, including discarded ones, correspondingly. func (l *queryLog) searchFiles( params *searchParams, diff --git a/internal/querylog/searchcriterion.go b/internal/querylog/searchcriterion.go index a9bd4cff..d5363451 100644 --- a/internal/querylog/searchcriterion.go +++ b/internal/querylog/searchcriterion.go @@ -1,6 +1,7 @@ package querylog import ( + "fmt" "strings" "github.com/AdguardTeam/AdGuardHome/internal/filtering" @@ -118,7 +119,7 @@ func (c *searchCriterion) match(entry *logEntry) bool { case ctTerm: return c.ctDomainOrClientCase(entry) case ctFilteringStatus: - return c.ctFilteringStatusCase(entry.Result) + return c.ctFilteringStatusCase(entry.Result.Reason, entry.Result.IsFiltered) } return false @@ -141,54 +142,70 @@ func (c *searchCriterion) ctDomainOrClientCase(e *logEntry) bool { return ctDomainOrClientCaseNonStrict(c.value, c.asciiVal, clientID, name, host, ip) } -func (c *searchCriterion) ctFilteringStatusCase(res filtering.Result) bool { +// ctFilteringStatusCase returns true if the result matches the value. +func (c *searchCriterion) ctFilteringStatusCase( + reason filtering.Reason, + isFiltered bool, +) (matched bool) { switch c.value { case filteringStatusAll: return true - - case filteringStatusFiltered: - return res.IsFiltered || - res.Reason.In( - filtering.NotFilteredAllowList, - filtering.Rewritten, - filtering.RewrittenAutoHosts, - filtering.RewrittenRule, - ) - - case filteringStatusBlocked: - return res.IsFiltered && - res.Reason.In(filtering.FilteredBlockList, filtering.FilteredBlockedService) - - case filteringStatusBlockedService: - return res.IsFiltered && res.Reason == filtering.FilteredBlockedService - - case filteringStatusBlockedParental: - return res.IsFiltered && res.Reason == filtering.FilteredParental - - case filteringStatusBlockedSafebrowsing: - return res.IsFiltered && res.Reason == filtering.FilteredSafeBrowsing - + case + filteringStatusBlocked, + filteringStatusBlockedParental, + filteringStatusBlockedSafebrowsing, + filteringStatusBlockedService, + filteringStatusFiltered, + filteringStatusSafeSearch: + return isFiltered && c.isFilteredWithReason(reason) case filteringStatusWhitelisted: - return res.Reason == filtering.NotFilteredAllowList - + return reason == filtering.NotFilteredAllowList case filteringStatusRewritten: - return res.Reason.In( + return reason.In( filtering.Rewritten, filtering.RewrittenAutoHosts, filtering.RewrittenRule, ) - - case filteringStatusSafeSearch: - return res.IsFiltered && res.Reason == filtering.FilteredSafeSearch - case filteringStatusProcessed: - return !res.Reason.In( + return !reason.In( filtering.FilteredBlockList, filtering.FilteredBlockedService, filtering.NotFilteredAllowList, ) - default: return false } } + +// isFilteredWithReason returns true if reason matches the criterion value. +// c.value must be one of: +// +// - filteringStatusBlocked +// - filteringStatusBlockedParental +// - filteringStatusBlockedSafebrowsing +// - filteringStatusBlockedService +// - filteringStatusFiltered +// - filteringStatusSafeSearch +func (c *searchCriterion) isFilteredWithReason(reason filtering.Reason) (matched bool) { + switch c.value { + case filteringStatusBlocked: + return reason.In(filtering.FilteredBlockList, filtering.FilteredBlockedService) + case filteringStatusBlockedParental: + return reason == filtering.FilteredParental + case filteringStatusBlockedSafebrowsing: + return reason == filtering.FilteredSafeBrowsing + case filteringStatusBlockedService: + return reason == filtering.FilteredBlockedService + case filteringStatusFiltered: + return reason.In( + filtering.NotFilteredAllowList, + filtering.Rewritten, + filtering.RewrittenAutoHosts, + filtering.RewrittenRule, + ) + case filteringStatusSafeSearch: + return reason == filtering.FilteredSafeSearch + default: + panic(fmt.Errorf("unexpected value %q", c.value)) + } +} diff --git a/internal/stats/unit.go b/internal/stats/unit.go index 99e04429..bf6eaf08 100644 --- a/internal/stats/unit.go +++ b/internal/stats/unit.go @@ -5,13 +5,13 @@ import ( "encoding/binary" "encoding/gob" "fmt" - "sort" "time" "github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/stringutil" "go.etcd.io/bbolt" + "golang.org/x/exp/slices" ) // TODO(a.garipov): Rewrite all of this. Add proper error handling and @@ -180,8 +180,8 @@ func convertMapToSlice(m map[string]uint64, max int) (s []countPair) { s = append(s, countPair{Name: k, Count: v}) } - sort.Slice(s, func(i, j int) bool { - return s[j].Count < s[i].Count + slices.SortFunc(s, func(a, b countPair) (sortsBefore bool) { + return a.Count > b.Count }) if max > len(s) { max = len(s) diff --git a/internal/tools/go.mod b/internal/tools/go.mod index 0b4e6629..d0f5245c 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -9,9 +9,9 @@ require ( github.com/kisielk/errcheck v1.6.3 github.com/kyoh86/looppointer v0.2.1 github.com/securego/gosec/v2 v2.15.0 - golang.org/x/tools v0.6.0 - golang.org/x/vuln v0.0.0-20230213165600-1a019b0c7f30 - honnef.co/go/tools v0.4.1 + golang.org/x/tools v0.6.1-0.20230217175706-3102dad5faf9 + golang.org/x/vuln v0.0.0-20230217204342-b91abcc5ae3c + honnef.co/go/tools v0.4.2 mvdan.cc/gofumpt v0.4.0 mvdan.cc/unparam v0.0.0-20230125043941-70a0ce6e7b95 ) diff --git a/internal/tools/go.sum b/internal/tools/go.sum index bc821c41..e3c5d1ae 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -97,10 +97,10 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20201007032633-0806396f153e/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/vuln v0.0.0-20230213165600-1a019b0c7f30 h1:Q4B8LhSjZGto/+P5REBb4N51ec2H4efRqjBIeJ6nv/Y= -golang.org/x/vuln v0.0.0-20230213165600-1a019b0c7f30/go.mod h1:cBP4HMKv0X+x96j8IJWCKk0eqpakBmmHjKGSSC0NaYE= +golang.org/x/tools v0.6.1-0.20230217175706-3102dad5faf9 h1:IuFp2CklNBim6OdHXn/1P4VoeKt5pA2jcDKWlboqtlQ= +golang.org/x/tools v0.6.1-0.20230217175706-3102dad5faf9/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/vuln v0.0.0-20230217204342-b91abcc5ae3c h1:7/jJkMpaKZMxdyOQ7IP7aPbJQaDk4cOUxtXtWHQ1cSk= +golang.org/x/vuln v0.0.0-20230217204342-b91abcc5ae3c/go.mod h1:LTLnfk/dpXDNKsX6aCg/cI4LyCVnTyrQhgV/yLJuly0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -109,8 +109,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.4.1 h1:HPeloSr0mLOEMOkhT9Au5aeki44kvP6ka3v1xIsM6Zo= -honnef.co/go/tools v0.4.1/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA= +honnef.co/go/tools v0.4.2 h1:6qXr+R5w+ktL5UkwEbPp+fEvfyoMPche6GkOpGHZcLc= +honnef.co/go/tools v0.4.2/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA= mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= mvdan.cc/unparam v0.0.0-20230125043941-70a0ce6e7b95 h1:n/xhncJPSt0YzfOhnyn41XxUdrWQNgmLBG72FE27Fqw= diff --git a/internal/tools/tools.go b/internal/tools/tools.go index 230d6c4b..88f55fa9 100644 --- a/internal/tools/tools.go +++ b/internal/tools/tools.go @@ -1,5 +1,4 @@ //go:build tools -// +build tools package tools diff --git a/internal/updater/check.go b/internal/updater/check.go index 5de7ecfc..a72e58ee 100644 --- a/internal/updater/check.go +++ b/internal/updater/check.go @@ -10,6 +10,9 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/aghalg" "github.com/AdguardTeam/AdGuardHome/internal/aghio" "github.com/AdguardTeam/golibs/errors" + "github.com/AdguardTeam/golibs/log" + "golang.org/x/exp/maps" + "golang.org/x/exp/slices" ) // TODO(a.garipov): Make configurable. @@ -81,9 +84,9 @@ func (u *Updater) parseVersionResponse(data []byte) (VersionInfo, error) { return info, fmt.Errorf("version.json: %w", err) } - for _, v := range versionJSON { + for k, v := range versionJSON { if v == "" { - return info, fmt.Errorf("version.json: invalid data") + return info, fmt.Errorf("version.json: bad data: value for key %q is empty", k) } } @@ -91,9 +94,9 @@ func (u *Updater) parseVersionResponse(data []byte) (VersionInfo, error) { info.Announcement = versionJSON["announcement"] info.AnnouncementURL = versionJSON["announcement_url"] - packageURL, ok := u.downloadURL(versionJSON) - if !ok { - return info, fmt.Errorf("version.json: packageURL not found") + packageURL, key, found := u.downloadURL(versionJSON) + if !found { + return info, fmt.Errorf("version.json: no package URL: key %q not found in object", key) } info.CanAutoUpdate = aghalg.BoolToNullBool(info.NewVersion != u.version) @@ -104,25 +107,40 @@ func (u *Updater) parseVersionResponse(data []byte) (VersionInfo, error) { return info, nil } -// downloadURL returns the download URL for current build. -func (u *Updater) downloadURL(json map[string]string) (string, bool) { - var key string - +// downloadURL returns the download URL for current build as well as its key in +// versionObj. If the key is not found, it additionally prints an informative +// log message. +func (u *Updater) downloadURL(versionObj map[string]string) (dlURL, key string, ok bool) { if u.goarch == "arm" && u.goarm != "" { key = fmt.Sprintf("download_%s_%sv%s", u.goos, u.goarch, u.goarm) - } else if u.goarch == "mips" && u.gomips != "" { + } else if isMIPS(u.goarch) && u.gomips != "" { key = fmt.Sprintf("download_%s_%s_%s", u.goos, u.goarch, u.gomips) - } - - val, ok := json[key] - if !ok { + } else { key = fmt.Sprintf("download_%s_%s", u.goos, u.goarch) - val, ok = json[key] } - if !ok { - return "", false + dlURL, ok = versionObj[key] + if ok { + return dlURL, key, true } - return val, true + keys := maps.Keys(versionObj) + slices.Sort(keys) + log.Error("updater: key %q not found; got keys %q", key, keys) + + return "", key, false +} + +// isMIPS returns true if arch is any MIPS architecture. +func isMIPS(arch string) (ok bool) { + switch arch { + case + "mips", + "mips64", + "mips64le", + "mipsle": + return true + default: + return false + } } diff --git a/internal/updater/updater.go b/internal/updater/updater.go index f042ab3c..a3680506 100644 --- a/internal/updater/updater.go +++ b/internal/updater/updater.go @@ -272,7 +272,7 @@ func (u *Updater) backup(firstRun bool) (err error) { wd := u.workDir err = copySupportingFiles(u.unpackedFiles, wd, u.backupDir) if err != nil { - return fmt.Errorf("copySupportingFiles(%s, %s) failed: %s", wd, u.backupDir, err) + return fmt.Errorf("copySupportingFiles(%s, %s) failed: %w", wd, u.backupDir, err) } return nil @@ -283,7 +283,7 @@ func (u *Updater) backup(firstRun bool) (err error) { func (u *Updater) replace() error { err := copySupportingFiles(u.unpackedFiles, u.updateDir, u.workDir) if err != nil { - return fmt.Errorf("copySupportingFiles(%s, %s) failed: %s", u.updateDir, u.workDir, err) + return fmt.Errorf("copySupportingFiles(%s, %s) failed: %w", u.updateDir, u.workDir, err) } log.Debug("updater: renaming: %s to %s", u.currentExeName, u.backupExeName) diff --git a/scripts/hooks/pre-commit b/scripts/hooks/pre-commit index a76639af..cfb72448 100755 --- a/scripts/hooks/pre-commit +++ b/scripts/hooks/pre-commit @@ -2,10 +2,18 @@ set -e -f -u -# Only show interactive prompts if there is a terminal attached. This -# should work on all of our supported Unix systems. +# This comment is used to simplify checking local copies of the script. +# Bump this number every time a significant change is made to this +# script. +# +# AdGuard-Project-Version: 1 + +# Only show interactive prompts if there a terminal is attached to +# stdout. While this technically doesn't guarantee that reading from +# /dev/tty works, this should work reasonably well on all of our +# supported development systems and in most terminal emulators. is_tty='0' -if [ -e /dev/tty ] +if [ -t '1' ] then is_tty='1' fi diff --git a/scripts/install.sh b/scripts/install.sh index 58fd37fe..8c30268d 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -33,6 +33,19 @@ usage() { exit 2 } +# Function maybe_sudo runs passed command with root privileges if use_sudo isn't +# equal to 0. +# +# TODO(e.burkov): Use everywhere the sudo_cmd isn't quoted. +maybe_sudo() { + if [ "$use_sudo" -eq 0 ] + then + "$@" + else + "$sudo_cmd" "$@" + fi +} + # Function is_command checks if the command exists on the machine. is_command() { command -v "$1" >/dev/null 2>&1 @@ -554,7 +567,14 @@ handle_existing() { # Function install_service tries to install AGH as service. install_service() { - if ( cd "$agh_dir" && ./AdGuardHome -s install ) + # Installing the service as root is required at least on FreeBSD. + use_sudo='0' + if [ "$os" = 'freebsd' ] + then + use_sudo='1' + fi + + if ( cd "$agh_dir" && maybe_sudo ./AdGuardHome -s install ) then return 0 fi diff --git a/scripts/make/Dockerfile b/scripts/make/Dockerfile index a940a155..848c2122 100644 --- a/scripts/make/Dockerfile +++ b/scripts/make/Dockerfile @@ -1,6 +1,6 @@ # A docker file for scripts/make/build-docker.sh. -FROM alpine:3.16 +FROM alpine:3.17 ARG BUILD_DATE ARG VERSION diff --git a/scripts/make/build-release.sh b/scripts/make/build-release.sh index 6194d87b..2884f568 100644 --- a/scripts/make/build-release.sh +++ b/scripts/make/build-release.sh @@ -390,6 +390,16 @@ echo "{ \"selfupdate_min_version\": \"0.0\", " >> "$version_json" +# Add the MIPS* object keys without the "softfloat" part to mitigate the +# consequences of #5373. +# +# TODO(a.garipov): Remove this around fall 2023. +echo " + \"download_linux_mips64\": \"${version_download_url}/AdGuardHome_linux_mips64_softfloat.tar.gz\", + \"download_linux_mips64le\": \"${version_download_url}/AdGuardHome_linux_mips64le_softfloat.tar.gz\", + \"download_linux_mipsle\": \"${version_download_url}/AdGuardHome_linux_mipsle_softfloat.tar.gz\", +" >> "$version_json" + # Same as with checksums above, don't use ls, because files matching one of the # patterns may be absent. ar_files="$( find "./${dist}/" ! -name "${dist}" -prune \( -name '*.tar.gz' -o -name '*.zip' \) )" diff --git a/scripts/make/go-build.sh b/scripts/make/go-build.sh index 7854166c..9f148341 100644 --- a/scripts/make/go-build.sh +++ b/scripts/make/go-build.sh @@ -6,6 +6,11 @@ # only has superficial knowledge of the POSIX shell language and alike. # Experienced readers may find it overly verbose. +# This comment is used to simplify checking local copies of the script. Bump +# this number every time a significant change is made to this script. +# +# AdGuard-Project-Version: 1 + # The default verbosity level is 0. Show every command that is run and every # package that is processed if the caller requested verbosity level greater than # 0. Also show subcommands if the requested verbosity level is greater than 1. @@ -111,16 +116,31 @@ readonly o_flags # must be enabled. if [ "${RACE:-0}" -eq '0' ] then - cgo_enabled='0' + CGO_ENABLED='0' race_flags='--race=0' else - cgo_enabled='1' + CGO_ENABLED='1' race_flags='--race=1' fi -readonly cgo_enabled race_flags +readonly CGO_ENABLED race_flags +export CGO_ENABLED -CGO_ENABLED="$cgo_enabled" GO111MODULE='on' -export CGO_ENABLED GO111MODULE +export GO111MODULE -"$go" build --ldflags "$ldflags" "$race_flags" --trimpath "$o_flags" "$v_flags" "$x_flags" +tags_flags='--tags=' +readonly tags_flags + +if [ "$verbose" -gt '0' ] +then + "$go" env +fi + +"$go" build\ + --ldflags "$ldflags"\ + "$race_flags"\ + "$tags_flags"\ + --trimpath\ + "$o_flags"\ + "$v_flags"\ + "$x_flags" diff --git a/scripts/make/go-deps.sh b/scripts/make/go-deps.sh index 58ba720b..f12d2df7 100644 --- a/scripts/make/go-deps.sh +++ b/scripts/make/go-deps.sh @@ -1,5 +1,10 @@ #!/bin/sh +# This comment is used to simplify checking local copies of the script. Bump +# this number every time a significant change is made to this script. +# +# AdGuard-Project-Version: 1 + verbose="${VERBOSE:-0}" readonly verbose @@ -7,14 +12,14 @@ if [ "$verbose" -gt '1' ] then env set -x - x_flags='-x' + x_flags='-x=1' elif [ "$verbose" -gt '0' ] then set -x - x_flags='' + x_flags='-x=0' else set +x - x_flags='' + x_flags='-x=0' fi readonly x_flags @@ -23,6 +28,4 @@ set -e -f -u go="${GO:-go}" readonly go -# Don't use quotes with flag variables because we want an empty space if those -# aren't set. -"$go" mod download $x_flags +"$go" mod download "$x_flags" diff --git a/scripts/make/go-lint.sh b/scripts/make/go-lint.sh index d26141e6..c9a9c1ae 100644 --- a/scripts/make/go-lint.sh +++ b/scripts/make/go-lint.sh @@ -1,8 +1,13 @@ #!/bin/sh -verbose="${VERBOSE:-0}" +# This comment is used to simplify checking local copies of the script. Bump +# this number every time a significant change is made to this script. +# +# AdGuard-Project-Version: 3 + +verbose="${VERBOSE:-0}" +readonly verbose -# Set verbosity. if [ "$verbose" -gt '0' ] then set -x @@ -16,34 +21,12 @@ else set -e fi -# We don't need glob expansions and we want to see errors about unset variables. set -f -u -# Deferred Helpers - -not_found_msg=' -looks like a binary not found error. -make sure you have installed the linter binaries using: - - $ make go-tools -' -readonly not_found_msg - -# TODO(a.garipov): Put it into a separate script and source it both here and in -# txt-lint.sh? -not_found() { - if [ "$?" -eq '127' ] - then - # Code 127 is the exit status a shell uses when a command or - # a file is not found, according to the Bash Hackers wiki. - # - # See https://wiki.bash-hackers.org/dict/terms/exit_status. - echo "$not_found_msg" 1>&2 - fi -} -trap not_found EXIT +# Source the common helpers, including not_found and run_linter. +. ./scripts/make/helper.sh @@ -52,7 +35,7 @@ trap not_found EXIT go_version="$( "${GO:-go}" version )" readonly go_version -go_min_version='go1.19.6' +go_min_version='go1.19.7' go_version_msg=" warning: your go version (${go_version}) is different from the recommended minimal one (${go_min_version}). if you have the version installed, please set the GO environment variable. @@ -74,7 +57,7 @@ esac -# Simple Analyzers +# Simple analyzers # blocklist_imports is a simple check against unwanted packages. The following # packages are banned: @@ -91,6 +74,8 @@ esac # # See https://github.com/golang/go/issues/45200. # +# * Package sort is replaced by golang.org/x/exp/slices. +# # * Package unsafe is… unsafe. # # * Package golang.org/x/net/context has been moved into stdlib. @@ -101,6 +86,7 @@ blocklist_imports() { -e '[[:space:]]"io/ioutil"$'\ -e '[[:space:]]"log"$'\ -e '[[:space:]]"reflect"$'\ + -e '[[:space:]]"sort"$'\ -e '[[:space:]]"unsafe"$'\ -e '[[:space:]]"golang.org/x/net/context"$'\ -n\ @@ -157,96 +143,65 @@ underscores() { -# Helpers - -# exit_on_output exits with a nonzero exit code if there is anything in the -# command's combined output. -exit_on_output() ( - set +e - - if [ "$VERBOSE" -lt '2' ] - then - set +x - fi - - cmd="$1" - shift - - output="$( "$cmd" "$@" 2>&1 )" - exitcode="$?" - if [ "$exitcode" -ne '0' ] - then - echo "'$cmd' failed with code $exitcode" - fi - - if [ "$output" != '' ] - then - if [ "$*" != '' ] - then - echo "combined output of linter '$cmd $*':" - else - echo "combined output of linter '$cmd':" - fi - - echo "$output" - - if [ "$exitcode" -eq '0' ] - then - exitcode='1' - fi - fi - - return "$exitcode" -) - - - # Checks -exit_on_output blocklist_imports +run_linter -e blocklist_imports -exit_on_output method_const +run_linter -e method_const -exit_on_output underscores +run_linter -e underscores -exit_on_output gofumpt --extra -e -l . +run_linter -e gofumpt --extra -e -l . -# TODO(a.garipov): golint is deprecated, and seems to cause more and more -# issues with each release. Find a suitable replacement. -# -# golint --set_exit_status ./... +# TODO(a.garipov): golint is deprecated, find a suitable replacement. -"$GO" vet ./... +run_linter "$GO" vet ./... -govulncheck ./... +run_linter govulncheck ./... # Apply more lax standards to the code we haven't properly refactored yet. -gocyclo --over 17 ./internal/querylog/ -gocyclo --over 13 ./internal/dhcpd ./internal/filtering/ ./internal/home/ +run_linter gocyclo --over 14 ./internal/querylog/ +run_linter gocyclo --over 13\ + ./internal/dhcpd\ + ./internal/home/\ + ; -# Apply stricter standards to new or somewhat refactored code. -gocyclo --over 10 ./internal/aghio/ ./internal/aghnet/ ./internal/aghos/\ - ./internal/aghtest/ ./internal/dnsforward/ ./internal/filtering/rewrite/\ - ./internal/stats/ ./internal/tools/ ./internal/updater/\ - ./internal/version/ ./scripts/blocked-services/ ./scripts/vetted-filters/\ - ./main.go +# Apply the normal standards to new or somewhat refactored code. +run_linter gocyclo --over 10\ + ./internal/aghio/\ + ./internal/aghnet/\ + ./internal/aghos/\ + ./internal/aghtest/\ + ./internal/dnsforward/\ + ./internal/filtering/\ + ./internal/stats/\ + ./internal/tools/\ + ./internal/updater/\ + ./internal/version/\ + ./scripts/blocked-services/\ + ./scripts/vetted-filters/\ + ./main.go\ + ; -ineffassign ./... +run_linter ineffassign ./... -unparam ./... +run_linter unparam ./... -git ls-files -- '*.go' '*.mod' '*.sh' 'Makefile' | xargs misspell --error +git ls-files -- 'Makefile' '*.go' '*.mod' '*.sh' '*.yaml' '*.yml'\ + | xargs misspell --error -looppointer ./... +run_linter looppointer ./... -nilness ./... +run_linter nilness ./... -exit_on_output shadow --strict ./... +# TODO(a.garipov): Add fieldalignment? + +run_linter -e shadow --strict ./... # TODO(a.garipov): Enable in v0.108.0. -# gosec --quiet ./... +# run_linter gosec --quiet ./... # TODO(a.garipov): Enable --blank? -errcheck --asserts ./... +run_linter errcheck --asserts ./... -staticcheck ./... +run_linter staticcheck ./... diff --git a/scripts/make/go-test.sh b/scripts/make/go-test.sh index e37c7f18..03d2c100 100644 --- a/scripts/make/go-test.sh +++ b/scripts/make/go-test.sh @@ -1,5 +1,10 @@ #!/bin/sh +# This comment is used to simplify checking local copies of the script. Bump +# this number every time a significant change is made to this script. +# +# AdGuard-Project-Version: 1 + verbose="${VERBOSE:-0}" readonly verbose @@ -43,5 +48,12 @@ shuffle_flags='--shuffle=on' timeout_flags="${TIMEOUT_FLAGS:---timeout=90s}" readonly count_flags cover_flags shuffle_flags timeout_flags -"$go" test "$count_flags" "$cover_flags" "$race_flags" "$shuffle_flags" "$timeout_flags"\ - "$x_flags" "$v_flags" ./... +"$go" test\ + "$count_flags"\ + "$cover_flags"\ + "$shuffle_flags"\ + "$race_flags"\ + "$timeout_flags"\ + "$x_flags"\ + "$v_flags"\ + ./... diff --git a/scripts/make/go-tools.sh b/scripts/make/go-tools.sh index a66d5c06..ba512dc3 100644 --- a/scripts/make/go-tools.sh +++ b/scripts/make/go-tools.sh @@ -1,22 +1,27 @@ #!/bin/sh +# This comment is used to simplify checking local copies of the script. Bump +# this number every time a significant change is made to this script. +# +# AdGuard-Project-Version: 2 + verbose="${VERBOSE:-0}" readonly verbose if [ "$verbose" -gt '1' ] then set -x - v_flags='-v' - x_flags='-x' + v_flags='-v=1' + x_flags='-x=1' elif [ "$verbose" -gt '0' ] then set -x - v_flags='-v' - x_flags='' + v_flags='-v=1' + x_flags='-x=0' else set +x - v_flags='' - x_flags='' + v_flags='-v=0' + x_flags='-x=0' fi readonly v_flags x_flags @@ -27,6 +32,25 @@ readonly go # TODO(a.garipov): Add goconst? +# Remove only the actual binaries in the bin/ directory, as developers may add +# their own scripts there. Most commonly, a script named “go” for tools that +# call the go binary and need a particular version. +rm -f\ + bin/errcheck\ + bin/fieldalignment\ + bin/gocyclo\ + bin/gofumpt\ + bin/gosec\ + bin/govulncheck\ + bin/ineffassign\ + bin/looppointer\ + bin/misspell\ + bin/nilness\ + bin/shadow\ + bin/staticcheck\ + bin/unparam\ + ; + # Reset GOARCH and GOOS to make sure we install the tools for the native # architecture even when we're cross-compiling the main binary, and also to # prevent the "cannot install cross-compiled binaries when GOBIN is set" error. @@ -37,14 +61,15 @@ env\ GOWORK='off'\ "$go" install\ --modfile=./internal/tools/go.mod\ - $v_flags\ - $x_flags\ + "$v_flags"\ + "$x_flags"\ github.com/fzipp/gocyclo/cmd/gocyclo\ github.com/golangci/misspell/cmd/misspell\ github.com/gordonklaus/ineffassign\ github.com/kisielk/errcheck\ github.com/kyoh86/looppointer/cmd/looppointer\ github.com/securego/gosec/v2/cmd/gosec\ + golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignment\ golang.org/x/tools/go/analysis/passes/nilness/cmd/nilness\ golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow\ golang.org/x/vuln/cmd/govulncheck\ diff --git a/scripts/make/helper.sh b/scripts/make/helper.sh new file mode 100644 index 00000000..6d7fe778 --- /dev/null +++ b/scripts/make/helper.sh @@ -0,0 +1,84 @@ +#!/bin/sh + +# Common script helpers +# +# This file contains common script helpers. It should be sourced in scripts +# right after the initial environment processing. + +# This comment is used to simplify checking local copies of the script. Bump +# this number every time a remarkable change is made to this script. +# +# AdGuard-Project-Version: 2 + + + +# Deferred helpers + +not_found_msg=' +looks like a binary not found error. +make sure you have installed the linter binaries using: + + $ make go-tools +' +readonly not_found_msg + +not_found() { + if [ "$?" -eq '127' ] + then + # Code 127 is the exit status a shell uses when a command or a file is + # not found, according to the Bash Hackers wiki. + # + # See https://wiki.bash-hackers.org/dict/terms/exit_status. + echo "$not_found_msg" 1>&2 + fi +} +trap not_found EXIT + + + +# Helpers + +# run_linter runs the given linter with two additions: +# +# 1. If the first argument is "-e", run_linter exits with a nonzero exit code +# if there is anything in the command's combined output. +# +# 2. In any case, run_linter adds the program's name to its combined output. +run_linter() ( + set +e + + if [ "$VERBOSE" -lt '2' ] + then + set +x + fi + + cmd="${1:?run_linter: provide a command}" + shift + + exit_on_output='0' + if [ "$cmd" = '-e' ] + then + exit_on_output='1' + cmd="${1:?run_linter: provide a command}" + shift + fi + + readonly cmd + + output="$( "$cmd" "$@" )" + exitcode="$?" + + readonly output + + if [ "$output" != '' ] + then + echo "$output" | sed -e "s/^/${cmd}: /" + + if [ "$exitcode" -eq '0' ] && [ "$exit_on_output" -eq '1' ] + then + exitcode='1' + fi + fi + + return "$exitcode" +) diff --git a/scripts/make/txt-lint.sh b/scripts/make/txt-lint.sh index aa959506..23434e4e 100644 --- a/scripts/make/txt-lint.sh +++ b/scripts/make/txt-lint.sh @@ -1,9 +1,13 @@ #!/bin/sh +# This comment is used to simplify checking local copies of the script. Bump +# this number every time a remarkable change is made to this script. +# +# AdGuard-Project-Version: 2 + verbose="${VERBOSE:-0}" readonly verbose -# Set verbosity. if [ "$verbose" -gt '0' ] then set -x @@ -20,31 +24,9 @@ fi # We don't need glob expansions and we want to see errors about unset variables. set -f -u - - -# Deferred Helpers - -not_found_msg=' -looks like a binary not found error. -make sure you have installed the linter binaries using: - - $ make go-tools -' -readonly not_found_msg - -# TODO(a.garipov): Put it into a separate script and source it both here and in -# go-lint.sh? -not_found() { - if [ "$?" -eq '127' ] - then - # Code 127 is the exit status a shell uses when a command or - # a file is not found, according to the Bash Hackers wiki. - # - # See https://wiki.bash-hackers.org/dict/terms/exit_status. - echo "$not_found_msg" 1>&2 - fi -} -trap not_found EXIT +# Source the common helpers, including not_found. +. ./scripts/make/helper.sh git ls-files -- '*.md' '*.yaml' '*.yml' 'client/src/__locales/en.json'\ - | xargs misspell --error + | xargs misspell --error\ + | sed -e 's/^/misspell: /'