From 01c8a5368b44e5068c1f7409a96239f26209e639 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Mon, 5 Feb 2024 23:01:42 -0800 Subject: [PATCH 01/60] swap embedded user script with CSS one --- .../ClickToLoadUserScript.swift | 116 +++++++++--------- .../FBProtectionTabExtension.swift | 9 +- DuckDuckGo/Tab/UserScripts/UserScripts.swift | 5 +- Submodules/privacy-reference-tests | 2 +- 4 files changed, 69 insertions(+), 63 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift b/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift index ef06cf4216..991943c2b2 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift @@ -17,77 +17,83 @@ // import WebKit +import Common import UserScript -import BrowserServicesKit protocol ClickToLoadUserScriptDelegate: AnyObject { - func clickToLoadUserScriptAllowFB(_ script: UserScript, replyHandler: @escaping (Bool) -> Void) + func clickToLoadUserScriptAllowFB() -> Bool } -final class ClickToLoadUserScript: NSObject, UserScript, WKScriptMessageHandlerWithReply { +final class ClickToLoadUserScript: NSObject, Subfeature { - var injectionTime: WKUserScriptInjectionTime { .atDocumentEnd } - var forMainFrameOnly: Bool { false } - var messageNames: [String] { ["getImage", "enableFacebook", "initClickToLoad" ] } - let source: String + weak var broker: UserScriptMessageBroker? + weak var webView: WKWebView? - init(scriptSourceProvider: ScriptSourceProviding) { - self.source = scriptSourceProvider.clickToLoadSource - } + var devMode = false weak var delegate: ClickToLoadUserScriptDelegate? - @MainActor - func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage, - replyHandler: @escaping (Any?, String?) -> Void) { - if message.name == "initClickToLoad" { - let host = message.body as? String - let controller = userContentController as? UserContentController - let privacyConfigurationManager = controller!.privacyConfigurationManager - let privacyConfiguration = privacyConfigurationManager.privacyConfig - - let locallyProtected = privacyConfiguration.isProtected(domain: host) - let featureEnabled = privacyConfiguration.isFeature(.clickToPlay, enabledForDomain: host) - if locallyProtected && featureEnabled { - replyHandler(true, nil) - } else { - replyHandler(false, nil) - } - return - } - if message.name == "enableFacebook" { - guard let delegate = delegate else { return } - delegate.clickToLoadUserScriptAllowFB(self) { _ in - guard let isLogin = message.body as? Bool else { - replyHandler(nil, nil) - return - } - - replyHandler(isLogin, nil) - } - - return - } + // this isn't an issue to be set to 'all' because the page + public let messageOriginPolicy: MessageOriginPolicy = .all + public let featureName: String = "clickToLoad" - var image: String + // MARK: - Subfeature - guard let arg = message.body as? String else { - replyHandler(nil, nil) - return - } - if message.name == "getImage" { - image = ClickToLoadModel.getImage[arg]! - } else { - assertionFailure("Uknown message type") - replyHandler(nil, nil) - return + public func with(broker: UserScriptMessageBroker) { + self.broker = broker + } + + // MARK: - MessageNames + + enum MessageNames: String, CaseIterable { + case getClickToLoadState + case displayClickToLoadPlaceholders + case unblockClickToLoadContent + case updateFacebookCTLBreakageFlags + case addDebugFlag + } + + public func handler(forMethodNamed methodName: String) -> Handler? { + switch MessageNames(rawValue: methodName) { + case .getClickToLoadState: + return handleGetClickToLoadState + case .unblockClickToLoadContent: + return handleUnblockClickToLoadContent + case .updateFacebookCTLBreakageFlags: + return nil + case .addDebugFlag: + return nil + default: + assertionFailure("ClickToLoadUserScript: Failed to parse User Script message: \(methodName)") + return nil } - replyHandler(image, nil) } - func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { - assertionFailure("SHOULDN'T BE HERE!") + private func handleGetClickToLoadState(params: Any, message: UserScriptMessage) -> Encodable? { + return [ + "devMode": devMode, + "youtubePreviewsEnabled": false + ] + } + + private func handleUnblockClickToLoadContent(params: Any, message: UserScriptMessage) -> Encodable? { + struct UnblockMessage: Decodable { + let action: String + let isLogin: Bool + let isSurrogateLogin: Bool + let entity: String + } + + guard let delegate = delegate else { return false } + + // only worry about CTL FB for now + return delegate.clickToLoadUserScriptAllowFB() } + public func displayClickToLoadPlaceholders() { + if let webView = webView { + broker?.push(method: MessageNames.displayClickToLoadPlaceholders.rawValue, params: ["ruleAction": ["block"]], for: self, into: webView) + } + } } diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index fdc188e6e0..db00573d5c 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -90,16 +90,15 @@ extension FBProtectionTabExtension { extension FBProtectionTabExtension: ClickToLoadUserScriptDelegate { - func clickToLoadUserScriptAllowFB(_ script: UserScript, replyHandler: @escaping (Bool) -> Void) { + func clickToLoadUserScriptAllowFB() -> Bool { guard self.fbBlockingEnabled else { - replyHandler(true) - return + return true } if setFBProtection(enabled: false) { - replyHandler(true) + return true } else { - replyHandler(false) + return false } } } diff --git a/DuckDuckGo/Tab/UserScripts/UserScripts.swift b/DuckDuckGo/Tab/UserScripts/UserScripts.swift index 1bc9443977..c6a6adde83 100644 --- a/DuckDuckGo/Tab/UserScripts/UserScripts.swift +++ b/DuckDuckGo/Tab/UserScripts/UserScripts.swift @@ -47,7 +47,7 @@ final class UserScripts: UserScriptsProvider { let sslErrorPageUserScript: SSLErrorPageUserScript? init(with sourceProvider: ScriptSourceProviding) { - clickToLoadScript = ClickToLoadUserScript(scriptSourceProvider: sourceProvider) + clickToLoadScript = ClickToLoadUserScript() contentBlockerRulesScript = ContentBlockerRulesUserScript(configuration: sourceProvider.contentBlockerRulesConfig!) surrogatesScript = SurrogatesUserScript(configuration: sourceProvider.surrogatesConfig!) let isGPCEnabled = WebTrackingProtectionPreferences.shared.isGPCEnabled @@ -77,6 +77,8 @@ final class UserScripts: UserScriptsProvider { userScripts.append(autoconsentUserScript) + contentScopeUserScript.registerSubfeature(delegate: clickToLoadScript) + if let youtubeOverlayScript { contentScopeUserScriptIsolated.registerSubfeature(delegate: youtubeOverlayScript) } @@ -109,7 +111,6 @@ final class UserScripts: UserScriptsProvider { pageObserverScript, printingUserScript, hoverUserScript, - clickToLoadScript, contentScopeUserScript, contentScopeUserScriptIsolated, autofillScript diff --git a/Submodules/privacy-reference-tests b/Submodules/privacy-reference-tests index a603ff9af2..6b7ad1e7f1 160000 --- a/Submodules/privacy-reference-tests +++ b/Submodules/privacy-reference-tests @@ -1 +1 @@ -Subproject commit a603ff9af22ca3ff7ce2e7ffbfe18c447d9f23e8 +Subproject commit 6b7ad1e7f15270f9dfeb58a272199f4d57c3eb22 From cf561f17b339e84d8f529c1e3153f552c52cbdf4 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Tue, 6 Feb 2024 20:00:44 -0800 Subject: [PATCH 02/60] fire "displayCLickToLoadPlaceholders" on load completion --- .../ContentBlocker/ClickToLoadUserScript.swift | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift b/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift index 991943c2b2..ed7d20470b 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift @@ -25,7 +25,7 @@ protocol ClickToLoadUserScriptDelegate: AnyObject { func clickToLoadUserScriptAllowFB() -> Bool } -final class ClickToLoadUserScript: NSObject, Subfeature { +final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { weak var broker: UserScriptMessageBroker? weak var webView: WKWebView? @@ -48,7 +48,6 @@ final class ClickToLoadUserScript: NSObject, Subfeature { enum MessageNames: String, CaseIterable { case getClickToLoadState - case displayClickToLoadPlaceholders case unblockClickToLoadContent case updateFacebookCTLBreakageFlags case addDebugFlag @@ -71,6 +70,9 @@ final class ClickToLoadUserScript: NSObject, Subfeature { } private func handleGetClickToLoadState(params: Any, message: UserScriptMessage) -> Encodable? { + webView = message.messageWebView + webView?.navigationDelegate = self as WKNavigationDelegate + return [ "devMode": devMode, "youtubePreviewsEnabled": false @@ -91,9 +93,13 @@ final class ClickToLoadUserScript: NSObject, Subfeature { return delegate.clickToLoadUserScriptAllowFB() } + func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + displayClickToLoadPlaceholders() + } + public func displayClickToLoadPlaceholders() { if let webView = webView { - broker?.push(method: MessageNames.displayClickToLoadPlaceholders.rawValue, params: ["ruleAction": ["block"]], for: self, into: webView) + broker?.push(method: "displayClickToLoadPlaceholders", params: ["ruleAction": ["block"]], for: self, into: webView) } } } From 98cb9c5e990036424d2107f3421ba99cc5f7b9a7 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Sun, 11 Feb 2024 20:37:24 -0800 Subject: [PATCH 03/60] disable old CTL user script --- .../ContentBlocker/ScriptSourceProviding.swift | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift index 979ecaf469..f245a23f87 100644 --- a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift +++ b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift @@ -156,20 +156,7 @@ struct ScriptSourceProvider: ScriptSourceProviding { } private func buildClickToLoadSource() -> String { - // For now bundle FB SDK and associated config, as they diverged from the extension - let fbSDK = loadTextFile("fb-sdk", "js") - var config = loadTextFile("clickToLoadConfig", "json")! - if #unavailable(OSX 11) { // disable CTL for Catalina and earlier - config = "{}" - } - let proximaRegFont = loadFont("ProximaNova-Reg-webfont", "woff2") - let proximaBoldFont = loadFont("ProximaNova-Bold-webfont", "woff2") - return ContentBlockerRulesUserScript.loadJS("clickToLoad", from: .main, withReplacements: [ - "${fb-sdk.js}": fbSDK!, - "${clickToLoadConfig.json}": config, - "${proximaRegFont}": proximaRegFont!, - "${proximaBoldFont}": proximaBoldFont! - ]) + return "" } } From 8a3f6d6e916782d962d2f2715f82a4ef82ce7d73 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Sun, 11 Feb 2024 20:38:07 -0800 Subject: [PATCH 04/60] test - trigger CTL on FB tracker match --- .../Tab/TabExtensions/ContentBlockingTabExtension.swift | 3 +++ DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift index ad5e60576e..e05df904dc 100644 --- a/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift @@ -139,6 +139,9 @@ extension ContentBlockingTabExtension: ContentBlockerRulesUserScriptDelegate { func contentBlockerRulesUserScript(_ script: ContentBlockerRulesUserScript, detectedTracker tracker: DetectedRequest) { trackersSubject.send(DetectedTracker(request: tracker, type: .tracker)) + if tracker.state == BlockingState.blocked && tracker.ownerName == "Facebook, Inc." { + fbBlockingEnabledProvider.trackerDetected() + } } func contentBlockerRulesUserScript(_ script: ContentBlockerRulesUserScript, detectedThirdPartyRequest request: DetectedRequest) { diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index db00573d5c..3702a9fed3 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -44,6 +44,10 @@ final class FBProtectionTabExtension { }.store(in: &cancellables) } + public func trackerDetected() { + print("FB tracker blocked") +// clickToLoadUserScriptPublisher.displayClickToLoadPlaceholders() + } } extension FBProtectionTabExtension { @@ -114,6 +118,8 @@ extension FBProtectionTabExtension: NavigationResponder { protocol FbBlockingEnabledProvider { var fbBlockingEnabled: Bool { get } + + func trackerDetected() } protocol FBProtectionExtensionProtocol: AnyObject, FbBlockingEnabledProvider, NavigationResponder { From 367f0315e9fe308d966dd2c3418bc242d47bf66b Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Mon, 12 Feb 2024 17:10:42 -0800 Subject: [PATCH 05/60] switch to isolated scope, hook up overlay trigger --- .../ClickToLoadUserScript.swift | 21 +++++++++++-------- .../FBProtectionTabExtension.swift | 5 +++-- DuckDuckGo/Tab/UserScripts/UserScripts.swift | 2 +- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift b/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift index ed7d20470b..fcf0c43b74 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift @@ -30,10 +30,14 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { weak var broker: UserScriptMessageBroker? weak var webView: WKWebView? - var devMode = false - weak var delegate: ClickToLoadUserScriptDelegate? +#if DEBUG + var devMode: Bool = true +#else + var devMode: Bool = false +#endif + // this isn't an issue to be set to 'all' because the page public let messageOriginPolicy: MessageOriginPolicy = .all public let featureName: String = "clickToLoad" @@ -60,9 +64,9 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { case .unblockClickToLoadContent: return handleUnblockClickToLoadContent case .updateFacebookCTLBreakageFlags: - return nil + return handleDebugFlagsMock case .addDebugFlag: - return nil + return handleDebugFlagsMock default: assertionFailure("ClickToLoadUserScript: Failed to parse User Script message: \(methodName)") return nil @@ -71,8 +75,6 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { private func handleGetClickToLoadState(params: Any, message: UserScriptMessage) -> Encodable? { webView = message.messageWebView - webView?.navigationDelegate = self as WKNavigationDelegate - return [ "devMode": devMode, "youtubePreviewsEnabled": false @@ -93,13 +95,14 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { return delegate.clickToLoadUserScriptAllowFB() } - func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { - displayClickToLoadPlaceholders() + private func handleDebugFlagsMock(params: Any, message: UserScriptMessage) -> Encodable? { + // breakage flags not supported on Mac yet + return nil } public func displayClickToLoadPlaceholders() { if let webView = webView { - broker?.push(method: "displayClickToLoadPlaceholders", params: ["ruleAction": ["block"]], for: self, into: webView) + broker?.push(method: "displayClickToLoadPlaceholders", params: nil, for: self, into: webView) } } } diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index 3702a9fed3..b2d1b043dc 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -26,6 +26,7 @@ final class FBProtectionTabExtension { private let privacyConfigurationManager: PrivacyConfigurationManaging private weak var userContentController: UserContentControllerProtocol? + private weak var clickToLoadUserScript: ClickToLoadUserScript? private var cancellables = Set() @@ -41,12 +42,13 @@ final class FBProtectionTabExtension { }.store(in: &cancellables) clickToLoadUserScriptPublisher.sink { [weak self] clickToLoadUserScript in clickToLoadUserScript?.delegate = self + self?.clickToLoadUserScript = clickToLoadUserScript }.store(in: &cancellables) } public func trackerDetected() { print("FB tracker blocked") -// clickToLoadUserScriptPublisher.displayClickToLoadPlaceholders() + self.clickToLoadUserScript?.displayClickToLoadPlaceholders() } } @@ -118,7 +120,6 @@ extension FBProtectionTabExtension: NavigationResponder { protocol FbBlockingEnabledProvider { var fbBlockingEnabled: Bool { get } - func trackerDetected() } diff --git a/DuckDuckGo/Tab/UserScripts/UserScripts.swift b/DuckDuckGo/Tab/UserScripts/UserScripts.swift index c6a6adde83..76267b5462 100644 --- a/DuckDuckGo/Tab/UserScripts/UserScripts.swift +++ b/DuckDuckGo/Tab/UserScripts/UserScripts.swift @@ -77,7 +77,7 @@ final class UserScripts: UserScriptsProvider { userScripts.append(autoconsentUserScript) - contentScopeUserScript.registerSubfeature(delegate: clickToLoadScript) + contentScopeUserScriptIsolated.registerSubfeature(delegate: clickToLoadScript) if let youtubeOverlayScript { contentScopeUserScriptIsolated.registerSubfeature(delegate: youtubeOverlayScript) From e19f103b8dc05514ef7a5c24211585165616dbc4 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Sat, 2 Mar 2024 14:51:02 -0800 Subject: [PATCH 06/60] use v6 TDS, updated config Note temp remote config URL for testing purposes --- .../AppConfigurationURLProvider.swift | 4 +- DuckDuckGo/ContentBlocker/macos-config.json | 10 +- DuckDuckGo/ContentBlocker/trackerData.json | 304 +++++++++++------- 3 files changed, 202 insertions(+), 116 deletions(-) diff --git a/DuckDuckGo/Application/AppConfigurationURLProvider.swift b/DuckDuckGo/Application/AppConfigurationURLProvider.swift index 8db6e037fe..2d163c48d6 100644 --- a/DuckDuckGo/Application/AppConfigurationURLProvider.swift +++ b/DuckDuckGo/Application/AppConfigurationURLProvider.swift @@ -54,9 +54,9 @@ struct AppConfigurationURLProvider: ConfigurationURLProviding { case .bloomFilterBinary: return URL(string: "https://staticcdn.duckduckgo.com/https/https-mobile-v2-bloom.bin")! case .bloomFilterSpec: return URL(string: "https://staticcdn.duckduckgo.com/https/https-mobile-v2-bloom-spec.json")! case .bloomFilterExcludedDomains: return URL(string: "https://staticcdn.duckduckgo.com/https/https-mobile-v2-false-positives.json")! - case .privacyConfiguration: return customPrivacyConfigurationUrl ?? URL(string: "https://staticcdn.duckduckgo.com/trackerblocking/config/v4/macos-config.json")! + case .privacyConfiguration: return customPrivacyConfigurationUrl ?? URL(string: "https://royal-thankful-weight.glitch.me/macos-config.json")! case .surrogates: return URL(string: "https://staticcdn.duckduckgo.com/surrogates.txt")! - case .trackerDataSet: return URL(string: "https://staticcdn.duckduckgo.com/trackerblocking/v5/current/macos-tds.json")! + case .trackerDataSet: return URL(string: "https://staticcdn.duckduckgo.com/trackerblocking/v6/current/macos-tds.json")! // In archived repo, to be refactored shortly (https://staticcdn.duckduckgo.com/useragents/social_ctp_configuration.json) case .FBConfig: return URL(string: "https://staticcdn.duckduckgo.com/useragents/")! } diff --git a/DuckDuckGo/ContentBlocker/macos-config.json b/DuckDuckGo/ContentBlocker/macos-config.json index 39163097c1..5f923e9e7a 100644 --- a/DuckDuckGo/ContentBlocker/macos-config.json +++ b/DuckDuckGo/ContentBlocker/macos-config.json @@ -932,7 +932,7 @@ "ruleActions": [ "block-ctl-fb" ], - "state": "disabled" + "state": "enabled" }, "Youtube": { "ruleActions": [ @@ -941,8 +941,8 @@ "state": "disabled" } }, - "state": "disabled", - "hash": "770f7ae0f752e976764771bccec352b2" + "state": "enabled", + "hash": "36e8971fa9bb204b78a5929a14a108dd" }, "clickToPlay": { "exceptions": [ @@ -959,7 +959,7 @@ "ruleActions": [ "block-ctl-fb" ], - "state": "disabled" + "state": "enabled" } }, "state": "enabled", @@ -8621,4 +8621,4 @@ } }, "unprotectedTemporary": [] -} \ No newline at end of file +} diff --git a/DuckDuckGo/ContentBlocker/trackerData.json b/DuckDuckGo/ContentBlocker/trackerData.json index f7618c909f..b9676bf1e7 100644 --- a/DuckDuckGo/ContentBlocker/trackerData.json +++ b/DuckDuckGo/ContentBlocker/trackerData.json @@ -47,36 +47,6 @@ ], "default": "block" }, - "1gr.cz": { - "domain": "1gr.cz", - "owner": { - "name": "MAFRA, a.s.", - "displayName": "MAFRA" - }, - "prevalence": 0.0000885, - "fingerprinting": 3, - "cookies": 0.0000545, - "categories": [], - "default": "ignore", - "rules": [ - { - "rule": "1gr\\.cz\\/js\\/uni\\/uni\\.js", - "fingerprinting": 2, - "cookies": 0.000034 - }, - { - "rule": "1gr\\.cz\\/js\\/uni\\/paticka\\.js", - "fingerprinting": 2, - "cookies": 0 - }, - { - "rule": "1gr\\.cz\\/mafra\\/SETSV\\/TTL=300\\/LASTPBFCID=160547\\/append", - "fingerprinting": 0, - "cookies": 0, - "comment": "pixel" - } - ] - }, "1rx.io": { "domain": "1rx.io", "owner": { @@ -7247,6 +7217,34 @@ } ] }, + "d1y068gyog18cq.cloudfront.net": { + "domain": "d1y068gyog18cq.cloudfront.net", + "owner": { + "name": "Amazon Technologies, Inc.", + "displayName": "Amazon.com", + "privacyPolicy": "https://www.amazon.com/gp/help/customer/display.html?nodeId=468496", + "url": "http://www.amazon.com/" + }, + "prevalence": 0.0000272, + "fingerprinting": 2, + "cookies": 0.0000272, + "categories": [ + "Content Delivery" + ], + "default": "ignore", + "rules": [ + { + "rule": "d1y068gyog18cq\\.cloudfront\\.net\\/psjhjhsb\\.js", + "fingerprinting": 2, + "cookies": 0.0000136 + }, + { + "rule": "d1y068gyog18cq\\.cloudfront\\.net\\/sp\\.js", + "fingerprinting": 2, + "cookies": 0.0000136 + } + ] + }, "d214hhm15p4t1d.cloudfront.net": { "domain": "d214hhm15p4t1d.cloudfront.net", "owner": { @@ -9712,28 +9710,15 @@ "cookies": 0.000034 }, { - "rule": "facebook\\.com\\/tr\\/", - "fingerprinting": 0, - "cookies": 0.000538, - "comment": "pixel" - }, - { - "rule": "facebook\\.com\\/tr", - "fingerprinting": 0, - "cookies": 0.0000272, - "comment": "pixel" - }, - { - "rule": "facebook\\.com\\/ajax\\/bz", - "fingerprinting": 0, - "cookies": 0, - "comment": "pixel" + "rule": "facebook\\.com/[a-z_A-Z]+/sdk\\.js", + "surrogate": "fb-sdk.js", + "action": "block-ctl-fb", + "fingerprinting": 1, + "cookies": 0 }, { - "rule": "facebook\\.com\\/123450\\/picture", - "fingerprinting": 0, - "cookies": 0, - "comment": "pixel" + "rule": "facebook\\.com/", + "action": "block-ctl-fb" } ] }, @@ -9764,11 +9749,25 @@ ], "default": "ignore", "rules": [ + { + "rule": "facebook\\.net/.*/all\\.js", + "surrogate": "fb-sdk.js", + "action": "block-ctl-fb", + "fingerprinting": 1, + "cookies": 0.0000408 + }, { "rule": "facebook\\.net/.*/fbevents\\.js", "fingerprinting": 1, "cookies": 0.108 }, + { + "rule": "facebook\\.net/[a-z_A-Z]+/sdk\\.js", + "surrogate": "fb-sdk.js", + "action": "block-ctl-fb", + "fingerprinting": 1, + "cookies": 0.000334 + }, { "rule": "facebook\\.net/signals/config/", "fingerprinting": 1, @@ -9795,16 +9794,8 @@ "cookies": 0 }, { - "rule": "facebook\\.net\\/\\/log\\/error", - "fingerprinting": 0, - "cookies": 0, - "comment": "pixel" - }, - { - "rule": "facebook\\.net\\/en_US\\/fp\\.js", - "fingerprinting": 0, - "cookies": 0, - "comment": "pixel" + "rule": "facebook\\.net/", + "action": "block-ctl-fb" } ] }, @@ -11974,31 +11965,6 @@ } ] }, - "gsitrix.com": { - "domain": "gsitrix.com", - "owner": { - "name": "GP One GmbH", - "displayName": "GP One" - }, - "prevalence": 0.0000953, - "fingerprinting": 3, - "cookies": 0.0000953, - "categories": [], - "default": "ignore", - "rules": [ - { - "rule": "gsitrix\\.com\\/page\\/", - "fingerprinting": 3, - "cookies": 0.0000545 - }, - { - "rule": "gsitrix\\.com\\/js\\/ax\\.php", - "fingerprinting": 0, - "cookies": 0, - "comment": "pixel" - } - ] - }, "gsspat.jp": { "domain": "gsspat.jp", "owner": { @@ -28146,6 +28112,25 @@ "categories": [], "default": "block" }, + "uio.no": { + "domain": "uio.no", + "owner": { + "name": "Universitetet i Oslo", + "displayName": "Universitetet i Oslo" + }, + "prevalence": 0.00000681, + "fingerprinting": 2, + "cookies": 0.00000681, + "categories": [], + "default": "ignore", + "rules": [ + { + "rule": "uio\\.no\\/js\\/analytics\\/v3\\/analytics\\.js", + "fingerprinting": 2, + "cookies": 0.0000136 + } + ] + }, "uk-v1.edgekey.net": { "domain": "uk-v1.edgekey.net", "owner": { @@ -28946,6 +28931,25 @@ } ] }, + "visilabs.net": { + "domain": "visilabs.net", + "owner": { + "name": "Portakal Yazilim Danismanlik Reklamcilik ve Yayincilik San. Tic. A.S.", + "displayName": "Portakal Yazilim Danismanlik Reklamcilik ve Yayincilik San. Tic" + }, + "prevalence": 0.0000545, + "fingerprinting": 2, + "cookies": 0.0000545, + "categories": [], + "default": "ignore", + "rules": [ + { + "rule": "visilabs\\.net/.*/Visilabs\\.min\\.js", + "fingerprinting": 2, + "cookies": 0.0000136 + } + ] + }, "visualwebsiteoptimizer.com": { "domain": "visualwebsiteoptimizer.com", "owner": { @@ -30901,7 +30905,23 @@ "Content Delivery", "Embedded Content" ], - "default": "ignore" + "default": "ignore", + "rules": [ + { + "rule": "youtube-nocookie\\.com/iframe_api", + "surrogate": "youtube-iframe-api.js", + "action": "block-ctl-yt" + }, + { + "rule": "youtube-nocookie\\.com/player_api", + "surrogate": "youtube-iframe-api.js", + "action": "block-ctl-yt" + }, + { + "rule": "youtube-nocookie\\.com/", + "action": "block-ctl-yt" + } + ] }, "youtube.com": { "domain": "youtube.com", @@ -30919,7 +30939,23 @@ "Content Delivery", "Embedded Content" ], - "default": "ignore" + "default": "ignore", + "rules": [ + { + "rule": "youtube\\.com/iframe_api", + "surrogate": "youtube-iframe-api.js", + "action": "block-ctl-yt" + }, + { + "rule": "youtube\\.com/player_api", + "surrogate": "youtube-iframe-api.js", + "action": "block-ctl-yt" + }, + { + "rule": "youtube\\.com/", + "action": "block-ctl-yt" + } + ] }, "zemanta.com": { "domain": "zemanta.com", @@ -31236,6 +31272,25 @@ } ] }, + "gov.bc.ca": { + "domain": "gov.bc.ca", + "owner": { + "name": "Government of the Province of British Columbia", + "displayName": "Government of the Province of British Columbia" + }, + "prevalence": 0.000703, + "fingerprinting": 2, + "cookies": 0.000502, + "categories": [], + "default": "ignore", + "rules": [ + { + "rule": "gov\\.bc\\.ca\\/StaticWebResources\\/static\\/sp\\/sp-2-14-0\\.js", + "fingerprinting": 2, + "cookies": 0.000502 + } + ] + }, "google.ch": { "domain": "google.ch", "owner": { @@ -31299,6 +31354,25 @@ } ] }, + "framasoft.org": { + "domain": "framasoft.org", + "owner": { + "name": "Alexis Kauffmann", + "displayName": "Alexis Kauffmann" + }, + "prevalence": 0.000402, + "fingerprinting": 2, + "cookies": 0, + "categories": [], + "default": "ignore", + "rules": [ + { + "rule": "framasoft\\.org\\/nav\\/nav\\.js", + "fingerprinting": 2, + "cookies": 0 + } + ] + }, "veoxa.com": { "domain": "veoxa.com", "owner": { @@ -39470,16 +39544,6 @@ "prevalence": 0.0007, "displayName": "CleverDATA" }, - "MAFRA, a.s.": { - "domains": [ - "1gr.cz", - "emimino.cz", - "idnes.cz", - "lidovky.cz" - ], - "prevalence": 0.0054, - "displayName": "MAFRA" - }, "RhythmOne": { "domains": [ "1rx.io", @@ -44183,13 +44247,6 @@ "prevalence": 0.0143, "displayName": "GrowSumo" }, - "GP One GmbH": { - "domains": [ - "gsitrix.com" - ], - "prevalence": 0.0095, - "displayName": "GP One" - }, "buySAFE Inc": { "domains": [ "buysafe.com", @@ -48541,6 +48598,13 @@ "prevalence": 0, "displayName": "uidapi.com" }, + "Universitetet i Oslo": { + "domains": [ + "uio.no" + ], + "prevalence": 0.0007, + "displayName": "Universitetet i Oslo" + }, "SEOPULT LTD": { "domains": [ "getsale.io", @@ -48693,6 +48757,13 @@ "prevalence": 0.282, "displayName": "Soluciones Corporativas IP" }, + "Portakal Yazilim Danismanlik Reklamcilik ve Yayincilik San. Tic. A.S.": { + "domains": [ + "visilabs.net" + ], + "prevalence": 0.0054, + "displayName": "Portakal Yazilim Danismanlik Reklamcilik ve Yayincilik San. Tic" + }, "Wingify": { "domains": [ "pushcrew.com", @@ -49204,6 +49275,14 @@ "prevalence": 0.0041, "displayName": "Telstra" }, + "Government of the Province of British Columbia": { + "domains": [ + "gov.bc.ca", + "healthlinkbc.ca" + ], + "prevalence": 0.0007, + "displayName": "Government of the Province of British Columbia" + }, "opencmp.net": { "domains": [ "opencmp.net" @@ -49218,6 +49297,13 @@ "prevalence": 0, "displayName": "axept.io" }, + "Alexis Kauffmann": { + "domains": [ + "framasoft.org" + ], + "prevalence": 0.0402, + "displayName": "Alexis Kauffmann" + }, "J S WEB PRODUCTION": { "domains": [ "ad2perf.com", @@ -50308,10 +50394,6 @@ "datacamp.com": "DataCamp Limited", "rdocumentation.org": "DataCamp Limited", "1dmp.io": "CleverDATA LLC", - "1gr.cz": "MAFRA, a.s.", - "emimino.cz": "MAFRA, a.s.", - "idnes.cz": "MAFRA, a.s.", - "lidovky.cz": "MAFRA, a.s.", "1rx.io": "RhythmOne", "allmovie.com": "RhythmOne", "allmusic.com": "RhythmOne", @@ -53932,7 +54014,6 @@ "tvfanatic.com": "Mediavine, Inc.", "growsumo.com": "GrowSumo Inc.", "grsm.io": "GrowSumo Inc.", - "gsitrix.com": "GP One GmbH", "buysafe.com": "buySAFE Inc", "guarantee-cdn.com": "buySAFE Inc", "gumgum.com": "GumGum", @@ -55884,6 +55965,7 @@ "ubembed.com": "Unbounce", "unbounce.com": "Unbounce", "uidapi.com": "uidapi.com", + "uio.no": "Universitetet i Oslo", "getsale.io": "SEOPULT LTD", "ulogin.ru": "SEOPULT LTD", "unbxdapi.com": "Unbxd Software Private Limited", @@ -55922,6 +56004,7 @@ "videohub.tv": "Tremor Video DSP", "eleconomista.es": "Soluciones Corporativas IP, SL", "vidoomy.com": "Soluciones Corporativas IP, SL", + "visilabs.net": "Portakal Yazilim Danismanlik Reklamcilik ve Yayincilik San. Tic. A.S.", "pushcrew.com": "Wingify", "visualwebsiteoptimizer.com": "Wingify", "vwo.com": "Wingify", @@ -56127,8 +56210,11 @@ "shop.pe": "Add Shoppers", "telstra.com": "Telstra Corporation Limited", "telstra.com.au": "Telstra Corporation Limited", + "gov.bc.ca": "Government of the Province of British Columbia", + "healthlinkbc.ca": "Government of the Province of British Columbia", "opencmp.net": "opencmp.net", "axept.io": "axept.io", + "framasoft.org": "Alexis Kauffmann", "ad2perf.com": "J S WEB PRODUCTION", "moxielinks.com": "J S WEB PRODUCTION", "veoxa.com": "J S WEB PRODUCTION", From ae481dcba809f0682496ccc0671fe23eeeb4e162 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Sat, 2 Mar 2024 14:52:22 -0800 Subject: [PATCH 07/60] move CTL code to subfolder --- DuckDuckGo.xcodeproj/project.pbxproj | 797 +++++++++++++++++- .../{ => ClickToLoad}/ClickToLoadModel.swift | 1 + .../ClickToLoad/ClickToLoadUserScript.swift | 306 +++++++ .../{ => ClickToLoad}/clickToLoad.js | 6 +- .../{ => ClickToLoad}/clickToLoadConfig.json | 0 .../{ => ClickToLoad}/fb-sdk.js | 1 + .../{ => ClickToLoad}/fb-tds.json | 0 .../ClickToLoadUserScript.swift | 108 --- 8 files changed, 1104 insertions(+), 115 deletions(-) rename DuckDuckGo/ContentBlocker/{ => ClickToLoad}/ClickToLoadModel.swift (99%) create mode 100644 DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift rename DuckDuckGo/ContentBlocker/{ => ClickToLoad}/clickToLoad.js (99%) rename DuckDuckGo/ContentBlocker/{ => ClickToLoad}/clickToLoadConfig.json (100%) rename DuckDuckGo/ContentBlocker/{ => ClickToLoad}/fb-sdk.js (99%) rename DuckDuckGo/ContentBlocker/{ => ClickToLoad}/fb-tds.json (100%) delete mode 100644 DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index dd280d3553..1e4533d0b1 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -2451,6 +2451,9 @@ EAA29AEA278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 in Resources */ = {isa = PBXBuildFile; fileRef = EAA29AE8278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 */; }; EAC80DE0271F6C0100BBF02D /* fb-sdk.js in Resources */ = {isa = PBXBuildFile; fileRef = EAC80DDF271F6C0100BBF02D /* fb-sdk.js */; }; EAE42800275D47FA00DAC26B /* ClickToLoadModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */; }; + EAF52F4F2B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; + EAF52F502B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; + EAF52F512B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; EAFAD6CA2728BD1200F9DF00 /* clickToLoad.js in Resources */ = {isa = PBXBuildFile; fileRef = EAFAD6C92728BD1200F9DF00 /* clickToLoad.js */; }; EE02D41A2BB4609900DBE6B3 /* UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D4192BB4609900DBE6B3 /* UITests.swift */; }; EE02D41C2BB460A600DBE6B3 /* BrowsingHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D41B2BB460A600DBE6B3 /* BrowsingHistoryTests.swift */; }; @@ -3946,6 +3949,7 @@ EAA29AE8278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ProximaNova-Reg-webfont.woff2"; sourceTree = ""; }; EAC80DDF271F6C0100BBF02D /* fb-sdk.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "fb-sdk.js"; sourceTree = ""; }; EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClickToLoadModel.swift; sourceTree = ""; }; + EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadRulesSplitter.swift; sourceTree = ""; }; EAFAD6C92728BD1200F9DF00 /* clickToLoad.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clickToLoad.js; sourceTree = ""; }; EE02D4192BB4609900DBE6B3 /* UITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITests.swift; sourceTree = ""; }; EE02D41B2BB460A600DBE6B3 /* BrowsingHistoryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrowsingHistoryTests.swift; sourceTree = ""; }; @@ -5118,18 +5122,13 @@ EAA29AEB278D2E51007070CF /* fonts */, 026ADE1326C3010C002518EE /* macos-config.json */, 9833913027AAA4B500DAF119 /* trackerData.json */, - EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */, + EAF52F4D2B93AF71003D73EB /* ClickToLoad */, 85AC3B0425D6B1D800C7D2AA /* ScriptSourceProviding.swift */, 9826B09F2747DF3D0092F683 /* ContentBlocking.swift */, 9812D894276CEDA5004B6181 /* ContentBlockerRulesLists.swift */, 9833912E27AAA3CE00DAF119 /* AppTrackerDataSetProvider.swift */, 9826B0A12747DFEB0092F683 /* AppPrivacyConfigurationDataProvider.swift */, EA18D1C9272F0DC8006DC101 /* social_images */, - EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */, - EAFAD6C92728BD1200F9DF00 /* clickToLoad.js */, - EA47767F272A21B700419EDA /* clickToLoadConfig.json */, - EA4617EF273A28A700F110A2 /* fb-tds.json */, - EAC80DDF271F6C0100BBF02D /* fb-sdk.js */, ); path = ContentBlocker; sourceTree = ""; @@ -7974,6 +7973,20 @@ path = fonts; sourceTree = ""; }; + EAF52F4D2B93AF71003D73EB /* ClickToLoad */ = { + isa = PBXGroup; + children = ( + EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */, + EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */, + EAFAD6C92728BD1200F9DF00 /* clickToLoad.js */, + EA47767F272A21B700419EDA /* clickToLoadConfig.json */, + EA4617EF273A28A700F110A2 /* fb-tds.json */, + EAC80DDF271F6C0100BBF02D /* fb-sdk.js */, + EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */, + ); + path = ClickToLoad; + sourceTree = ""; + }; EEA3EEAF2B24EB5100E8333A /* VPNLocation */ = { isa = PBXGroup; children = ( @@ -9450,6 +9463,7 @@ 3706FAFE293F65D500E42796 /* SpacerNode.swift in Sources */, 3706FB00293F65D500E42796 /* PasswordManagementCreditCardModel.swift in Sources */, BBDFDC5D2B2B8E2100F62D90 /* DataBrokerProtectionExternalWaitlistPixels.swift in Sources */, + EAF52F502B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */, 3706FB01293F65D500E42796 /* NSEventExtension.swift in Sources */, 3706FB02293F65D500E42796 /* Onboarding.swift in Sources */, 4B9DB0482A983B24000927DB /* WaitlistRootView.swift in Sources */, @@ -10526,6 +10540,776 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4B9579452AC7AE700062CA31 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B9579462AC7AE700062CA31 /* FaviconUserScript.swift in Sources */, + 4B9579472AC7AE700062CA31 /* BWResponse.swift in Sources */, + 4B37EE7A2B4CFF7200A89A61 /* DataBrokerProtectionRemoteMessaging.swift in Sources */, + 1E2AE4C72ACB215900684E0A /* NetworkProtectionRemoteMessaging.swift in Sources */, + 4B9579482AC7AE700062CA31 /* LottieAnimationCache.swift in Sources */, + 4B9579492AC7AE700062CA31 /* WaitlistDialogView.swift in Sources */, + 4B95794A2AC7AE700062CA31 /* TabIndex.swift in Sources */, + 4B95794B2AC7AE700062CA31 /* SavePanelAccessoryView.swift in Sources */, + 4B95794C2AC7AE700062CA31 /* TabLazyLoaderDataSource.swift in Sources */, + 4B95794D2AC7AE700062CA31 /* LoginImport.swift in Sources */, + 4B95794E2AC7AE700062CA31 /* JoinWaitlistView.swift in Sources */, + 4B95794F2AC7AE700062CA31 /* LazyLoadable.swift in Sources */, + 4B9579502AC7AE700062CA31 /* ClickToLoadModel.swift in Sources */, + B6F9BDDE2B45B7EE00677B33 /* WebsiteInfo.swift in Sources */, + 4B9579512AC7AE700062CA31 /* KeyedCodingExtension.swift in Sources */, + 31AA6B992B960BA60025014E /* DataBrokerProtectionLoginItemPixels.swift in Sources */, + 4B9579522AC7AE700062CA31 /* PrivacyDashboardTabExtension.swift in Sources */, + 4B9579542AC7AE700062CA31 /* DownloadListStore.swift in Sources */, + 4B9579552AC7AE700062CA31 /* Logging.swift in Sources */, + 4B9579562AC7AE700062CA31 /* CrashReportPromptPresenter.swift in Sources */, + 1DDC84F92B83558F00670238 /* PreferencesPrivateSearchView.swift in Sources */, + B6B4D1CD2B0C8C9200C26286 /* FirefoxCompatibilityPreferences.swift in Sources */, + 9FA173ED2B7B232200EE4E6E /* AddEditBookmarkDialogView.swift in Sources */, + 4B9579572AC7AE700062CA31 /* BWCredential.swift in Sources */, + 4B9579582AC7AE700062CA31 /* PreferencesRootView.swift in Sources */, + 4B9579592AC7AE700062CA31 /* AppStateChangedPublisher.swift in Sources */, + 4B95795A2AC7AE700062CA31 /* BookmarkTableCellView.swift in Sources */, + 4B95795B2AC7AE700062CA31 /* BookmarkManagementSidebarViewController.swift in Sources */, + 4B95795C2AC7AE700062CA31 /* NSStackViewExtension.swift in Sources */, + 4B95795D2AC7AE700062CA31 /* OptionalExtension.swift in Sources */, + 4B95795E2AC7AE700062CA31 /* PasswordManagementLoginItemView.swift in Sources */, + 4B95795F2AC7AE700062CA31 /* UserText.swift in Sources */, + 9F872D9A2B8DA9F800138637 /* Bookmarks+Tab.swift in Sources */, + 4B9579602AC7AE700062CA31 /* WKWebView+Download.swift in Sources */, + 4B9579612AC7AE700062CA31 /* TabShadowConfig.swift in Sources */, + 4B9579622AC7AE700062CA31 /* URLSessionExtension.swift in Sources */, + C13909FD2B861039001626ED /* AutofillActionPresenter.swift in Sources */, + 4B9579632AC7AE700062CA31 /* WKWebsiteDataStoreExtension.swift in Sources */, + 4B9579642AC7AE700062CA31 /* WindowDraggingView.swift in Sources */, + 4B9579652AC7AE700062CA31 /* SecureVaultSorting.swift in Sources */, + 4B9579662AC7AE700062CA31 /* PreferencesSidebarModel.swift in Sources */, + 4B9579672AC7AE700062CA31 /* DuckPlayerURLExtension.swift in Sources */, + C1E961F22B87AA29001760E1 /* AutofillActionBuilder.swift in Sources */, + 4B41EDB72B169887001EEDF4 /* VPNFeedbackFormView.swift in Sources */, + 4B9579682AC7AE700062CA31 /* BWEncryptionOutput.m in Sources */, + 4B9579692AC7AE700062CA31 /* PermissionState.swift in Sources */, + 4B95796A2AC7AE700062CA31 /* FeedbackPresenter.swift in Sources */, + 4B95796B2AC7AE700062CA31 /* NavigationProtectionTabExtension.swift in Sources */, + 4B95796C2AC7AE700062CA31 /* BurnerMode.swift in Sources */, + 4B95796D2AC7AE700062CA31 /* UserAgent.swift in Sources */, + 4B95796E2AC7AE700062CA31 /* LegacyBookmarkStore.swift in Sources */, + 4B95796F2AC7AE700062CA31 /* NSAlert+DataImport.swift in Sources */, + 4B9579702AC7AE700062CA31 /* MainWindow.swift in Sources */, + 9F872DA52B90920F00138637 /* BookmarkFolderInfo.swift in Sources */, + 9FEE986B2B85B869002E44E8 /* BookmarksDialogViewModel.swift in Sources */, + 4B9579712AC7AE700062CA31 /* CrashReportPromptViewController.swift in Sources */, + 4B9579722AC7AE700062CA31 /* BookmarksCleanupErrorHandling.swift in Sources */, + 4B9579732AC7AE700062CA31 /* ContextMenuManager.swift in Sources */, + 4B9579742AC7AE700062CA31 /* GradientView.swift in Sources */, + 4B9579752AC7AE700062CA31 /* PreferencesSidebar.swift in Sources */, + 1D9A4E5C2B43213B00F449E2 /* TabSnapshotExtension.swift in Sources */, + 4B9579762AC7AE700062CA31 /* HoveredLinkTabExtension.swift in Sources */, + 4B9579772AC7AE700062CA31 /* NSPointExtension.swift in Sources */, + 4B9579782AC7AE700062CA31 /* WindowsManager.swift in Sources */, + 4B9579792AC7AE700062CA31 /* BWRequest.swift in Sources */, + 4B95797A2AC7AE700062CA31 /* WKWebViewConfigurationExtensions.swift in Sources */, + 4B95797B2AC7AE700062CA31 /* HomePageDefaultBrowserModel.swift in Sources */, + 9F514F932B7D88AD001832A9 /* AddEditBookmarkFolderDialogView.swift in Sources */, + 4B95797C2AC7AE700062CA31 /* CrashReporter.swift in Sources */, + 4B95797D2AC7AE700062CA31 /* AddressBarTextSelectionNavigation.swift in Sources */, + 1D01A3DA2B88DF8B00FE8150 /* PreferencesSyncView.swift in Sources */, + 4B37EE7D2B4CFF8300A89A61 /* SurveyURLBuilder.swift in Sources */, + 4B95797E2AC7AE700062CA31 /* BadgeNotificationAnimationModel.swift in Sources */, + 4B95797F2AC7AE700062CA31 /* HyperLink.swift in Sources */, + 4B9579802AC7AE700062CA31 /* SyncDataProviders.swift in Sources */, + 4B9579812AC7AE700062CA31 /* PasteboardWriting.swift in Sources */, + 4B9579822AC7AE700062CA31 /* BookmarkOutlineCellView.swift in Sources */, + 4B9579832AC7AE700062CA31 /* UnprotectedDomains.xcdatamodeld in Sources */, + 4B9579842AC7AE700062CA31 /* TabInstrumentation.swift in Sources */, + 4B9579872AC7AE700062CA31 /* ConfigurationManager.swift in Sources */, + 4B9579882AC7AE700062CA31 /* YoutubePlayerUserScript.swift in Sources */, + 4B9579892AC7AE700062CA31 /* PixelParameters.swift in Sources */, + 4B95798B2AC7AE700062CA31 /* FaviconImageCache.swift in Sources */, + 4B95798C2AC7AE700062CA31 /* TabBarViewController.swift in Sources */, + 4B95798D2AC7AE700062CA31 /* BookmarkOutlineViewDataSource.swift in Sources */, + 4B95798E2AC7AE700062CA31 /* DataImportStatusProviding.swift in Sources */, + 3158B14C2B0BF74500AF130C /* DataBrokerProtectionDebugMenu.swift in Sources */, + 4B95798F2AC7AE700062CA31 /* PasswordManagementBitwardenItemView.swift in Sources */, + 4B9579912AC7AE700062CA31 /* NSNotificationName+PasswordManager.swift in Sources */, + 4B9579922AC7AE700062CA31 /* RulesCompilationMonitor.swift in Sources */, + 4B9579932AC7AE700062CA31 /* FBProtectionTabExtension.swift in Sources */, + 4B41EDB82B169889001EEDF4 /* VPNFeedbackFormViewModel.swift in Sources */, + 4B9579942AC7AE700062CA31 /* CrashReportReader.swift in Sources */, + 4B9579952AC7AE700062CA31 /* DataTaskProviding.swift in Sources */, + 4B9579962AC7AE700062CA31 /* FeatureFlag.swift in Sources */, + B6B4D1C82B0B3B5400C26286 /* DataImportReportModel.swift in Sources */, + 4B9579972AC7AE700062CA31 /* FeedbackViewController.swift in Sources */, + B6104E9D2BA9C174008636B2 /* DownloadResumeData.swift in Sources */, + 4B9579982AC7AE700062CA31 /* FaviconSelector.swift in Sources */, + 4B95799A2AC7AE700062CA31 /* PrintingUserScript.swift in Sources */, + 4B95799B2AC7AE700062CA31 /* ConnectBitwardenViewController.swift in Sources */, + 4B95799C2AC7AE700062CA31 /* BWManager.swift in Sources */, + B6BCC5262AFCDABB002C5499 /* DataImportSourceViewModel.swift in Sources */, + 4B95799D2AC7AE700062CA31 /* AppTrackerDataSetProvider.swift in Sources */, + D64A5FFB2AEA5C2B00B6D6E7 /* HomeButtonMenuFactory.swift in Sources */, + 4B95799E2AC7AE700062CA31 /* EncryptionKeyGeneration.swift in Sources */, + 4B95799F2AC7AE700062CA31 /* TabLazyLoader.swift in Sources */, + B690152F2ACBF4DA00AD0BAB /* MenuPreview.swift in Sources */, + 1D01A3D22B88CEC600FE8150 /* PreferencesAccessibilityView.swift in Sources */, + 4B9579A02AC7AE700062CA31 /* InvitedToWaitlistView.swift in Sources */, + 4B9579A22AC7AE700062CA31 /* SaveCredentialsViewController.swift in Sources */, + 4B9579A32AC7AE700062CA31 /* PopUpButton.swift in Sources */, + 4B9579A42AC7AE700062CA31 /* NetworkProtectionInviteDialog.swift in Sources */, + 4B9579A52AC7AE700062CA31 /* SuggestionViewController.swift in Sources */, + 4B9579A82AC7AE700062CA31 /* BWKeyStorage.swift in Sources */, + 4B9579A92AC7AE700062CA31 /* VisitViewModel.swift in Sources */, + 4B9579AA2AC7AE700062CA31 /* AddressBarTextEditor.swift in Sources */, + 3158B15B2B0BF76700AF130C /* DataBrokerProtectionFeatureDisabler.swift in Sources */, + 1D26EBAE2B74BECB0002A93F /* NSImageSendable.swift in Sources */, + 4B9579AB2AC7AE700062CA31 /* Atb.swift in Sources */, + 4B9579AC2AC7AE700062CA31 /* BrowserTabView.swift in Sources */, + 4B9579AD2AC7AE700062CA31 /* DownloadsViewController.swift in Sources */, + 4B9579AE2AC7AE700062CA31 /* DataExtension.swift in Sources */, + 4B9579AF2AC7AE700062CA31 /* ConfigurationStore.swift in Sources */, + 4B9579B02AC7AE700062CA31 /* Feedback.swift in Sources */, + 4B9579B22AC7AE700062CA31 /* FirefoxFaviconsReader.swift in Sources */, + 4B9579B32AC7AE700062CA31 /* CopyHandler.swift in Sources */, + 4B9579B42AC7AE700062CA31 /* ContentBlockingRulesUpdateObserver.swift in Sources */, + 4B9579B52AC7AE700062CA31 /* FirefoxLoginReader.swift in Sources */, + 4B9579B62AC7AE700062CA31 /* AtbParser.swift in Sources */, + 4B9579B72AC7AE700062CA31 /* PreferencesDuckPlayerView.swift in Sources */, + 4B41EDB62B169883001EEDF4 /* VPNFeedbackFormViewController.swift in Sources */, + 4B9579B92AC7AE700062CA31 /* BookmarkSidebarTreeController.swift in Sources */, + 4B9579BA2AC7AE700062CA31 /* HomePageFavoritesModel.swift in Sources */, + 4B9579BB2AC7AE700062CA31 /* SequenceExtensions.swift in Sources */, + 4B9579BC2AC7AE700062CA31 /* WKBackForwardListExtension.swift in Sources */, + 4B9579BD2AC7AE700062CA31 /* ChromiumDataImporter.swift in Sources */, + 4B9579BE2AC7AE700062CA31 /* BackForwardListItemViewModel.swift in Sources */, + 4B9579BF2AC7AE700062CA31 /* BWNotRespondingAlert.swift in Sources */, + 1DDC85052B83903E00670238 /* PreferencesWebTrackingProtectionView.swift in Sources */, + 4B9579C02AC7AE700062CA31 /* DebugUserScript.swift in Sources */, + 1DC669722B6CF0D700AA0645 /* TabSnapshotStore.swift in Sources */, + 4B9579C12AC7AE700062CA31 /* RecentlyClosedTab.swift in Sources */, + 4B9579C22AC7AE700062CA31 /* PDFSearchTextMenuItemHandler.swift in Sources */, + 4B9579C42AC7AE700062CA31 /* HistoryMenu.swift in Sources */, + 4B9579C52AC7AE700062CA31 /* ContentScopeFeatureFlagging.swift in Sources */, + 4B9579C62AC7AE700062CA31 /* OnboardingButtonStyles.swift in Sources */, + 4B9579C72AC7AE700062CA31 /* SaveIdentityPopover.swift in Sources */, + 4B9579C82AC7AE700062CA31 /* AuthenticationAlert.swift in Sources */, + 4B9579C92AC7AE700062CA31 /* SetExtension.swift in Sources */, + 4B9579CA2AC7AE700062CA31 /* YoutubePlayerNavigationHandler.swift in Sources */, + 4B9579CB2AC7AE700062CA31 /* PreferencesAboutView.swift in Sources */, + 4B9579CC2AC7AE700062CA31 /* ContentBlocking.swift in Sources */, + 4B37EE792B4CFF6F00A89A61 /* DataBrokerProtectionRemoteMessage.swift in Sources */, + 4B9579CD2AC7AE700062CA31 /* LocalAuthenticationService.swift in Sources */, + 4B9579CE2AC7AE700062CA31 /* CredentialsCleanupErrorHandling.swift in Sources */, + 4B9579CF2AC7AE700062CA31 /* SafariBookmarksReader.swift in Sources */, + 4B9579D02AC7AE700062CA31 /* HTTPCookie.swift in Sources */, + 1DDD3EC62B84F96B004CBF2B /* CookiePopupProtectionPreferences.swift in Sources */, + 4B9579D12AC7AE700062CA31 /* SafariVersionReader.swift in Sources */, + 4B9579D22AC7AE700062CA31 /* LoginFaviconView.swift in Sources */, + 4B9579D32AC7AE700062CA31 /* FireproofDomainsViewController.swift in Sources */, + 1ED910D72B63BFB300936947 /* IdentityTheftRestorationPagesUserScript.swift in Sources */, + 4B9579D42AC7AE700062CA31 /* URLEventHandler.swift in Sources */, + 3158B15E2B0BF76F00AF130C /* DataBrokerProtectionAppEvents.swift in Sources */, + 4B9579D52AC7AE700062CA31 /* SupportedOsChecker.swift in Sources */, + 4B9579D62AC7AE700062CA31 /* WKWebViewExtension.swift in Sources */, + 4B9579D72AC7AE700062CA31 /* CleanThisHistoryMenuItem.swift in Sources */, + 4B9579D92AC7AE700062CA31 /* DownloadListItem.swift in Sources */, + 4B9579DA2AC7AE700062CA31 /* WaitlistRequest.swift in Sources */, + 4B9579DB2AC7AE700062CA31 /* DownloadsPopover.swift in Sources */, + 37A6A8F92AFCCA59008580A3 /* FaviconsFetcherOnboardingViewController.swift in Sources */, + 4B9579DC2AC7AE700062CA31 /* BookmarksBarMenuFactory.swift in Sources */, + 4B9579DD2AC7AE700062CA31 /* SpacerNode.swift in Sources */, + B62B483C2ADE46FC000DECE5 /* Application.swift in Sources */, + 4B9579DF2AC7AE700062CA31 /* SyncManagementDialogViewController.swift in Sources */, + 4B05265F2B1AEFDB0054955A /* VPNMetadataCollector.swift in Sources */, + 4B9579E02AC7AE700062CA31 /* BookmarkExtension.swift in Sources */, + 4B9579E12AC7AE700062CA31 /* PasswordManagementCreditCardModel.swift in Sources */, + B677FC522B06376B0099EB04 /* ReportFeedbackView.swift in Sources */, + 1D220BFE2B87AACF00F8BBC6 /* PrivacyProtectionStatus.swift in Sources */, + 4B9579E22AC7AE700062CA31 /* NSEventExtension.swift in Sources */, + 1D26EBB22B74DB600002A93F /* TabSnapshotCleanupService.swift in Sources */, + 4B9579E32AC7AE700062CA31 /* Onboarding.swift in Sources */, + 4B9579E42AC7AE700062CA31 /* PopUpWindow.swift in Sources */, + 4B9579E52AC7AE700062CA31 /* Favicons.xcdatamodeld in Sources */, + 4B9579E62AC7AE700062CA31 /* Publisher.asVoid.swift in Sources */, + 9FEE986F2B85BA17002E44E8 /* AddEditBookmarkDialogCoordinatorViewModel.swift in Sources */, + 4B9579E72AC7AE700062CA31 /* Waitlist.swift in Sources */, + 3158B1582B0BF76000AF130C /* DataBrokerProtectionFeatureVisibility.swift in Sources */, + 4B9579E82AC7AE700062CA31 /* NavigationButtonMenuDelegate.swift in Sources */, + 4B9579E92AC7AE700062CA31 /* CrashReport.swift in Sources */, + 4B9579EA2AC7AE700062CA31 /* NSPopoverExtension.swift in Sources */, + 4B9579EB2AC7AE700062CA31 /* NSPathControlView.swift in Sources */, + 4B9579EC2AC7AE700062CA31 /* HTTPSUpgradeTabExtension.swift in Sources */, + 4B9579ED2AC7AE700062CA31 /* AppIconChanger.swift in Sources */, + 4B9579EE2AC7AE700062CA31 /* AppMain.swift in Sources */, + 4B9579EF2AC7AE700062CA31 /* ProductWaitlistRequest.swift in Sources */, + 7BEC20442B0F505F00243D3E /* AddBookmarkPopoverView.swift in Sources */, + 4B9579F02AC7AE700062CA31 /* Bookmark.xcdatamodeld in Sources */, + 4B9579F12AC7AE700062CA31 /* DefaultBrowserPromptView.swift in Sources */, + 4B9579F22AC7AE700062CA31 /* WaitlistActivationDateStore.swift in Sources */, + 4B9579F42AC7AE700062CA31 /* FaviconManager.swift in Sources */, + 4B9579F52AC7AE700062CA31 /* PFMoveApplication.m in Sources */, + B68D21D22ACBCA01002DA3C2 /* ContentBlockerRulesManagerMock.swift in Sources */, + 4B9579F62AC7AE700062CA31 /* ChromiumFaviconsReader.swift in Sources */, + 4B9579F72AC7AE700062CA31 /* SuggestionTableRowView.swift in Sources */, + EEC4A6732B2C90AB00F7C0AA /* VPNLocationPreferenceItem.swift in Sources */, + 4B9579F82AC7AE700062CA31 /* DownloadsPreferences.swift in Sources */, + 4B9579F92AC7AE700062CA31 /* PasswordManagementItemList.swift in Sources */, + 4B9579FA2AC7AE700062CA31 /* Bookmark.swift in Sources */, + 4B9579FB2AC7AE700062CA31 /* ConnectBitwardenViewModel.swift in Sources */, + 4B9579FC2AC7AE700062CA31 /* NSNotificationName+DataImport.swift in Sources */, + 4B9579FD2AC7AE700062CA31 /* StoredPermission.swift in Sources */, + B6CC266A2BAD959500F53F8D /* DownloadProgress.swift in Sources */, + 4B9579FE2AC7AE700062CA31 /* FirePopoverCollectionViewHeader.swift in Sources */, + 4B9579FF2AC7AE700062CA31 /* FireViewController.swift in Sources */, + 4B957A002AC7AE700062CA31 /* OutlineSeparatorViewCell.swift in Sources */, + 4B957A012AC7AE700062CA31 /* SafariDataImporter.swift in Sources */, + 4B957A022AC7AE700062CA31 /* WaitlistViewModel.swift in Sources */, + 4B957A032AC7AE700062CA31 /* LocalBookmarkStore.swift in Sources */, + 4B957A042AC7AE700062CA31 /* BWEncryption.m in Sources */, + 4B957A052AC7AE700062CA31 /* StatisticsLoader.swift in Sources */, + 4B957A072AC7AE700062CA31 /* DataClearingPreferences.swift in Sources */, + 4B957A082AC7AE700062CA31 /* LocalUnprotectedDomains.swift in Sources */, + 4B957A092AC7AE700062CA31 /* InternalUserDeciderStore.swift in Sources */, + 4B957A0A2AC7AE700062CA31 /* NewWindowPolicy.swift in Sources */, + 4B957A0B2AC7AE700062CA31 /* NavigationBarBadgeAnimator.swift in Sources */, + 4B957A0C2AC7AE700062CA31 /* NSTextViewExtension.swift in Sources */, + 4B957A0D2AC7AE700062CA31 /* FutureExtension.swift in Sources */, + 4B957A0E2AC7AE700062CA31 /* UserDialogRequest.swift in Sources */, + 4B957A0F2AC7AE700062CA31 /* DownloadsCellView.swift in Sources */, + 4B957A112AC7AE700062CA31 /* PublishedAfter.swift in Sources */, + 1DDC85012B835BC000670238 /* SearchPreferences.swift in Sources */, + B6B5F58C2B03673B008DB58A /* BrowserImportMoreInfoView.swift in Sources */, + 4B957A122AC7AE700062CA31 /* FirefoxBerkeleyDatabaseReader.swift in Sources */, + 4B957A132AC7AE700062CA31 /* WebViewSnapshotView.swift in Sources */, + 4B957A142AC7AE700062CA31 /* DeviceAuthenticationService.swift in Sources */, + 4B957A152AC7AE700062CA31 /* AppConfigurationURLProvider.swift in Sources */, + 4B957A162AC7AE700062CA31 /* SyncSettingsAdapter.swift in Sources */, + 4B957A172AC7AE700062CA31 /* AutofillPreferences.swift in Sources */, + B6DE57F92B05EA9000CD54B9 /* SheetHostingWindow.swift in Sources */, + 4B957A192AC7AE700062CA31 /* PasswordManagerCoordinator.swift in Sources */, + 4B957A1A2AC7AE700062CA31 /* PasswordManagementIdentityModel.swift in Sources */, + 4B957A1B2AC7AE700062CA31 /* UserDefaultsWrapper.swift in Sources */, + B65C7DFD2B886CF0001E2D5C /* WKPDFHUDViewWrapper.swift in Sources */, + 4B957A1C2AC7AE700062CA31 /* PasswordManagementPopover.swift in Sources */, + 4B957A1D2AC7AE700062CA31 /* BWCommunicator.swift in Sources */, + 4B957A1E2AC7AE700062CA31 /* HomePageRecentlyVisitedModel.swift in Sources */, + 4B957A1F2AC7AE700062CA31 /* NavigationBarPopovers.swift in Sources */, + 4B957A202AC7AE700062CA31 /* CancellableExtension.swift in Sources */, + 4B957A212AC7AE700062CA31 /* PinnedTabsHostingView.swift in Sources */, + 4B957A222AC7AE700062CA31 /* FirefoxBookmarksReader.swift in Sources */, + 9F982F0F2B8224BF00231028 /* AddEditBookmarkFolderDialogViewModel.swift in Sources */, + 4B0526622B1D55320054955A /* VPNFeedbackSender.swift in Sources */, + 4B957A232AC7AE700062CA31 /* DeviceIdleStateDetector.swift in Sources */, + 85D0327D2B8E3D090041D1FB /* HistoryCoordinatorExtension.swift in Sources */, + 4B957A242AC7AE700062CA31 /* FlatButton.swift in Sources */, + 4B957A252AC7AE700062CA31 /* PinnedTabView.swift in Sources */, + 4B957A262AC7AE700062CA31 /* DataEncryption.swift in Sources */, + 4B957A272AC7AE700062CA31 /* PrivacyDashboardPopover.swift in Sources */, + 4B957A282AC7AE700062CA31 /* TestsClosureNavigationResponder.swift in Sources */, + 4B957A292AC7AE700062CA31 /* RootView.swift in Sources */, + 4B37EE7C2B4CFF8000A89A61 /* HomePageRemoteMessagingRequest.swift in Sources */, + 4B957A2A2AC7AE700062CA31 /* AddressBarTextField.swift in Sources */, + 4B957A2B2AC7AE700062CA31 /* FocusRingView.swift in Sources */, + 4B957A2C2AC7AE700062CA31 /* BookmarksBarViewModel.swift in Sources */, + 4B957A2D2AC7AE700062CA31 /* NSPopUpButtonView.swift in Sources */, + 4B957A2E2AC7AE700062CA31 /* BlockMenuItem.swift in Sources */, + 4B957A2F2AC7AE700062CA31 /* ContextualMenu.swift in Sources */, + 9FBD84752BB3E15D00220859 /* InstallationAttributionPixelHandler.swift in Sources */, + 4B957A302AC7AE700062CA31 /* NavigationBarViewController.swift in Sources */, + 4B957A312AC7AE700062CA31 /* MainViewController.swift in Sources */, + 4B957A322AC7AE700062CA31 /* DuckPlayer.swift in Sources */, + F1D43AF02B98D8DF00BAB743 /* MainMenuActions+VanillaBrowser.swift in Sources */, + 4B957A332AC7AE700062CA31 /* Favicon.swift in Sources */, + 1E2AE4CA2ACB21A000684E0A /* NetworkProtectionRemoteMessage.swift in Sources */, + 4B957A342AC7AE700062CA31 /* SuggestionContainerViewModel.swift in Sources */, + 9F56CFAF2B84326C00BB7F11 /* AddEditBookmarkDialogViewModel.swift in Sources */, + 4B957A352AC7AE700062CA31 /* FirePopoverWrapperViewController.swift in Sources */, + 4B957A362AC7AE700062CA31 /* NSPasteboardItemExtension.swift in Sources */, + 4B957A372AC7AE700062CA31 /* AutofillPreferencesModel.swift in Sources */, + 4B957A382AC7AE700062CA31 /* NetworkProtectionDebugUtilities.swift in Sources */, + 4B957A392AC7AE700062CA31 /* NSException+Catch.swift in Sources */, + 4B957A3A2AC7AE700062CA31 /* PasswordManagementNoteModel.swift in Sources */, + 4B957A3B2AC7AE700062CA31 /* CookieNotificationAnimationModel.swift in Sources */, + 4B957A3C2AC7AE700062CA31 /* JoinedWaitlistView.swift in Sources */, + 4B957A3D2AC7AE700062CA31 /* SharingMenu.swift in Sources */, + 4B957A3E2AC7AE700062CA31 /* EnableWaitlistFeatureView.swift in Sources */, + 4B957A3F2AC7AE700062CA31 /* GrammarFeaturesManager.swift in Sources */, + 4B957A402AC7AE700062CA31 /* WaitlistModalViewController.swift in Sources */, + B60293E82BA19ECD0033186B /* NetPPopoverManagerMock.swift in Sources */, + B6BCC53E2AFD15DF002C5499 /* DataImportProfilePicker.swift in Sources */, + 4B957A412AC7AE700062CA31 /* WKMenuItemIdentifier.swift in Sources */, + 4B957A422AC7AE700062CA31 /* SafariFaviconsReader.swift in Sources */, + 4B957A432AC7AE700062CA31 /* NSScreenExtension.swift in Sources */, + 4B957A442AC7AE700062CA31 /* NSBezierPathExtension.swift in Sources */, + 4B957A452AC7AE700062CA31 /* Bundle+VPN.swift in Sources */, + B68D21CA2ACBC971002DA3C2 /* MockPrivacyConfiguration.swift in Sources */, + 4B957A462AC7AE700062CA31 /* WebsiteDataStore.swift in Sources */, + 4B957A472AC7AE700062CA31 /* NetworkProtectionFeatureVisibility.swift in Sources */, + 3778183D2AD6F86D00533759 /* FavoritesDisplayModeSyncHandler.swift in Sources */, + 4B957A482AC7AE700062CA31 /* PermissionContextMenu.swift in Sources */, + 4B957A492AC7AE700062CA31 /* ContextMenuUserScript.swift in Sources */, + 4B957A4A2AC7AE700062CA31 /* NSSavePanelExtension.swift in Sources */, + 4B957A4B2AC7AE700062CA31 /* AppPrivacyConfigurationDataProvider.swift in Sources */, + 4B957A4C2AC7AE700062CA31 /* LinkButton.swift in Sources */, + 4B957A4D2AC7AE700062CA31 /* TemporaryFileHandler.swift in Sources */, + 4B957A4E2AC7AE700062CA31 /* URL+NetworkProtection.swift in Sources */, + 4B957A4F2AC7AE700062CA31 /* PrivacyFeatures.swift in Sources */, + 4B957A512AC7AE700062CA31 /* ViewExtension.swift in Sources */, + 4B957A522AC7AE700062CA31 /* AVCaptureDevice+SwizzledAuthState.swift in Sources */, + 4B957A532AC7AE700062CA31 /* SubscriptionPagesUserScript.swift in Sources */, + 4B957A542AC7AE700062CA31 /* VisitMenuItem.swift in Sources */, + 4B957A552AC7AE700062CA31 /* EncryptionKeyStore.swift in Sources */, + 4B957A562AC7AE700062CA31 /* TabExtensionsBuilder.swift in Sources */, + 9F56CFB32B843F6C00BB7F11 /* BookmarksDialogViewFactory.swift in Sources */, + 1E2AE4C82ACB216B00684E0A /* HoverTrackingArea.swift in Sources */, + 4B957A582AC7AE700062CA31 /* PasswordManagementIdentityItemView.swift in Sources */, + 4B957A592AC7AE700062CA31 /* ProgressExtension.swift in Sources */, + 4B44FEF52B1FEF5A000619D8 /* FocusableTextEditor.swift in Sources */, + 4B957A5A2AC7AE700062CA31 /* CSVParser.swift in Sources */, + 4B957A5B2AC7AE700062CA31 /* PixelDataModel.xcdatamodeld in Sources */, + 4B957A5C2AC7AE700062CA31 /* PrivacyDashboardWebView.swift in Sources */, + B6656E5B2B2ADB1C008798A1 /* RequestFilePermissionView.swift in Sources */, + 4B957A5D2AC7AE700062CA31 /* AppearancePreferences.swift in Sources */, + EAF52F512B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */, + 4B957A5E2AC7AE700062CA31 /* DownloadListCoordinator.swift in Sources */, + 4B957A5F2AC7AE700062CA31 /* AdClickAttributionTabExtension.swift in Sources */, + 7B3618C52ADE77D3000D6154 /* NetworkProtectionNavBarPopoverManager.swift in Sources */, + 4B957A602AC7AE700062CA31 /* NSNotificationName+Debug.swift in Sources */, + 4B957A612AC7AE700062CA31 /* NavigationBarBadgeAnimationView.swift in Sources */, + 4B957A622AC7AE700062CA31 /* AddressBarButton.swift in Sources */, + 4B957A642AC7AE700062CA31 /* FaviconStore.swift in Sources */, + 4B957A652AC7AE700062CA31 /* WaitlistTermsAndConditionsView.swift in Sources */, + B62B48592ADE730D000DECE5 /* FileImportView.swift in Sources */, + 4B957A662AC7AE700062CA31 /* SuggestionListCharacteristics.swift in Sources */, + 4B957A672AC7AE700062CA31 /* TimeIntervalExtension.swift in Sources */, + 4B957A682AC7AE700062CA31 /* NetworkProtectionFeatureDisabler.swift in Sources */, + 7BBA7CEA2BAB03C1007579A3 /* DefaultSubscriptionFeatureAvailability+DefaultInitializer.swift in Sources */, + 4B957A692AC7AE700062CA31 /* BookmarkListViewController.swift in Sources */, + 4B957A6A2AC7AE700062CA31 /* SecureVaultLoginImporter.swift in Sources */, + 4B957A6B2AC7AE700062CA31 /* WKProcessPoolExtension.swift in Sources */, + 4B957A6D2AC7AE700062CA31 /* LoginItemsManager.swift in Sources */, + 4B957A6E2AC7AE700062CA31 /* PixelExperiment.swift in Sources */, + 4B957A6F2AC7AE700062CA31 /* DuckPlayerTabExtension.swift in Sources */, + 4B957A702AC7AE700062CA31 /* RecentlyClosedCoordinator.swift in Sources */, + 4B957A712AC7AE700062CA31 /* URLRequestExtension.swift in Sources */, + B6080BC82B21E78100B418EF /* DataImportErrorView.swift in Sources */, + 4B957A722AC7AE700062CA31 /* FaviconHostReference.swift in Sources */, + 4B957A732AC7AE700062CA31 /* DownloadsTabExtension.swift in Sources */, + 1D220BFA2B86192200F8BBC6 /* PreferencesEmailProtectionView.swift in Sources */, + 4B957A752AC7AE700062CA31 /* ASN1Parser.swift in Sources */, + 4B957A762AC7AE700062CA31 /* FileDownloadManager.swift in Sources */, + 4B957A772AC7AE700062CA31 /* BookmarkImport.swift in Sources */, + 4BF0E5172AD25A2600FFEC9E /* DuckDuckGoUserAgent.swift in Sources */, + C1372EF62BBC5BAD003F8793 /* SecureTextField.swift in Sources */, + 4B957A782AC7AE700062CA31 /* KeySetDictionary.swift in Sources */, + B68D21CB2ACBC9A3002DA3C2 /* ContentBlockingMock.swift in Sources */, + 4B957A792AC7AE700062CA31 /* HistoryTabExtension.swift in Sources */, + 4B957A7A2AC7AE700062CA31 /* FireCoordinator.swift in Sources */, + 4B957A7B2AC7AE700062CA31 /* GeolocationProvider.swift in Sources */, + 4B957A7C2AC7AE700062CA31 /* NSAlert+ActiveDownloadsTermination.swift in Sources */, + B62B48412ADE48DE000DECE5 /* ArrayBuilder.swift in Sources */, + 4B957A7D2AC7AE700062CA31 /* IndexPathExtension.swift in Sources */, + 4B957A7E2AC7AE700062CA31 /* PasswordManagementNoteItemView.swift in Sources */, + B6B4D1D22B0E0DD000C26286 /* DataImportNoDataView.swift in Sources */, + 4B957A7F2AC7AE700062CA31 /* NSApplicationExtension.swift in Sources */, + 4B957A802AC7AE700062CA31 /* NSWindowExtension.swift in Sources */, + 4B957A812AC7AE700062CA31 /* KeychainType+ClientDefault.swift in Sources */, + C13909F12B85FD4E001626ED /* AutofillActionExecutor.swift in Sources */, + 4B41EDA52B1543B9001EEDF4 /* VPNPreferencesModel.swift in Sources */, + 4B957A822AC7AE700062CA31 /* SyncDebugMenu.swift in Sources */, + 4B957A832AC7AE700062CA31 /* AddBookmarkPopover.swift in Sources */, + 4B957A852AC7AE700062CA31 /* QRSharingService.swift in Sources */, + 4B957A862AC7AE700062CA31 /* ProcessExtension.swift in Sources */, + B68412162B694BA10092F66A /* NSObject+performSelector.m in Sources */, + 4B957A872AC7AE700062CA31 /* PermissionAuthorizationQuery.swift in Sources */, + 4B957A882AC7AE700062CA31 /* BadgeAnimationView.swift in Sources */, + 4B957A892AC7AE700062CA31 /* BrowserTabSelectionDelegate.swift in Sources */, + 4B957A8A2AC7AE700062CA31 /* ContinueSetUpView.swift in Sources */, + B69A14F42B4D6FE800B9417D /* AddBookmarkFolderPopoverViewModel.swift in Sources */, + 4B957A8B2AC7AE700062CA31 /* PasswordManagementListSection.swift in Sources */, + 4B957A8C2AC7AE700062CA31 /* FaviconReferenceCache.swift in Sources */, + 4B957A8D2AC7AE700062CA31 /* BookmarkTreeController.swift in Sources */, + EEC4A6602B277F0D00F7C0AA /* VPNLocationViewModel.swift in Sources */, + 4B957A8E2AC7AE700062CA31 /* FirefoxEncryptionKeyReader.swift in Sources */, + 4B957A8F2AC7AE700062CA31 /* EventMapping+NetworkProtectionError.swift in Sources */, + 4B957A902AC7AE700062CA31 /* BookmarkManagementSplitViewController.swift in Sources */, + 4B957A912AC7AE700062CA31 /* CookieManagedNotificationContainerView.swift in Sources */, + 4B957A922AC7AE700062CA31 /* FileManagerExtension.swift in Sources */, + 1DDD3EBE2B84DCB9004CBF2B /* WebTrackingProtectionPreferences.swift in Sources */, + 4B957A932AC7AE700062CA31 /* PermissionModel.swift in Sources */, + 4B957A942AC7AE700062CA31 /* PasteboardFolder.swift in Sources */, + 4B957A952AC7AE700062CA31 /* CookieManagedNotificationView.swift in Sources */, + 9F3344602BBFA77F0040CBEB /* BookmarksBarVisibilityManager.swift in Sources */, + 4B957A962AC7AE700062CA31 /* PermissionType.swift in Sources */, + 4B957A982AC7AE700062CA31 /* RecentlyClosedWindow.swift in Sources */, + 4B957A992AC7AE700062CA31 /* ActionSpeech.swift in Sources */, + 4B957A9B2AC7AE700062CA31 /* ModalSheetCancellable.swift in Sources */, + 4B957A9C2AC7AE700062CA31 /* FireproofDomainsStore.swift in Sources */, + 4B957A9D2AC7AE700062CA31 /* NetworkProtectionSimulateFailureMenu.swift in Sources */, + 4B957A9E2AC7AE700062CA31 /* PrivacyDashboardPermissionHandler.swift in Sources */, + 4B957A9F2AC7AE700062CA31 /* TabCollectionViewModel.swift in Sources */, + 4B520F652BA5573A006405C7 /* WaitlistThankYouView.swift in Sources */, + 4B957AA02AC7AE700062CA31 /* BookmarkManager.swift in Sources */, + 4B957AA12AC7AE700062CA31 /* AboutModel.swift in Sources */, + 4B957AA22AC7AE700062CA31 /* PasswordManagementCreditCardItemView.swift in Sources */, + 3158B1552B0BF75900AF130C /* LoginItem+DataBrokerProtection.swift in Sources */, + 4B957AA32AC7AE700062CA31 /* NSTextFieldExtension.swift in Sources */, + 4B957AA42AC7AE700062CA31 /* BWManagement.swift in Sources */, + 4B957AA52AC7AE700062CA31 /* FireproofDomainsContainer.swift in Sources */, + 4B957AA62AC7AE700062CA31 /* ExternalAppSchemeHandler.swift in Sources */, + 4B957AA72AC7AE700062CA31 /* GeolocationService.swift in Sources */, + 4B957AA82AC7AE700062CA31 /* FireproofingURLExtensions.swift in Sources */, + 4B957AA92AC7AE700062CA31 /* ContentOverlayPopover.swift in Sources */, + 4B957AAA2AC7AE700062CA31 /* TabShadowView.swift in Sources */, + 4B957AAB2AC7AE700062CA31 /* BWMessageIdGenerator.swift in Sources */, + B65E5DB12B74E6AA00480415 /* TrackerNetwork.swift in Sources */, + B6E6B9E52BA1F5F1008AA7E1 /* FilePresenter.swift in Sources */, + 31F2D2022AF026D800BF0144 /* WaitlistTermsAndConditionsActionHandler.swift in Sources */, + 4B957AAC2AC7AE700062CA31 /* EncryptedValueTransformer.swift in Sources */, + 4B957AAD2AC7AE700062CA31 /* Tab+Dialogs.swift in Sources */, + 4B957AAE2AC7AE700062CA31 /* PasteboardBookmark.swift in Sources */, + 4B957AAF2AC7AE700062CA31 /* PinnedTabsManager.swift in Sources */, + 1D01A3D62B88CF7700FE8150 /* AccessibilityPreferences.swift in Sources */, + 4B957AB02AC7AE700062CA31 /* HoverUserScript.swift in Sources */, + 4B957AB12AC7AE700062CA31 /* MainMenuActions.swift in Sources */, + 4B957AB22AC7AE700062CA31 /* WKWebView+SessionState.swift in Sources */, + B6F9BDE62B45CD1900677B33 /* ModalView.swift in Sources */, + 4B957AB32AC7AE700062CA31 /* NetworkProtectionControllerErrorStore.swift in Sources */, + 4B957AB42AC7AE700062CA31 /* DataImport.swift in Sources */, + 4B957AB52AC7AE700062CA31 /* NetworkProtectionDebugMenu.swift in Sources */, + 4B957AB62AC7AE700062CA31 /* FireproofDomains.xcdatamodeld in Sources */, + 3158B14F2B0BF74F00AF130C /* DataBrokerProtectionManager.swift in Sources */, + 4B957AB82AC7AE700062CA31 /* HomePageView.swift in Sources */, + 9FEE98672B846870002E44E8 /* AddEditBookmarkView.swift in Sources */, + 4B957AB92AC7AE700062CA31 /* SerpHeadersNavigationResponder.swift in Sources */, + 4B957ABA2AC7AE700062CA31 /* HomePageContinueSetUpModel.swift in Sources */, + 4B957ABB2AC7AE700062CA31 /* WebKitDownloadTask.swift in Sources */, + 4B957ABC2AC7AE700062CA31 /* ChromiumLoginReader.swift in Sources */, + B6BCC5522AFE4F7D002C5499 /* DataImportTypePicker.swift in Sources */, + 4B957ABD2AC7AE700062CA31 /* NSAlert+PasswordManager.swift in Sources */, + 4B957ABE2AC7AE700062CA31 /* UserContentUpdating.swift in Sources */, + 4B957ABF2AC7AE700062CA31 /* ChromiumPreferences.swift in Sources */, + 4B957AC02AC7AE700062CA31 /* FirePopoverViewController.swift in Sources */, + 4B957AC12AC7AE700062CA31 /* SavePaymentMethodPopover.swift in Sources */, + 4B957AC22AC7AE700062CA31 /* FindInPageViewController.swift in Sources */, + 4B957AC32AC7AE700062CA31 /* Cryptography.swift in Sources */, + 9FBD84542BB3AACB00220859 /* AttributionOriginFileProvider.swift in Sources */, + 4B957AC42AC7AE700062CA31 /* BWVault.swift in Sources */, + 4B957AC52AC7AE700062CA31 /* NSViewExtension.swift in Sources */, + BBDFDC5C2B2B8D7000F62D90 /* DataBrokerProtectionExternalWaitlistPixels.swift in Sources */, + 9FA173E52B7A12B600EE4E6E /* BookmarkDialogFolderManagementView.swift in Sources */, + 4B957AC72AC7AE700062CA31 /* DownloadListViewModel.swift in Sources */, + 4B957AC82AC7AE700062CA31 /* BookmarkManagementDetailViewController.swift in Sources */, + 4B957AC92AC7AE700062CA31 /* CSVImporter.swift in Sources */, + 4B957ACA2AC7AE700062CA31 /* StartupPreferences.swift in Sources */, + 4B957ACB2AC7AE700062CA31 /* UserDefaults+NetworkProtectionWaitlist.swift in Sources */, + 4B957ACC2AC7AE700062CA31 /* MainMenu.swift in Sources */, + 4B957ACE2AC7AE700062CA31 /* BrowserTabViewController.swift in Sources */, + 4B957ACF2AC7AE700062CA31 /* CallToAction.swift in Sources */, + 4B957AD02AC7AE700062CA31 /* MouseOverView.swift in Sources */, + 4B957AD12AC7AE700062CA31 /* EncryptedHistoryStore.swift in Sources */, + 4B957AD22AC7AE700062CA31 /* FirePopoverCollectionViewItem.swift in Sources */, + 4B957AD32AC7AE700062CA31 /* ArrayExtension.swift in Sources */, + 4B957AD42AC7AE700062CA31 /* NetworkProtectionInviteCodeViewModel.swift in Sources */, + 4B957AD52AC7AE700062CA31 /* CrashReportSender.swift in Sources */, + B6BCC5212AFCD9ED002C5499 /* DataImportSourcePicker.swift in Sources */, + 4B957AD62AC7AE700062CA31 /* BookmarkHTMLImporter.swift in Sources */, + 4B957AD72AC7AE700062CA31 /* CustomRoundedCornersShape.swift in Sources */, + 4B957AD82AC7AE700062CA31 /* LocaleExtension.swift in Sources */, + 4B957AD92AC7AE700062CA31 /* SavePaymentMethodViewController.swift in Sources */, + 9FA173E92B7B122E00EE4E6E /* BookmarkDialogStackedContentView.swift in Sources */, + 4B957ADA2AC7AE700062CA31 /* BWStatus.swift in Sources */, + 4B957ADB2AC7AE700062CA31 /* WebKitVersionProvider.swift in Sources */, + B6BCC54D2AFDF24B002C5499 /* TaskWithProgress.swift in Sources */, + 4B957ADC2AC7AE700062CA31 /* NSCoderExtensions.swift in Sources */, + 4B957ADD2AC7AE700062CA31 /* RunningApplicationCheck.swift in Sources */, + 4B957ADE2AC7AE700062CA31 /* StatePersistenceService.swift in Sources */, + 4B957ADF2AC7AE700062CA31 /* WindowManager+StateRestoration.swift in Sources */, + 4B957AE02AC7AE700062CA31 /* TabCollection+NSSecureCoding.swift in Sources */, + 4B957AE12AC7AE700062CA31 /* Instruments.swift in Sources */, + 4B957AE22AC7AE700062CA31 /* ContentBlockerRulesLists.swift in Sources */, + 4B957AE32AC7AE700062CA31 /* NSViewControllerExtension.swift in Sources */, + 4B957AE42AC7AE700062CA31 /* NSAppearanceExtension.swift in Sources */, + 4B957AE52AC7AE700062CA31 /* EmailManagerExtension.swift in Sources */, + 4B957AE62AC7AE700062CA31 /* PermissionManager.swift in Sources */, + 4B957AE72AC7AE700062CA31 /* DefaultBrowserPreferences.swift in Sources */, + 4B957AE82AC7AE700062CA31 /* Permissions.xcdatamodeld in Sources */, + 4B957AE92AC7AE700062CA31 /* JSAlertController.swift in Sources */, + 4B957AEA2AC7AE700062CA31 /* NotificationService.swift in Sources */, + 4B41EDA92B1543C9001EEDF4 /* PreferencesVPNView.swift in Sources */, + 4B957AEB2AC7AE700062CA31 /* SyncPreferences.swift in Sources */, + 4B957AEC2AC7AE700062CA31 /* FaviconNullStore.swift in Sources */, + 4B957AED2AC7AE700062CA31 /* PaddedImageButton.swift in Sources */, + 4B957AEE2AC7AE700062CA31 /* EncryptionKeyStoring.swift in Sources */, + 4B957AEF2AC7AE700062CA31 /* String+Punycode.swift in Sources */, + 4B957AF02AC7AE700062CA31 /* NSException+Catch.m in Sources */, + 4B957AF12AC7AE700062CA31 /* AppStateRestorationManager.swift in Sources */, + 4B957AF22AC7AE700062CA31 /* DailyPixel.swift in Sources */, + 9FDA6C232B79A59D00E099A9 /* BookmarkFavoriteView.swift in Sources */, + 4B957AF32AC7AE700062CA31 /* NavigationHotkeyHandler.swift in Sources */, + B6CC266E2BAD9CD800F53F8D /* FileProgressPresenter.swift in Sources */, + 4B957AF42AC7AE700062CA31 /* ClickToLoadUserScript.swift in Sources */, + 4B957AF52AC7AE700062CA31 /* WindowControllersManager.swift in Sources */, + 4B957AF62AC7AE700062CA31 /* FireAnimationView.swift in Sources */, + 4B957AF72AC7AE700062CA31 /* FaviconUrlReference.swift in Sources */, + 4B957AF92AC7AE700062CA31 /* PasswordManagementItemListModel.swift in Sources */, + 4B957AFA2AC7AE700062CA31 /* SuggestionTableCellView.swift in Sources */, + 4B957AFB2AC7AE700062CA31 /* FireViewModel.swift in Sources */, + 4B957AFC2AC7AE700062CA31 /* SyncCredentialsAdapter.swift in Sources */, + 4B957AFD2AC7AE700062CA31 /* WKUserContentControllerExtension.swift in Sources */, + 4B957AFE2AC7AE700062CA31 /* EditableTextView.swift in Sources */, + 1E559BB32BBCA9F1002B4AF6 /* RedirectNavigationResponder.swift in Sources */, + 4B957AFF2AC7AE700062CA31 /* TabCollection.swift in Sources */, + 4B957B002AC7AE700062CA31 /* MainView.swift in Sources */, + 4B957B012AC7AE700062CA31 /* Tab+Navigation.swift in Sources */, + 4B957B022AC7AE700062CA31 /* EmailUrlExtensions.swift in Sources */, + 4B957B032AC7AE700062CA31 /* PasswordManagementItemModel.swift in Sources */, + 4B957B042AC7AE700062CA31 /* UpdateController.swift in Sources */, + 4B957B052AC7AE700062CA31 /* FindInPageModel.swift in Sources */, + 4B957B062AC7AE700062CA31 /* PseudoFolder.swift in Sources */, + 4B2F565D2B38F93E001214C0 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */, + 4B957B082AC7AE700062CA31 /* PixelDataStore.swift in Sources */, + 4B957B092AC7AE700062CA31 /* WaitlistStorage.swift in Sources */, + 4B957B0A2AC7AE700062CA31 /* Pixel.swift in Sources */, + 4B957B0B2AC7AE700062CA31 /* PixelEvent.swift in Sources */, + 4B957B0C2AC7AE700062CA31 /* TabBarFooter.swift in Sources */, + C168B9AE2B31DC7F001AFAD9 /* AutofillNeverPromptWebsitesManager.swift in Sources */, + 4B957B0D2AC7AE700062CA31 /* JSAlertViewModel.swift in Sources */, + 4B957B0E2AC7AE700062CA31 /* BookmarksBarCollectionViewItem.swift in Sources */, + B69A14FC2B4D705D00B9417D /* BookmarkFolderPicker.swift in Sources */, + 4B957B0F2AC7AE700062CA31 /* FileDownloadError.swift in Sources */, + 4B957B102AC7AE700062CA31 /* MoreOrLessView.swift in Sources */, + 4B957B122AC7AE700062CA31 /* History.xcdatamodeld in Sources */, + 4B957B132AC7AE700062CA31 /* PermissionStore.swift in Sources */, + EEC4A6612B277F1100F7C0AA /* NetworkProtectionVPNCountryLabelsModel.swift in Sources */, + 4B957B142AC7AE700062CA31 /* PrivacyIconViewModel.swift in Sources */, + 4B957B152AC7AE700062CA31 /* ChromiumBookmarksReader.swift in Sources */, + B66CA4212AD910B300447CF0 /* DataImportView.swift in Sources */, + 4B957B162AC7AE700062CA31 /* Downloads.xcdatamodeld in Sources */, + 4B957B172AC7AE700062CA31 /* TabPreviewViewController.swift in Sources */, + 4B957B182AC7AE700062CA31 /* PreferencesDataClearingView.swift in Sources */, + 4B957B182AC7AE700062CA31 /* PreferencesDataClearingView.swift in Sources */, + 4B957B192AC7AE700062CA31 /* NSPasteboardExtension.swift in Sources */, + 4B957B1A2AC7AE700062CA31 /* OnboardingViewModel.swift in Sources */, + F1B33DF42BAD929D001128B3 /* SubscriptionAppStoreRestorer.swift in Sources */, + 4B957B1B2AC7AE700062CA31 /* ScriptSourceProviding.swift in Sources */, + 4B957B1C2AC7AE700062CA31 /* CoreDataBookmarkImporter.swift in Sources */, + 4B957B1D2AC7AE700062CA31 /* SuggestionViewModel.swift in Sources */, + 4B957B1E2AC7AE700062CA31 /* BookmarkManagedObject.swift in Sources */, + 4B957B1F2AC7AE700062CA31 /* CSVLoginExporter.swift in Sources */, + 4B957B202AC7AE700062CA31 /* NSAttributedStringExtension.swift in Sources */, + 4B957B212AC7AE700062CA31 /* AnimationView.swift in Sources */, + 4B957B222AC7AE700062CA31 /* NSRectExtension.swift in Sources */, + 4B957B232AC7AE700062CA31 /* WaitlistRootView.swift in Sources */, + 4B957B242AC7AE700062CA31 /* YoutubeOverlayUserScript.swift in Sources */, + 4B957B252AC7AE700062CA31 /* DictionaryExtension.swift in Sources */, + 4B957B262AC7AE700062CA31 /* Publishers.NestedObjectChanges.swift in Sources */, + 4B957B272AC7AE700062CA31 /* MenuItemSelectors.swift in Sources */, + 4B957B282AC7AE700062CA31 /* FaviconView.swift in Sources */, + 4B957B292AC7AE700062CA31 /* OnboardingFlow.swift in Sources */, + 4B957B2A2AC7AE700062CA31 /* PasswordManagementLoginModel.swift in Sources */, + 4B957B2B2AC7AE700062CA31 /* TabViewModel.swift in Sources */, + 4B957B2C2AC7AE700062CA31 /* TabDragAndDropManager.swift in Sources */, + B677FC572B064A9C0099EB04 /* DataImportViewModel.swift in Sources */, + 4B957B2D2AC7AE700062CA31 /* NSNotificationName+Favicons.swift in Sources */, + 4B957B2E2AC7AE700062CA31 /* PinningManager.swift in Sources */, + 4B957B2F2AC7AE700062CA31 /* SyncMetadataDatabase.swift in Sources */, + 4B957B302AC7AE700062CA31 /* TabCollectionViewModel+NSSecureCoding.swift in Sources */, + 4B957B312AC7AE700062CA31 /* StringExtension.swift in Sources */, + 4B957B322AC7AE700062CA31 /* EmailManagerRequestDelegate.swift in Sources */, + 4B957B332AC7AE700062CA31 /* ApplicationVersionReader.swift in Sources */, + 4B957B342AC7AE700062CA31 /* BookmarksBarViewController.swift in Sources */, + 4B957B352AC7AE700062CA31 /* PreferencesAutofillView.swift in Sources */, + 4B957B362AC7AE700062CA31 /* BurnerHomePageView.swift in Sources */, + 4B957B372AC7AE700062CA31 /* UserText+PasswordManager.swift in Sources */, + 4B957B382AC7AE700062CA31 /* LoadingProgressView.swift in Sources */, + 7BEC20472B0F505F00243D3E /* AddBookmarkFolderPopoverView.swift in Sources */, + 4B957B392AC7AE700062CA31 /* StatisticsStore.swift in Sources */, + EEC4A66B2B2C87D300F7C0AA /* VPNLocationView.swift in Sources */, + 4B957B3A2AC7AE700062CA31 /* BWInstallationService.swift in Sources */, + 4B957B3B2AC7AE700062CA31 /* BookmarksBarPromptPopover.swift in Sources */, + 4B957B3C2AC7AE700062CA31 /* NetworkProtectionInvitePresenter.swift in Sources */, + 4B957B3D2AC7AE700062CA31 /* ColorView.swift in Sources */, + 4B957B3E2AC7AE700062CA31 /* RecentlyClosedCacheItem.swift in Sources */, + 4B957B3F2AC7AE700062CA31 /* PopupBlockedPopover.swift in Sources */, + 4B957B402AC7AE700062CA31 /* SaveCredentialsPopover.swift in Sources */, + 4B957B412AC7AE700062CA31 /* LegacyBookmarksStoreMigration.swift in Sources */, + 4B957B422AC7AE700062CA31 /* QuartzIdleStateProvider.swift in Sources */, + 4B957B432AC7AE700062CA31 /* DuckPlayerPreferences.swift in Sources */, + 4B957B442AC7AE700062CA31 /* DownloadViewModel.swift in Sources */, + 4B957B452AC7AE700062CA31 /* BookmarkHTMLReader.swift in Sources */, + 4B957B462AC7AE700062CA31 /* Tab+NSSecureCoding.swift in Sources */, + 4B957B472AC7AE700062CA31 /* NSNotificationName+EmailManager.swift in Sources */, + B6619EFE2B111CCC00CD9186 /* InstructionsFormatParser.swift in Sources */, + 1DDD3EC22B84F5D5004CBF2B /* PreferencesCookiePopupProtectionView.swift in Sources */, + 4B957B482AC7AE700062CA31 /* MouseOverButton.swift in Sources */, + 4B957B492AC7AE700062CA31 /* FireInfoViewController.swift in Sources */, + 4B957B4A2AC7AE700062CA31 /* LoginItem+NetworkProtection.swift in Sources */, + B6C8CAAA2AD010DD0060E1CD /* YandexDataImporter.swift in Sources */, + 4B957B4B2AC7AE700062CA31 /* PermissionButton.swift in Sources */, + 4B957B4C2AC7AE700062CA31 /* MoreOptionsMenu.swift in Sources */, + 4B957B4D2AC7AE700062CA31 /* PermissionAuthorizationViewController.swift in Sources */, + EE6666712B56EDE4001D898D /* VPNLocationsHostingViewController.swift in Sources */, + 4B957B4E2AC7AE700062CA31 /* BookmarkNode.swift in Sources */, + 4B957B4F2AC7AE700062CA31 /* LongPressButton.swift in Sources */, + 4B957B502AC7AE700062CA31 /* CoreDataStore.swift in Sources */, + 4B957B512AC7AE700062CA31 /* BundleExtension.swift in Sources */, + 4B957B522AC7AE700062CA31 /* NSOpenPanelExtensions.swift in Sources */, + EEC4A66F2B2C894F00F7C0AA /* VPNLocationPreferenceItemModel.swift in Sources */, + 4B957B532AC7AE700062CA31 /* FirePopover.swift in Sources */, + 4B957B552AC7AE700062CA31 /* NetworkProtectionOnboardingMenu.swift in Sources */, + 4B957B562AC7AE700062CA31 /* VariantManager.swift in Sources */, + 4B957B572AC7AE700062CA31 /* ApplicationDockMenu.swift in Sources */, + 4B957B582AC7AE700062CA31 /* SaveIdentityViewController.swift in Sources */, + 4B957B592AC7AE700062CA31 /* AppLauncher.swift in Sources */, + 4B957B5A2AC7AE700062CA31 /* FileStore.swift in Sources */, + 1DB67F2F2B6FEFDB003DF243 /* ViewSnapshotRenderer.swift in Sources */, + 4B957B5B2AC7AE700062CA31 /* PixelArguments.swift in Sources */, + 4B957B5C2AC7AE700062CA31 /* PinnedTabsViewModel.swift in Sources */, + 4B957B5D2AC7AE700062CA31 /* BookmarkList.swift in Sources */, + 4B957B5E2AC7AE700062CA31 /* NEOnDemandRuleExtension.swift in Sources */, + 1DB67F2B2B6FEB19003DF243 /* WebViewSnapshotRenderer.swift in Sources */, + 4B957B5F2AC7AE700062CA31 /* BookmarkTableRowView.swift in Sources */, + 4B957B602AC7AE700062CA31 /* FavoritesView.swift in Sources */, + 3158B1522B0BF75400AF130C /* DataBrokerProtectionLoginItemScheduler.swift in Sources */, + 4B957B612AC7AE700062CA31 /* HomePage.swift in Sources */, + 4B957B622AC7AE700062CA31 /* RoundedSelectionRowView.swift in Sources */, + B6A22B652B1E29D000ECD2BA /* DataImportSummaryViewModel.swift in Sources */, + 9FA173E12B7A0EFE00EE4E6E /* BookmarkDialogButtonsView.swift in Sources */, + 4B957B632AC7AE700062CA31 /* LocalStatisticsStore.swift in Sources */, + 4B957B642AC7AE700062CA31 /* BackForwardListItem.swift in Sources */, + 4B957B672AC7AE700062CA31 /* AtbAndVariantCleanup.swift in Sources */, + 4B957B692AC7AE700062CA31 /* FeedbackWindow.swift in Sources */, + 4B957B6A2AC7AE700062CA31 /* WorkspaceProtocol.swift in Sources */, + 4B957B6B2AC7AE700062CA31 /* RecentlyVisitedView.swift in Sources */, + 4B957B6C2AC7AE700062CA31 /* MouseOverAnimationButton.swift in Sources */, + 4B957B6D2AC7AE700062CA31 /* TabBarScrollView.swift in Sources */, + B6B5F5822B024105008DB58A /* DataImportSummaryView.swift in Sources */, + B684121E2B6A1D880092F66A /* ErrorPageHTMLTemplate.swift in Sources */, + 4B957B6E2AC7AE700062CA31 /* BookmarkListTreeControllerDataSource.swift in Sources */, + 4B957B6F2AC7AE700062CA31 /* AddressBarViewController.swift in Sources */, + 4B957B702AC7AE700062CA31 /* Permissions.swift in Sources */, + 4B957B712AC7AE700062CA31 /* TabPreviewWindowController.swift in Sources */, + 4B957B722AC7AE700062CA31 /* NSSizeExtension.swift in Sources */, + 4B957B732AC7AE700062CA31 /* Fire.swift in Sources */, + 1DDC84FD2B8356CE00670238 /* PreferencesDefaultBrowserView.swift in Sources */, + 4B957B742AC7AE700062CA31 /* SyncBookmarksAdapter.swift in Sources */, + B6ABC5982B4861D4008343B9 /* FocusableTextField.swift in Sources */, + 4B957B752AC7AE700062CA31 /* RandomAccessCollectionExtension.swift in Sources */, + 4B957B762AC7AE700062CA31 /* NSOutlineViewExtensions.swift in Sources */, + 4B957B772AC7AE700062CA31 /* AppDelegate.swift in Sources */, + 4B957B782AC7AE700062CA31 /* ContentOverlayViewController.swift in Sources */, + 4B957B792AC7AE700062CA31 /* ContentBlockingTabExtension.swift in Sources */, + 4B957B7A2AC7AE700062CA31 /* OnboardingViewController.swift in Sources */, + B68412292B6A68C90092F66A /* WKBackForwardListItemExtension.swift in Sources */, + 4B957B7B2AC7AE700062CA31 /* DeviceAuthenticator.swift in Sources */, + 4B957B7C2AC7AE700062CA31 /* NetworkProtectionWaitlistFeatureFlagOverridesMenu.swift in Sources */, + 4B957B7D2AC7AE700062CA31 /* TabBarCollectionView.swift in Sources */, + C1DAF3B72B9A44860059244F /* AutofillPopoverPresenter.swift in Sources */, + 4B957B7E2AC7AE700062CA31 /* NetworkProtection+ConvenienceInitializers.swift in Sources */, + 7BA7CC502AD11F6F0042E5CE /* NetworkProtectionIPCTunnelController.swift in Sources */, + 4B957B7F2AC7AE700062CA31 /* NavigationActionExtension.swift in Sources */, + F1B33DF82BAD970E001128B3 /* SubscriptionErrorReporter.swift in Sources */, + 4B957B802AC7AE700062CA31 /* NSAlertExtension.swift in Sources */, + 4B957B812AC7AE700062CA31 /* ThirdPartyBrowser.swift in Sources */, + 4B957B822AC7AE700062CA31 /* SearchNonexistentDomainNavigationResponder.swift in Sources */, + 4B6B64862BA930420009FF9F /* WaitlistThankYouPromptPresenter.swift in Sources */, + B6B71C5A2B23379600487131 /* NSLayoutConstraintExtension.swift in Sources */, + B65211272B29A43000B30633 /* BookmarkStoreMock.swift in Sources */, + 4B957B832AC7AE700062CA31 /* CircularProgressView.swift in Sources */, + 4B957B842AC7AE700062CA31 /* SuggestionContainer.swift in Sources */, + 4B957B852AC7AE700062CA31 /* FindInPageTabExtension.swift in Sources */, + 4B957B862AC7AE700062CA31 /* HomePageViewController.swift in Sources */, + 4B957B882AC7AE700062CA31 /* OperatingSystemVersionExtension.swift in Sources */, + 4B957B892AC7AE700062CA31 /* ToggleableScrollView.swift in Sources */, + 4B957B8A2AC7AE700062CA31 /* TabCleanupPreparer.swift in Sources */, + 4B37EE7B2B4CFF7C00A89A61 /* HomePageRemoteMessagingStorage.swift in Sources */, + 4B957B8B2AC7AE700062CA31 /* NetworkProtectionOptionKeyExtension.swift in Sources */, + 372A0FEE2B2379310033BF7F /* SyncMetricsEventsHandler.swift in Sources */, + 316850702AF3AD1D009A2828 /* WaitlistViewControllerPresenter.swift in Sources */, + 1E2AE4CB2ACB21C800684E0A /* HardwareModel.swift in Sources */, + 4B957B8C2AC7AE700062CA31 /* UserScripts.swift in Sources */, + 4B957B8D2AC7AE700062CA31 /* NSWorkspaceExtension.swift in Sources */, + 4B957B8E2AC7AE700062CA31 /* AutofillTabExtension.swift in Sources */, + 4B957B8F2AC7AE700062CA31 /* Assertions.swift in Sources */, + 4B0EF7282B5780AB009D6481 /* AppVersionExtension.swift in Sources */, + 4B957B902AC7AE700062CA31 /* BookmarkViewModel.swift in Sources */, + 4B957B912AC7AE700062CA31 /* DaxSpeech.swift in Sources */, + BB5789732B2CC0300009DFE2 /* DataBrokerProtectionSubscriptionEventHandler.swift in Sources */, + 4B957B922AC7AE700062CA31 /* DuckURLSchemeHandler.swift in Sources */, + 4B957B932AC7AE700062CA31 /* FirePopoverViewModel.swift in Sources */, + 4B957B942AC7AE700062CA31 /* BWCommand.swift in Sources */, + 4B957B952AC7AE700062CA31 /* NSColorExtension.swift in Sources */, + 4B957B972AC7AE700062CA31 /* AddressBarButtonsViewController.swift in Sources */, + 4B957B982AC7AE700062CA31 /* BWError.swift in Sources */, + 4B957B9A2AC7AE700062CA31 /* PixelDataRecord.swift in Sources */, + 4B957B9B2AC7AE700062CA31 /* PageObserverUserScript.swift in Sources */, + 4B957B9C2AC7AE700062CA31 /* SecureVaultErrorReporter.swift in Sources */, + 4B68DDFF2ACBA14100FB0973 /* FileLineError.swift in Sources */, + 4B957B9D2AC7AE700062CA31 /* NSImageExtensions.swift in Sources */, + 4B957B9E2AC7AE700062CA31 /* WaitlistKeychainStorage.swift in Sources */, + B69A14F82B4D701F00B9417D /* AddBookmarkPopoverViewModel.swift in Sources */, + 4B957B9F2AC7AE700062CA31 /* PasswordManagementViewController.swift in Sources */, + 4B957BA02AC7AE700062CA31 /* ImportedBookmarks.swift in Sources */, + 4B957BA12AC7AE700062CA31 /* UserDefaults+NetworkProtectionShared.swift in Sources */, + 4B957BA22AC7AE700062CA31 /* NavigationActionPolicyExtension.swift in Sources */, + 4B957BA32AC7AE700062CA31 /* CIImageExtension.swift in Sources */, + 9F56CFAB2B82DC4300BB7F11 /* AddEditBookmarkFolderView.swift in Sources */, + 9FA173DC2B79BD8A00EE4E6E /* BookmarkDialogContainerView.swift in Sources */, + 4B957BA42AC7AE700062CA31 /* NSMenuExtension.swift in Sources */, + 4B957BA52AC7AE700062CA31 /* MainWindowController.swift in Sources */, + 4B957BA62AC7AE700062CA31 /* Tab.swift in Sources */, + 4B957BA72AC7AE700062CA31 /* ConnectBitwardenView.swift in Sources */, + 4B957BA82AC7AE700062CA31 /* DispatchQueueExtensions.swift in Sources */, + 4B957BA92AC7AE700062CA31 /* BookmarksBarAppearance.swift in Sources */, + 31C9ADE82AF0564500CEF57D /* WaitlistFeatureSetupHandler.swift in Sources */, + 3158B1472B0BF72E00AF130C /* DBPHomeViewController.swift in Sources */, + 4B957BAA2AC7AE700062CA31 /* PermissionAuthorizationPopover.swift in Sources */, + 4B957BAB2AC7AE700062CA31 /* PopoverMessageViewController.swift in Sources */, + 4B957BAC2AC7AE700062CA31 /* WebView.swift in Sources */, + 4B957BAD2AC7AE700062CA31 /* ShadowView.swift in Sources */, + 4B957BAE2AC7AE700062CA31 /* FeedbackSender.swift in Sources */, + 4B957BAF2AC7AE700062CA31 /* TabExtensions.swift in Sources */, + 4B957BB02AC7AE700062CA31 /* TabBarViewItem.swift in Sources */, + 4B957BB12AC7AE700062CA31 /* NSWindow+Toast.swift in Sources */, + 4B0526652B1D55D80054955A /* VPNFeedbackCategory.swift in Sources */, + 4B957BB22AC7AE700062CA31 /* AutoconsentUserScript.swift in Sources */, + 4B957BB32AC7AE700062CA31 /* BookmarksExporter.swift in Sources */, + 4B957BB42AC7AE700062CA31 /* NetworkProtectionAppEvents.swift in Sources */, + 4B957BB52AC7AE700062CA31 /* FirefoxDataImporter.swift in Sources */, + 4B957BB62AC7AE700062CA31 /* PreferencesGeneralView.swift in Sources */, + 4B957BB72AC7AE700062CA31 /* PinnedTabsView.swift in Sources */, + 4B957BB92AC7AE700062CA31 /* SyncErrorHandler.swift in Sources */, + 4BF0E50A2AD2551A00FFEC9E /* NetworkProtectionPixelEvent.swift in Sources */, + 4B957BBA2AC7AE700062CA31 /* URLExtension.swift in Sources */, + 4B957BBB2AC7AE700062CA31 /* Tab+UIDelegate.swift in Sources */, + 4B957BBD2AC7AE700062CA31 /* NSStoryboardExtension.swift in Sources */, + 4B957BBE2AC7AE700062CA31 /* PreferencesViewController.swift in Sources */, + 4B957BBF2AC7AE700062CA31 /* FireproofDomains.swift in Sources */, + 4B957BC02AC7AE700062CA31 /* Database.swift in Sources */, + 4B957BC12AC7AE700062CA31 /* HorizontallyCenteredLayout.swift in Sources */, + 4B957BC22AC7AE700062CA31 /* BookmarksOutlineView.swift in Sources */, + 4B957BC32AC7AE700062CA31 /* CountryList.swift in Sources */, + 4B957BC42AC7AE700062CA31 /* PreferencesSection.swift in Sources */, + 4B957BC52AC7AE700062CA31 /* NetworkProtectionNavBarButtonModel.swift in Sources */, + 4B957BC62AC7AE700062CA31 /* AutoconsentManagement.swift in Sources */, + 4B957BC72AC7AE700062CA31 /* UserText+NetworkProtection.swift in Sources */, + 4B957BC82AC7AE700062CA31 /* WebViewContainerView.swift in Sources */, + 4B957BC92AC7AE700062CA31 /* BookmarkStore.swift in Sources */, + 4B957BCA2AC7AE700062CA31 /* PrivacyDashboardViewController.swift in Sources */, + 37A6A8F42AFCC988008580A3 /* FaviconsFetcherOnboarding.swift in Sources */, + 4B957BCB2AC7AE700062CA31 /* PreferencesAppearanceView.swift in Sources */, + 4B957BCC2AC7AE700062CA31 /* NSMenuItemExtension.swift in Sources */, + 4B957BCD2AC7AE700062CA31 /* ContiguousBytesExtension.swift in Sources */, + 7B7FCD112BA33B2700C04FBE /* UserDefaults+vpnLegacyUser.swift in Sources */, + 4B957BCE2AC7AE700062CA31 /* AdjacentItemEnumerator.swift in Sources */, + 4B957BCF2AC7AE700062CA31 /* BookmarkDatabase.swift in Sources */, + 4B957BD02AC7AE700062CA31 /* ChromiumKeychainPrompt.swift in Sources */, + 4B957BD12AC7AE700062CA31 /* WKProcessPool+GeolocationProvider.swift in Sources */, + 4B957BD22AC7AE700062CA31 /* RecentlyClosedMenu.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 565E46D92B2725DC0013AC2A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -10843,6 +11627,7 @@ 4BE6547E271FCD4D008D1D63 /* PasswordManagementIdentityModel.swift in Sources */, 85C6A29625CC1FFD00EEB5F1 /* UserDefaultsWrapper.swift in Sources */, 85625998269C9C5F00EE44BC /* PasswordManagementPopover.swift in Sources */, + EAF52F4F2B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */, 1DDF076328F815AD00EDFBE3 /* BWCommunicator.swift in Sources */, 9FEE98652B846870002E44E8 /* AddEditBookmarkView.swift in Sources */, 85589E9127BFB9810038AD11 /* HomePageRecentlyVisitedModel.swift in Sources */, diff --git a/DuckDuckGo/ContentBlocker/ClickToLoadModel.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadModel.swift similarity index 99% rename from DuckDuckGo/ContentBlocker/ClickToLoadModel.swift rename to DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadModel.swift index 863b9d1018..5d51eed550 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoadModel.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadModel.swift @@ -20,6 +20,7 @@ import Foundation struct ClickToLoadModel { + // DELETE ME! private static func loadFile(name: String) -> String? { let pathPrefix = "social_images/" let fileArgs = name.split(separator: ".") diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift new file mode 100644 index 0000000000..83290bae47 --- /dev/null +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift @@ -0,0 +1,306 @@ +// +// ClickToLoadUserScript.swift +// +// Copyright © 2021 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import WebKit +import Common +import UserScript + +protocol ClickToLoadUserScriptDelegate: AnyObject { + + func clickToLoadUserScriptAllowFB() -> Bool +} + +final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { + + weak var broker: UserScriptMessageBroker? + weak var webView: WKWebView? + + weak var delegate: ClickToLoadUserScriptDelegate? + +#if DEBUG + var devMode: Bool = true +#else + var devMode: Bool = false +#endif + + // this isn't an issue to be set to 'all' because the page + public let messageOriginPolicy: MessageOriginPolicy = .all + public let featureName: String = "clickToLoad" + + // MARK: - Subfeature + + public func with(broker: UserScriptMessageBroker) { + self.broker = broker + } + + // MARK: - MessageNames + + enum MessageNames: String, CaseIterable { + case getClickToLoadState + case unblockClickToLoadContent + case updateFacebookCTLBreakageFlags + case addDebugFlag + } + + public func handler(forMethodNamed methodName: String) -> Handler? { + switch MessageNames(rawValue: methodName) { + case .getClickToLoadState: + return handleGetClickToLoadState + case .unblockClickToLoadContent: + return handleUnblockClickToLoadContent + case .updateFacebookCTLBreakageFlags: + return handleDebugFlagsMock + case .addDebugFlag: + return handleDebugFlagsMock + default: + assertionFailure("ClickToLoadUserScript: Failed to parse User Script message: \(methodName)") + return nil + } + } + + private func handleGetClickToLoadState(params: Any, message: UserScriptMessage) -> Encodable? { + webView = message.messageWebView + print("handleGetClickToLoadState for url \(String(describing: message)) for webView \(webView?.url)") + return [ + "devMode": devMode, + "youtubePreviewsEnabled": false + ] + } + + private func handleUnblockClickToLoadContent(params: Any, message: UserScriptMessage) -> Encodable? { + struct UnblockMessage: Decodable { + let action: String + let isLogin: Bool + let isSurrogateLogin: Bool + let entity: String + } + + guard let delegate = delegate else { return false } + + // only worry about CTL FB for now + return delegate.clickToLoadUserScriptAllowFB() + } + + private func handleDebugFlagsMock(params: Any, message: UserScriptMessage) -> Encodable? { + // breakage flags not supported on Mac yet + return nil + } + + // swiftlint:disable function_body_length + public func displayClickToLoadPlaceholders() { + print("displayClickToLoadPlaceholders for url \(String(describing: webView?.url)) for broker \(broker)") + if let webView = webView { + let fbSurrogate = """ + (() => { + 'use strict'; + console.warn('fb-sdk document.currentScript.src', document.currentScript, document.currentScript?.src); + console.warn('in fbSurrogate, location is', window.location.href); + debugger; + return; + window.fbTest = "inline surrogate"; + const facebookEntity = 'Facebook, Inc.'; + const originalFBURL = 'https://connect.facebook.net/en_US/sdk.js?XFBML=false' //FIXME: document.currentScript.src; + let siteInit = function () {}; + let fbIsEnabled = false; + let initData = {}; + let runInit = false; + const parseCalls = []; + const popupName = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 12); + const fbLogin = { + callback: function () {}, + params: undefined, + shouldRun: false + }; + function messageAddon (detailObject) { + detailObject.entity = facebookEntity; + const event = new CustomEvent('ddg-ctp', { + detail: detailObject, + bubbles: false, + cancelable: false, + composed: false + }); + dispatchEvent(event); + } + /** + * When setting up the Facebook SDK, the site may define a function called window.fbAsyncInit. + * Once the SDK loads, it searches for and calls window.fbAsyncInit. However, some sites may + * not use this, and just call FB.init directly at some point (after ensuring that the script has loaded). + * + * Our surrogate (defined below in window.FB) captures calls made to init by page scripts. If at a + * later point we load the real sdk here, we then re-call init with whatever arguments the page passed in + * originally. The runInit param should be true when a page has called init directly. + * Because we put it in asyncInit, the flow will be something like: + * + * FB SDK loads -> SDK calls window.fbAsyncInit -> Our function calls window.FB.init (maybe) -> + * our function calls original fbAsyncInit (if it existed) + */ + function enableFacebookSDK () { + if (!fbIsEnabled) { + window.FB = undefined; + window.fbAsyncInit = function () { + if (runInit && initData) { + window.FB.init(initData); + } + siteInit(); + if (fbLogin.shouldRun) { + window.FB.login(fbLogin.callback, fbLogin.params); + } + }; + const fbScript = document.createElement('script'); + fbScript.setAttribute('crossorigin', 'anonymous'); + fbScript.setAttribute('async', ''); + fbScript.setAttribute('defer', ''); + fbScript.src = originalFBURL; + fbScript.onload = function () { + for (const node of parseCalls) { + window.FB.XFBML.parse.apply(window.FB.XFBML, node); + } + }; + document.head.appendChild(fbScript); + fbIsEnabled = true; + } else { + if (initData) { + window.FB.init(initData); + } + } + } + function runFacebookLogin () { + fbLogin.shouldRun = true; + replaceWindowOpen(); + loginPopup(); + enableFacebookSDK(); + } + function replaceWindowOpen () { + const oldOpen = window.open; + window.open = function (url, name, windowParams) { + const u = new URL(url); + if (u.origin === 'https://www.facebook.com') { + name = popupName; + } + return oldOpen.call(window, url, name, windowParams); + }; + } + function loginPopup () { + const width = Math.min(window.screen.width, 450); + const height = Math.min(window.screen.height, 450); + const popupParams = `width=${width},height=${height},scrollbars=1,location=1`; + window.open('about:blank', popupName, popupParams); + } + window.addEventListener('ddg-ctp-load-sdk', event => { + if (event.detail.entity === facebookEntity) { + enableFacebookSDK(); + } + }); + window.addEventListener('ddg-ctp-run-login', event => { + if (event.detail.entity === facebookEntity) { + runFacebookLogin(); + } + }); + window.addEventListener('ddg-ctp-cancel-modal', event => { + if (event.detail.entity === facebookEntity) { + fbLogin.callback({ }); + } + }); + // Instead of using fbAsyncInit, some websites create a list of FB API calls + // that should be made after init. + const bufferCalls = window.FB && window.FB.__buffer && window.FB.__buffer.calls; + function init () { + if (window.fbAsyncInit) { + siteInit = window.fbAsyncInit; + window.fbAsyncInit(); + } + if (bufferCalls) { + for (const [method, params] of bufferCalls) { + if (Object.prototype.hasOwnProperty.call(window.FB, method)) { + window.FB[method].apply(window.FB, params); + } + } + } + } + if (!window.FB || window.FB.__buffer) { + window.FB = { + api: function (url, cb) { cb(); }, + init: function (obj) { + if (obj) { + initData = obj; + runInit = true; + messageAddon({ + appID: obj.appId + }); + } + }, + ui: function (obj, cb) { + if (obj.method && obj.method === 'share') { + const shareLink = 'https://www.facebook.com/sharer/sharer.php?u=' + obj.href; + window.open(shareLink, 'share-facebook', 'width=550,height=235'); + } + // eslint-disable-next-line node/no-callback-literal + cb({}); + }, + getAccessToken: function () {}, + getAuthResponse: function () { + return { status: '' }; + }, + // eslint-disable-next-line node/no-callback-literal + getLoginStatus: function (callback) { callback({ status: 'unknown' }); }, + getUserID: function () {}, + login: function (cb, params) { + fbLogin.callback = cb; + fbLogin.params = params; + messageAddon({ + action: 'login' + }); + }, + logout: function () {}, + AppEvents: { + EventNames: {}, + logEvent: function (a, b, c) {}, + logPageView: function () {} + }, + Event: { + subscribe: function (event, callback) { + if (event === 'xfbml.render') { + callback(); + } + }, + unsubscribe: function () {} + }, + XFBML: { + parse: function (n) { + parseCalls.push(n); + } + } + }; + if (document.readyState === 'complete') { + init(); + } else { + // sdk script loaded before page content, so wait for load. + window.addEventListener('load', (event) => { + init(); + }); + } + } + window.dispatchEvent(new CustomEvent('ddg-ctp-surrogate-load')); + console.warn('dispatched event'); + })(); + """ + broker?.push(method: "displayClickToLoadPlaceholders", params: ["ruleAction": ["block"]], for: self, into: webView) + webView.evaluateJavaScript(fbSurrogate, in: nil, in: WKContentWorld.page) + } + } +} diff --git a/DuckDuckGo/ContentBlocker/clickToLoad.js b/DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoad.js similarity index 99% rename from DuckDuckGo/ContentBlocker/clickToLoad.js rename to DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoad.js index 0cdcdc567f..2238de1f3c 100644 --- a/DuckDuckGo/ContentBlocker/clickToLoad.js +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoad.js @@ -2,13 +2,15 @@ // function sendMessage (messageType, options, callback) { // TODO chrome.runtime.sendMessage({ messageType, options }, callback) // } + + // LDA DISABLED let appID const loadingImages = { darkMode: '', lightMode: '' } let logoImg - const titleID = 'DuckDuckGoPrivacyEssentialsCTLElementTitle' + const titleID = 'DuckDuckGoPrivacyEssentialsCTLElementTitle_LDATEST_EMBED' const entities = [] const entityData = {} const fbSurrogate = `${fb-sdk.js}` // eslint-disable-line @@ -16,6 +18,8 @@ const proximaRegFontInline = `${proximaRegFont}` // eslint-disable-line const proximaBoldFontInline = `${proximaBoldFont}` // eslint-disable-line + return; + /** * * Base64 encode / decode diff --git a/DuckDuckGo/ContentBlocker/clickToLoadConfig.json b/DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoadConfig.json similarity index 100% rename from DuckDuckGo/ContentBlocker/clickToLoadConfig.json rename to DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoadConfig.json diff --git a/DuckDuckGo/ContentBlocker/fb-sdk.js b/DuckDuckGo/ContentBlocker/ClickToLoad/fb-sdk.js similarity index 99% rename from DuckDuckGo/ContentBlocker/fb-sdk.js rename to DuckDuckGo/ContentBlocker/ClickToLoad/fb-sdk.js index 481326dead..03c1645d8b 100644 --- a/DuckDuckGo/ContentBlocker/fb-sdk.js +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/fb-sdk.js @@ -42,6 +42,7 @@ function enableFacebookSDK () { if (!fbIsEnabled) { window.FB = undefined + window.fbTest = "*** disabled surrogate ***"; window.fbAsyncInit = function () { if (runInit && initData) { window.FB.init(initData) diff --git a/DuckDuckGo/ContentBlocker/fb-tds.json b/DuckDuckGo/ContentBlocker/ClickToLoad/fb-tds.json similarity index 100% rename from DuckDuckGo/ContentBlocker/fb-tds.json rename to DuckDuckGo/ContentBlocker/ClickToLoad/fb-tds.json diff --git a/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift b/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift deleted file mode 100644 index fcf0c43b74..0000000000 --- a/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift +++ /dev/null @@ -1,108 +0,0 @@ -// -// ClickToLoadUserScript.swift -// -// Copyright © 2021 DuckDuckGo. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import WebKit -import Common -import UserScript - -protocol ClickToLoadUserScriptDelegate: AnyObject { - - func clickToLoadUserScriptAllowFB() -> Bool -} - -final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { - - weak var broker: UserScriptMessageBroker? - weak var webView: WKWebView? - - weak var delegate: ClickToLoadUserScriptDelegate? - -#if DEBUG - var devMode: Bool = true -#else - var devMode: Bool = false -#endif - - // this isn't an issue to be set to 'all' because the page - public let messageOriginPolicy: MessageOriginPolicy = .all - public let featureName: String = "clickToLoad" - - // MARK: - Subfeature - - public func with(broker: UserScriptMessageBroker) { - self.broker = broker - } - - // MARK: - MessageNames - - enum MessageNames: String, CaseIterable { - case getClickToLoadState - case unblockClickToLoadContent - case updateFacebookCTLBreakageFlags - case addDebugFlag - } - - public func handler(forMethodNamed methodName: String) -> Handler? { - switch MessageNames(rawValue: methodName) { - case .getClickToLoadState: - return handleGetClickToLoadState - case .unblockClickToLoadContent: - return handleUnblockClickToLoadContent - case .updateFacebookCTLBreakageFlags: - return handleDebugFlagsMock - case .addDebugFlag: - return handleDebugFlagsMock - default: - assertionFailure("ClickToLoadUserScript: Failed to parse User Script message: \(methodName)") - return nil - } - } - - private func handleGetClickToLoadState(params: Any, message: UserScriptMessage) -> Encodable? { - webView = message.messageWebView - return [ - "devMode": devMode, - "youtubePreviewsEnabled": false - ] - } - - private func handleUnblockClickToLoadContent(params: Any, message: UserScriptMessage) -> Encodable? { - struct UnblockMessage: Decodable { - let action: String - let isLogin: Bool - let isSurrogateLogin: Bool - let entity: String - } - - guard let delegate = delegate else { return false } - - // only worry about CTL FB for now - return delegate.clickToLoadUserScriptAllowFB() - } - - private func handleDebugFlagsMock(params: Any, message: UserScriptMessage) -> Encodable? { - // breakage flags not supported on Mac yet - return nil - } - - public func displayClickToLoadPlaceholders() { - if let webView = webView { - broker?.push(method: "displayClickToLoadPlaceholders", params: nil, for: self, into: webView) - } - } -} From 50f14111a9302d9cd9583e65bf60d16036ab7130 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Sat, 2 Mar 2024 14:52:49 -0800 Subject: [PATCH 08/60] update CTL rule management to use main TDS --- .../ClickToLoadRulesSplitter.swift | 122 ++++++++++++++++++ .../ContentBlockerRulesLists.swift | 21 +-- 2 files changed, 134 insertions(+), 9 deletions(-) create mode 100644 DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift new file mode 100644 index 0000000000..62bc7391a0 --- /dev/null +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift @@ -0,0 +1,122 @@ +// +// ClickToLoadRulesSplitter.swift +// DuckDuckGo +// +// Copyright © 2023 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import TrackerRadarKit +import BrowserServicesKit + +struct ClickToLoadRulesSplitter { + + public enum Constant { + + public static let clickToLoadRuleListPrefix = "CTL_" + + } + + private let rulesList: ContentBlockerRulesList + + init(rulesList: ContentBlockerRulesList) { + self.rulesList = rulesList + } + + func split() -> (withoutBlockCTL: ContentBlockerRulesList, withBlockCTL: ContentBlockerRulesList)? { + let splitTDS = rulesList.trackerData != nil ? split(trackerData: rulesList.trackerData!) : nil + let splitFallbackTDS = split(trackerData: rulesList.fallbackTrackerData) + + if splitTDS != nil || splitFallbackTDS != nil { + return ( + ContentBlockerRulesList(name: rulesList.name, + trackerData: splitTDS?.withoutBlockCTL ?? rulesList.trackerData, + fallbackTrackerData: splitFallbackTDS?.withoutBlockCTL ?? rulesList.fallbackTrackerData), + ContentBlockerRulesList(name: "XD", + trackerData: splitTDS?.withBlockCTL ?? rulesList.trackerData, + fallbackTrackerData: splitFallbackTDS?.withBlockCTL ?? rulesList.fallbackTrackerData) + ) + } + return nil + } + + private func split(trackerData: TrackerDataManager.DataSet) -> (withoutBlockCTL: TrackerDataManager.DataSet, withBlockCTL: TrackerDataManager.DataSet)? { + let trackersWithBlockCTL = filterTrackersByBlockCTLAction(trackerData.tds.trackers, hasBlockCTL: true) + + if !trackersWithBlockCTL.isEmpty { + let trackersWithoutBlockCTL = filterTrackersByBlockCTLAction(trackerData.tds.trackers, hasBlockCTL: false) + let trackerDataWithoutBlockCTL = makeTrackerData(using: trackersWithoutBlockCTL, originalTDS: trackerData.tds) + let trackerDataWithBlockCTL = makeTrackerData(using: trackersWithBlockCTL, originalTDS: trackerData.tds) + + return ( + (tds: trackerDataWithoutBlockCTL, etag: Constant.clickToLoadRuleListPrefix + trackerData.etag), + (tds: trackerDataWithBlockCTL, etag: Constant.clickToLoadRuleListPrefix + trackerData.etag) + ) + } + return nil + } + + private func makeTrackerData(using trackers: [String: KnownTracker], originalTDS: TrackerData) -> TrackerData { + let entities = originalTDS.extractEntities(for: trackers) + let domains = extractDomains(from: entities) + return TrackerData(trackers: trackers, + entities: entities, + domains: domains, + cnames: originalTDS.cnames) + } + + private func filterTrackersByBlockCTLAction(_ trackers: [String: KnownTracker], hasBlockCTL: Bool) -> [String: KnownTracker] { + trackers.filter { (_, tracker) in tracker.containsCTLActions == hasBlockCTL } + } + + private func extractDomains(from entities: [String: Entity]) -> [String: String] { + var domains = [String: String]() + for entity in entities { + for domain in entity.value.domains ?? [] { + domains[domain] = entity.key + } + } + return domains + } + +} + +private extension TrackerData { + + func extractEntities(for trackers: [String: KnownTracker]) -> [String: Entity] { + let trackerOwners = Set(trackers.values.compactMap { $0.owner?.name }) + let entities = entities.filter { trackerOwners.contains($0.key) } + return entities + } + +} + +private extension KnownTracker { + + var containsCTLActions: Bool { + if let defaultAction = defaultAction, defaultAction == .blockCtlFB { + return true + } + + if let rules = rules { + for rule in rules { + if let action = rule.action, action == .blockCtlFB { + return true + } + } + } + return false + } + +} diff --git a/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift b/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift index 4c1f3f335d..d7b0e8d112 100644 --- a/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift +++ b/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift @@ -66,21 +66,24 @@ final class ContentBlockerRulesLists: DefaultContentBlockerRulesListsSource { let tdsRulesIndex = result.firstIndex(where: { $0.name == DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName }) { let tdsRules = result[tdsRulesIndex] let allowlistedTrackerNames = adClickAttribution.allowlist.map { $0.entity } - let splitter = AdClickAttributionRulesSplitter(rulesList: tdsRules, allowlistedTrackerNames: allowlistedTrackerNames) - if let splitRules = splitter.split() { + let adSplitter = AdClickAttributionRulesSplitter(rulesList: tdsRules, allowlistedTrackerNames: allowlistedTrackerNames) + if let splitRules = adSplitter.split() { result.remove(at: tdsRulesIndex) result.append(splitRules.0) result.append(splitRules.1) } } - // Add new ones - let etag = MD5(data: Self.fbTrackerDataFile) - let dataSet: TrackerDataManager.DataSet = TrackerDataManager.DataSet(Self.fbTrackerDataSet, etag) - let CTLRulesList = ContentBlockerRulesList(name: Constants.clickToLoadRulesListName, - trackerData: nil, - fallbackTrackerData: dataSet) - result.append(CTLRulesList) + // split CTL rules so they can be managed separately from the main list when user clicks through a CTL dialog + if let tdsRulesIndex = result.firstIndex(where: { $0.name == DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName }) { + let tdsRules = result[tdsRulesIndex] + let ctlSplitter = ClickToLoadRulesSplitter(rulesList: tdsRules) + if let splitRules = ctlSplitter.split() { + result.remove(at: tdsRulesIndex) + result.append(splitRules.withoutBlockCTL) + result.append(splitRules.withBlockCTL) + } + } return result } From b603ed772756f08b070a37267cbbb943d2409e23 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Tue, 5 Mar 2024 15:00:39 -0800 Subject: [PATCH 09/60] WIP rule splitting for custom actions --- .../ClickToLoadRulesSplitter.swift | 41 +++++++++++++++---- .../ClickToLoad/ClickToLoadUserScript.swift | 2 - 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift index 62bc7391a0..a56b6df709 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift @@ -22,7 +22,7 @@ import BrowserServicesKit struct ClickToLoadRulesSplitter { - public enum Constant { + public enum Constants { public static let clickToLoadRuleListPrefix = "CTL_" @@ -43,7 +43,7 @@ struct ClickToLoadRulesSplitter { ContentBlockerRulesList(name: rulesList.name, trackerData: splitTDS?.withoutBlockCTL ?? rulesList.trackerData, fallbackTrackerData: splitFallbackTDS?.withoutBlockCTL ?? rulesList.fallbackTrackerData), - ContentBlockerRulesList(name: "XD", + ContentBlockerRulesList(name: ContentBlockerRulesLists.Constants.clickToLoadRulesListName, trackerData: splitTDS?.withBlockCTL ?? rulesList.trackerData, fallbackTrackerData: splitFallbackTDS?.withBlockCTL ?? rulesList.fallbackTrackerData) ) @@ -52,16 +52,16 @@ struct ClickToLoadRulesSplitter { } private func split(trackerData: TrackerDataManager.DataSet) -> (withoutBlockCTL: TrackerDataManager.DataSet, withBlockCTL: TrackerDataManager.DataSet)? { - let trackersWithBlockCTL = filterTrackersByBlockCTLAction(trackerData.tds.trackers, hasBlockCTL: true) + let trackersWithBlockCTL = filterTrackersWithCTLAction(trackerData.tds.trackers) if !trackersWithBlockCTL.isEmpty { - let trackersWithoutBlockCTL = filterTrackersByBlockCTLAction(trackerData.tds.trackers, hasBlockCTL: false) + let trackersWithoutBlockCTL = filterTrackersWithoutCTLAction(trackerData.tds.trackers) let trackerDataWithoutBlockCTL = makeTrackerData(using: trackersWithoutBlockCTL, originalTDS: trackerData.tds) let trackerDataWithBlockCTL = makeTrackerData(using: trackersWithBlockCTL, originalTDS: trackerData.tds) return ( - (tds: trackerDataWithoutBlockCTL, etag: Constant.clickToLoadRuleListPrefix + trackerData.etag), - (tds: trackerDataWithBlockCTL, etag: Constant.clickToLoadRuleListPrefix + trackerData.etag) + (tds: trackerDataWithoutBlockCTL, etag: Constants.clickToLoadRuleListPrefix + trackerData.etag), + (tds: trackerDataWithBlockCTL, etag: Constants.clickToLoadRuleListPrefix + trackerData.etag) ) } return nil @@ -76,8 +76,33 @@ struct ClickToLoadRulesSplitter { cnames: originalTDS.cnames) } - private func filterTrackersByBlockCTLAction(_ trackers: [String: KnownTracker], hasBlockCTL: Bool) -> [String: KnownTracker] { - trackers.filter { (_, tracker) in tracker.containsCTLActions == hasBlockCTL } + private func filterTrackersWithoutCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { + trackers.filter { (_, tracker) in tracker.containsCTLActions == false } + } + + private func filterTrackersWithCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { + return Dictionary(uniqueKeysWithValues: trackers.filter { (_, tracker) in + return tracker.containsCTLActions == true + }.map { (key, value) in + var modifiedTracker = value + // Modify the tracker here + if modifiedTracker.defaultAction == .blockCtlFB { + modifiedTracker.defaultAction = .block + } + print("RULES BEFORE \(modifiedTracker.rules)") + + if let rules = modifiedTracker.rules as [KnownTracker.Rule]? { + for ruleIndex in rules.indices { + if let action = rules[ruleIndex].action, action == .blockCtlFB { +// modifiedTracker.rules?[ruleIndex].action = .block + modifiedTracker.rules?[ruleIndex].action = nil + } + } + } + print("RULES AFTER \(modifiedTracker.rules)") + + return (key, modifiedTracker) + }) } private func extractDomains(from entities: [String: Entity]) -> [String: String] { diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift index 83290bae47..1400fb280d 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift @@ -110,8 +110,6 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { 'use strict'; console.warn('fb-sdk document.currentScript.src', document.currentScript, document.currentScript?.src); console.warn('in fbSurrogate, location is', window.location.href); - debugger; - return; window.fbTest = "inline surrogate"; const facebookEntity = 'Facebook, Inc.'; const originalFBURL = 'https://connect.facebook.net/en_US/sdk.js?XFBML=false' //FIXME: document.currentScript.src; From f97177480ac8e36219d34d8c353a40bfafc1bdc8 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Thu, 7 Mar 2024 11:07:02 -0800 Subject: [PATCH 10/60] cleanup FB protection state management --- .../FBProtectionTabExtension.swift | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index b2d1b043dc..abe42a2be5 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -54,25 +54,25 @@ final class FBProtectionTabExtension { extension FBProtectionTabExtension { - private func toggleFBProtection(for url: URL) { + private func enableFBProtection(for url: URL) { // Enable/disable FBProtection only after UserScripts are installed (awaitContentBlockingAssetsInstalled) let privacyConfiguration = privacyConfigurationManager.privacyConfig let featureEnabled = privacyConfiguration.isFeature(.clickToPlay, enabledForDomain: url.host) - setFBProtection(enabled: featureEnabled) + setFBProtection(enable: featureEnabled) } @discardableResult - private func setFBProtection(enabled: Bool) -> Bool { + private func setFBProtection(enable: Bool) -> Bool { if #unavailable(OSX 11) { // disable CTL for Catalina and earlier return false } - guard self.fbBlockingEnabled != enabled else { return false } + guard self.fbBlockingEnabled != enable else { return false } guard let userContentController else { assertionFailure("Missing UserContentController") return false } - if enabled { + if enable { do { try userContentController.enableGlobalContentRuleList(withIdentifier: ContentBlockerRulesLists.Constants.clickToLoadRulesListName) } catch { @@ -87,7 +87,7 @@ extension FBProtectionTabExtension { return false } } - self.fbBlockingEnabled = enabled + self.fbBlockingEnabled = enable return true } @@ -101,18 +101,22 @@ extension FBProtectionTabExtension: ClickToLoadUserScriptDelegate { return true } - if setFBProtection(enabled: false) { + if setFBProtection(enable: false) { return true } else { return false } } + } extension FBProtectionTabExtension: NavigationResponder { func decidePolicy(for navigationAction: NavigationAction, preferences: inout NavigationPreferences) async -> NavigationActionPolicy? { - toggleFBProtection(for: navigationAction.url) + if navigationAction.navigationType == NavigationType.other && navigationAction.isUserInitiated == false { + return .next + } + enableFBProtection(for: navigationAction.url) return .next } From daf57ad27d54d874845a5f9ade16021c448c180f Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 15 Mar 2024 17:30:48 -0700 Subject: [PATCH 11/60] update embedded config and TDS --- .../AppPrivacyConfigurationDataProvider.swift | 4 +- .../AppTrackerDataSetProvider.swift | 4 +- DuckDuckGo/ContentBlocker/trackerData.json | 2156 +++++++---------- scripts/update_embedded.sh | 2 +- 4 files changed, 876 insertions(+), 1290 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/AppPrivacyConfigurationDataProvider.swift b/DuckDuckGo/ContentBlocker/AppPrivacyConfigurationDataProvider.swift index e4add5a17e..4606c3cb3c 100644 --- a/DuckDuckGo/ContentBlocker/AppPrivacyConfigurationDataProvider.swift +++ b/DuckDuckGo/ContentBlocker/AppPrivacyConfigurationDataProvider.swift @@ -22,8 +22,8 @@ import BrowserServicesKit final class AppPrivacyConfigurationDataProvider: EmbeddedDataProvider { public struct Constants { - public static let embeddedDataETag = "\"7cf7b71adb62c3cbcbf8b84c61a0004d\"" - public static let embeddedDataSHA = "20e9b59e7e60ccc9ae52853935ebe3d74227234fcf8b46da5a66cff3adc7e6c7" + public static let embeddedDataETag = "\"4c644-18e3ab0ef90\"" + public static let embeddedDataSHA = "2b364157d149f3b1a9ef8cd69e16a213d4adada9ca5e5a3f1872f609e83d89af" } var embeddedDataEtag: String { diff --git a/DuckDuckGo/ContentBlocker/AppTrackerDataSetProvider.swift b/DuckDuckGo/ContentBlocker/AppTrackerDataSetProvider.swift index a182f36fd5..30e6777667 100644 --- a/DuckDuckGo/ContentBlocker/AppTrackerDataSetProvider.swift +++ b/DuckDuckGo/ContentBlocker/AppTrackerDataSetProvider.swift @@ -22,8 +22,8 @@ import BrowserServicesKit final class AppTrackerDataSetProvider: EmbeddedDataProvider { public struct Constants { - public static let embeddedDataETag = "\"ef8ebcc98d8abccca793c7e04422b160\"" - public static let embeddedDataSHA = "e2e8e5e191df54227222fbb0545a7eb8634b1156a69182323981bb6aed2c639d" + public static let embeddedDataETag = "\"ec148e720d6291488a96429e5cd639d8\"" + public static let embeddedDataSHA = "7cd2e94aaf67bc693225d03f5fe5fef0de55bb1a8656a8f49b93724155f4b654" } var embeddedDataEtag: String { diff --git a/DuckDuckGo/ContentBlocker/trackerData.json b/DuckDuckGo/ContentBlocker/trackerData.json index b9676bf1e7..541aa991df 100644 --- a/DuckDuckGo/ContentBlocker/trackerData.json +++ b/DuckDuckGo/ContentBlocker/trackerData.json @@ -1,7 +1,7 @@ { "_builtWith": { - "tracker-radar": "74dd9601901673a7c0f87e609695b5a0e31b808adabd62e6db6ed7c99bde966d-4013b4e91930c643394cb31c6c745356f133b04f", - "tracker-surrogates": "0528e3226df15b1a3e319ad68ef76612a8f26623" + "tracker-radar": "09133e827d9dcbba9465c87efdf0229ddd910d3e867f8ccd5efc31abd7073963-4013b4e91930c643394cb31c6c745356f133b04f", + "tracker-surrogates": "ba0d8cefe4432723ec75b998241efd2454dff35a" }, "readme": "https://github.com/duckduckgo/tracker-blocklists", "trackers": { @@ -434,7 +434,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -445,7 +445,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -491,7 +491,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2379,7 +2379,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2390,7 +2390,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2434,7 +2434,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2445,7 +2445,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2560,7 +2560,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2694,7 +2694,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2705,7 +2705,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3024,7 +3024,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3151,7 +3151,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3275,7 +3275,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3659,7 +3659,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3670,7 +3670,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3681,7 +3681,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3692,7 +3692,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3758,7 +3758,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3810,7 +3810,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3821,7 +3821,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3958,7 +3958,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -4309,7 +4309,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -4344,7 +4344,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -4790,7 +4790,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -4801,7 +4801,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5003,7 +5003,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5045,7 +5045,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5068,7 +5068,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5103,7 +5103,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5132,7 +5132,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5420,7 +5420,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5537,7 +5537,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5548,7 +5548,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5559,7 +5559,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5570,7 +5570,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5607,7 +5607,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5662,7 +5662,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -6198,7 +6198,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -6352,7 +6352,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -6668,7 +6668,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -6679,7 +6679,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -6799,7 +6799,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -6995,7 +6995,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7031,7 +7031,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7042,7 +7042,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7053,7 +7053,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7664,7 +7664,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7675,7 +7675,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7686,7 +7686,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7767,7 +7767,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7890,7 +7890,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7901,7 +7901,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7979,7 +7979,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7990,7 +7990,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -8105,7 +8105,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -8256,7 +8256,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -8267,7 +8267,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -8758,7 +8758,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -8769,7 +8769,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -8810,7 +8810,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9226,7 +9226,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9824,7 +9824,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9835,7 +9835,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9846,7 +9846,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9886,7 +9886,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9928,7 +9928,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9982,7 +9982,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10050,7 +10050,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10061,7 +10061,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10109,7 +10109,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10235,7 +10235,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10395,7 +10395,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10406,7 +10406,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10417,7 +10417,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10444,7 +10444,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10494,7 +10494,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10541,7 +10541,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -11019,7 +11019,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -11059,7 +11059,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -11795,7 +11795,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -11884,7 +11884,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -11895,7 +11895,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12092,7 +12092,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12132,7 +12132,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12143,7 +12143,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12154,7 +12154,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12165,7 +12165,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12491,7 +12491,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12502,7 +12502,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12513,7 +12513,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -14421,7 +14421,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -15106,7 +15106,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -15181,7 +15181,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -15232,7 +15232,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16091,7 +16091,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16102,7 +16102,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16131,7 +16131,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16350,7 +16350,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16659,7 +16659,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16670,7 +16670,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16855,7 +16855,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16904,7 +16904,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -17178,7 +17178,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -17189,7 +17189,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -17752,7 +17752,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -18100,7 +18100,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -18239,7 +18239,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -18598,7 +18598,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -18809,7 +18809,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -19986,7 +19986,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20207,7 +20207,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20218,7 +20218,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20229,7 +20229,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20369,7 +20369,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20856,7 +20856,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20885,7 +20885,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20896,7 +20896,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20907,7 +20907,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20971,7 +20971,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21051,7 +21051,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21099,7 +21099,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21110,7 +21110,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21150,7 +21150,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21161,7 +21161,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21196,7 +21196,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21207,7 +21207,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21340,7 +21340,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21424,7 +21424,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21895,7 +21895,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21906,7 +21906,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21917,7 +21917,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21987,7 +21987,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21998,7 +21998,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22151,7 +22151,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22162,7 +22162,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22204,7 +22204,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22215,7 +22215,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22226,7 +22226,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22496,7 +22496,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22507,7 +22507,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22568,7 +22568,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22626,7 +22626,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22637,7 +22637,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22737,7 +22737,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22760,7 +22760,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22771,7 +22771,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23128,7 +23128,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23232,7 +23232,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23368,7 +23368,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23443,7 +23443,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23454,7 +23454,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23498,7 +23498,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23509,7 +23509,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23520,7 +23520,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23531,7 +23531,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23611,7 +23611,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23644,7 +23644,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23695,7 +23695,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23831,7 +23831,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23960,7 +23960,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23971,7 +23971,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24218,7 +24218,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24229,7 +24229,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24240,7 +24240,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24521,7 +24521,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24556,7 +24556,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24597,7 +24597,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24713,7 +24713,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24724,7 +24724,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24753,7 +24753,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24849,7 +24849,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24906,7 +24906,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24917,7 +24917,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25038,7 +25038,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25195,7 +25195,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25221,7 +25221,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25232,7 +25232,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25295,7 +25295,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25306,7 +25306,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25317,7 +25317,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25548,7 +25548,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25575,7 +25575,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25586,7 +25586,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25597,7 +25597,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25627,7 +25627,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25638,7 +25638,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25666,7 +25666,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25677,7 +25677,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25750,7 +25750,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25798,7 +25798,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25809,7 +25809,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25820,7 +25820,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25831,7 +25831,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25842,7 +25842,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25853,7 +25853,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25925,7 +25925,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25936,7 +25936,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25990,7 +25990,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -26192,7 +26192,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -26500,7 +26500,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -26511,7 +26511,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -26522,7 +26522,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -26773,7 +26773,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -26784,7 +26784,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -27202,7 +27202,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28059,7 +28059,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28208,7 +28208,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28219,7 +28219,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28352,7 +28352,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28435,7 +28435,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28446,7 +28446,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28807,7 +28807,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -29133,7 +29133,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -29144,7 +29144,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -29270,7 +29270,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -29281,7 +29281,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -31055,7 +31055,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -31398,7 +31398,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32558,7 +32558,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32569,7 +32569,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32580,7 +32580,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32591,7 +32591,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32602,7 +32602,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32613,7 +32613,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32624,18 +32624,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "accurateanimal.com": { - "domain": "accurateanimal.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32646,7 +32635,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32657,7 +32646,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32668,7 +32657,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32679,7 +32668,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32690,7 +32679,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32701,7 +32690,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32712,7 +32701,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32723,7 +32712,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32734,7 +32723,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32745,7 +32734,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32756,7 +32745,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32767,7 +32756,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32778,7 +32767,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32789,7 +32778,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32800,7 +32789,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32811,7 +32800,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32822,7 +32811,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32833,7 +32822,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32844,7 +32833,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32855,7 +32844,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32866,7 +32855,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32877,7 +32866,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32888,7 +32877,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32899,7 +32888,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32910,7 +32899,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32921,7 +32910,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32932,7 +32921,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32943,7 +32932,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32954,7 +32943,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32965,7 +32954,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32976,7 +32965,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32987,7 +32976,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32998,7 +32987,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33009,7 +32998,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33020,7 +33009,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33031,7 +33020,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33042,7 +33031,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33053,7 +33042,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33064,7 +33053,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33075,7 +33064,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33086,7 +33075,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33097,7 +33086,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33108,7 +33097,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33119,7 +33108,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33130,7 +33119,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33141,7 +33130,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33152,7 +33141,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33163,7 +33152,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33174,7 +33163,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33185,7 +33174,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33196,7 +33185,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33207,7 +33196,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33218,7 +33207,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33229,7 +33218,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33240,7 +33229,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33251,7 +33240,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33262,7 +33251,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33273,7 +33262,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33284,7 +33273,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33295,7 +33284,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33306,7 +33295,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33317,7 +33306,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33328,7 +33317,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33339,7 +33328,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33350,7 +33339,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33361,7 +33350,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33372,7 +33361,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33383,7 +33372,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33394,7 +33383,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33405,7 +33394,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33416,18 +33405,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "calypsocapsule.com": { - "domain": "calypsocapsule.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33438,7 +33416,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33449,7 +33427,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33460,7 +33438,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33471,7 +33449,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33482,7 +33460,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33493,7 +33471,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33504,7 +33482,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33515,7 +33493,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33526,7 +33504,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33537,7 +33515,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33548,7 +33526,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33559,7 +33537,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33570,7 +33548,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33581,7 +33559,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33592,29 +33570,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "chaireggnog.com": { - "domain": "chaireggnog.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "chairsdonkey.com": { - "domain": "chairsdonkey.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33625,7 +33581,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33636,7 +33592,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33647,7 +33603,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33658,7 +33614,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33669,7 +33625,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33680,29 +33636,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "chipperisle.com": { - "domain": "chipperisle.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "chivalrouscord.com": { - "domain": "chivalrouscord.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33713,7 +33647,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33724,7 +33658,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33735,7 +33669,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33746,7 +33680,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33757,18 +33691,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "cobaltoverture.com": { - "domain": "cobaltoverture.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33779,7 +33702,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33790,7 +33713,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33801,7 +33724,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33812,7 +33735,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33823,7 +33746,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33834,7 +33757,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33845,7 +33768,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33856,7 +33779,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33867,7 +33790,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33878,7 +33801,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33889,7 +33812,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33900,7 +33823,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33911,7 +33834,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33922,7 +33845,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33933,7 +33856,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33944,7 +33867,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33955,7 +33878,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33966,7 +33889,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33977,7 +33900,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33988,7 +33911,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33999,7 +33922,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34010,7 +33933,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34021,18 +33944,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "creatorpassenger.com": { - "domain": "creatorpassenger.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34043,7 +33955,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34054,7 +33966,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34065,7 +33977,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34076,7 +33988,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34087,7 +33999,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34098,7 +34010,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34109,7 +34021,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34120,7 +34032,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34131,7 +34043,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34142,7 +34054,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34153,7 +34065,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34164,7 +34076,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34175,7 +34087,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34186,7 +34098,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34197,7 +34109,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34208,7 +34120,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34219,7 +34131,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34230,7 +34142,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34241,7 +34153,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34252,7 +34164,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34263,7 +34175,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34274,7 +34186,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34285,7 +34197,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34296,7 +34208,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34307,7 +34219,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34318,7 +34230,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34329,7 +34241,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34340,7 +34252,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34351,7 +34263,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34362,7 +34274,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34373,7 +34285,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34384,7 +34296,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34395,7 +34307,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34406,7 +34318,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34417,7 +34329,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34428,29 +34340,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "eagerknight.com": { - "domain": "eagerknight.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "echoinghaven.com": { - "domain": "echoinghaven.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34461,7 +34351,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34472,18 +34362,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "effulgenttempest.com": { - "domain": "effulgenttempest.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34494,7 +34373,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34505,7 +34384,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34516,7 +34395,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34527,7 +34406,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34538,7 +34417,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34549,7 +34428,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34560,7 +34439,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34571,18 +34450,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "engineertrick.com": { - "domain": "engineertrick.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34593,7 +34461,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34604,7 +34472,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34615,7 +34483,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34626,7 +34494,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34637,7 +34505,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34648,7 +34516,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34659,7 +34527,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34670,7 +34538,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34681,7 +34549,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34692,7 +34560,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34703,7 +34571,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34714,18 +34582,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "exquisiteartisanship.com": { - "domain": "exquisiteartisanship.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34736,7 +34593,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34747,7 +34604,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34758,7 +34615,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34769,7 +34626,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34780,7 +34637,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34791,7 +34648,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34802,7 +34659,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34813,7 +34670,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34824,7 +34681,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34835,7 +34692,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34846,7 +34703,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34857,7 +34714,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34868,7 +34725,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34879,7 +34736,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34890,7 +34747,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34901,7 +34758,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34912,18 +34769,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "flameuncle.com": { - "domain": "flameuncle.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34934,7 +34780,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34945,40 +34791,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "flourishingcollaboration.com": { - "domain": "flourishingcollaboration.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "flourishinginnovation.com": { - "domain": "flourishinginnovation.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "flourishingpartnership.com": { - "domain": "flourishingpartnership.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34989,7 +34802,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35000,7 +34813,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35011,7 +34824,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35022,7 +34835,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35033,7 +34846,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35044,7 +34857,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35055,7 +34868,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35066,7 +34879,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35077,7 +34890,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35088,7 +34901,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35099,7 +34912,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35110,7 +34923,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35121,7 +34934,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35132,7 +34945,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35143,7 +34956,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35154,7 +34967,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35165,7 +34978,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35176,18 +34989,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "gladysway.com": { - "domain": "gladysway.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35198,7 +35000,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35209,29 +35011,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "glitteringbrook.com": { - "domain": "glitteringbrook.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "goldfishgrowth.com": { - "domain": "goldfishgrowth.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35242,7 +35022,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35253,7 +35033,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35264,7 +35044,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35275,7 +35055,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35286,7 +35066,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35297,7 +35077,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35308,7 +35088,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35319,7 +35099,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35330,7 +35110,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35341,7 +35121,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35352,7 +35132,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35363,7 +35143,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35374,7 +35154,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35385,7 +35165,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35396,7 +35176,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35407,7 +35187,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35418,7 +35198,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35429,7 +35209,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35440,7 +35220,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35451,7 +35231,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35462,7 +35242,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35473,7 +35253,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35484,7 +35264,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35495,7 +35275,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35506,7 +35286,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35517,7 +35297,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35528,7 +35308,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35539,7 +35319,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35550,7 +35330,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35561,7 +35341,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35572,7 +35352,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35583,7 +35363,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35594,7 +35374,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35605,7 +35385,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35616,7 +35396,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35627,7 +35407,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35638,7 +35418,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35649,7 +35429,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35660,18 +35440,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "impulselumber.com": { - "domain": "impulselumber.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35682,7 +35451,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35693,7 +35462,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35704,7 +35473,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35715,7 +35484,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35726,7 +35495,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35737,7 +35506,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35748,7 +35517,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35759,7 +35528,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35770,7 +35539,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35781,7 +35550,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35792,7 +35561,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35803,7 +35572,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35814,18 +35583,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "keenquill.com": { - "domain": "keenquill.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35836,7 +35594,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35847,7 +35605,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35858,7 +35616,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35869,7 +35627,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35880,7 +35638,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35891,18 +35649,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "lighttalon.com": { - "domain": "lighttalon.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35913,7 +35660,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35924,7 +35671,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35935,7 +35682,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35946,7 +35693,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35957,7 +35704,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35968,7 +35715,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35979,7 +35726,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35990,7 +35737,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36001,7 +35748,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36012,7 +35759,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36023,7 +35770,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36034,7 +35781,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36045,7 +35792,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36056,7 +35803,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36067,18 +35814,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "majesticwaterscape.com": { - "domain": "majesticwaterscape.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36089,7 +35825,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36100,7 +35836,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36111,7 +35847,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36122,7 +35858,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36133,7 +35869,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36144,7 +35880,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36155,18 +35891,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "melodiouscomposition.com": { - "domain": "melodiouscomposition.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36177,7 +35902,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36188,7 +35913,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36199,7 +35924,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36210,7 +35935,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36221,7 +35946,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36232,7 +35957,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36243,7 +35968,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36254,7 +35979,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36265,7 +35990,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36276,7 +36001,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36287,7 +36012,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36298,7 +36023,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36309,7 +36034,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36320,7 +36045,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36331,7 +36056,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36342,7 +36067,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36353,7 +36078,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36364,7 +36089,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36375,7 +36100,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36386,7 +36111,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36397,7 +36122,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36408,7 +36133,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36419,7 +36144,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36430,7 +36155,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36441,7 +36166,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36452,7 +36177,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36463,7 +36188,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36474,7 +36199,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36485,7 +36210,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36496,7 +36221,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36507,7 +36232,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36518,7 +36243,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36529,7 +36254,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36540,7 +36265,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36551,7 +36276,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36562,7 +36287,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36573,7 +36298,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36584,18 +36309,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "opulentsylvan.com": { - "domain": "opulentsylvan.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36606,7 +36320,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36617,7 +36331,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36628,7 +36342,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36639,7 +36353,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36650,7 +36364,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36661,7 +36375,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36672,7 +36386,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36683,7 +36397,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36694,7 +36408,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36705,7 +36419,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36716,7 +36430,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36727,7 +36441,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36738,7 +36452,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36749,7 +36463,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36760,7 +36474,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36771,7 +36485,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36782,18 +36496,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "pluckyzone.com": { - "domain": "pluckyzone.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36804,7 +36507,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36815,7 +36518,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36826,7 +36529,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36837,18 +36540,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "polishedfolly.com": { - "domain": "polishedfolly.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36859,7 +36551,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36870,18 +36562,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "popplantation.com": { - "domain": "popplantation.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36892,7 +36573,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36903,7 +36584,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36914,7 +36595,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36925,7 +36606,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36936,7 +36617,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36947,18 +36628,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "publicsofa.com": { - "domain": "publicsofa.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36969,18 +36639,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "pulsatingmeadow.com": { - "domain": "pulsatingmeadow.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36991,7 +36650,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37002,7 +36661,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37013,7 +36672,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37024,7 +36683,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37035,7 +36694,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37046,7 +36705,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37057,7 +36716,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37068,7 +36727,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37079,7 +36738,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37090,7 +36749,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37101,7 +36760,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37112,7 +36771,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37123,7 +36782,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37134,7 +36793,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37145,7 +36804,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37156,7 +36815,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37167,7 +36826,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37178,7 +36837,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37189,7 +36848,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37200,7 +36859,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37211,7 +36870,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37222,7 +36881,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37233,29 +36892,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "relationrest.com": { - "domain": "relationrest.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "rememberdiscussion.com": { - "domain": "rememberdiscussion.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37266,7 +36903,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37277,7 +36914,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37288,7 +36925,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37299,7 +36936,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37310,7 +36947,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37321,7 +36958,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37332,7 +36969,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37343,7 +36980,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37354,7 +36991,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37365,7 +37002,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37376,7 +37013,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37387,7 +37024,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37398,7 +37035,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37409,7 +37046,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37420,7 +37057,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37431,7 +37068,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37442,7 +37079,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37453,7 +37090,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37464,7 +37101,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37475,7 +37112,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37486,7 +37123,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37497,7 +37134,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37508,7 +37145,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37519,7 +37156,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37530,7 +37167,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37541,7 +37178,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37552,7 +37189,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37563,7 +37200,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37574,7 +37211,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37585,7 +37222,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37596,7 +37233,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37607,7 +37244,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37618,7 +37255,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37629,7 +37266,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37640,18 +37277,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "serenecascade.com": { - "domain": "serenecascade.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37662,7 +37288,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37673,7 +37299,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37684,7 +37310,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37695,7 +37321,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37706,7 +37332,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37717,7 +37343,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37728,7 +37354,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37739,7 +37365,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37750,7 +37376,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37761,7 +37387,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37772,7 +37398,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37783,7 +37409,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37794,7 +37420,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37805,7 +37431,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37816,7 +37442,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37827,7 +37453,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37838,7 +37464,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37849,7 +37475,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37860,7 +37486,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37871,7 +37497,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37882,7 +37508,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37893,7 +37519,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37904,7 +37530,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37915,7 +37541,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37926,7 +37552,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37937,7 +37563,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37948,7 +37574,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37959,7 +37585,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37970,7 +37596,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37981,7 +37607,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37992,7 +37618,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38003,7 +37629,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38014,7 +37640,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38025,7 +37651,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38036,7 +37662,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38047,7 +37673,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38058,7 +37684,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38069,7 +37695,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38080,7 +37706,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38091,7 +37717,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38102,7 +37728,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38113,7 +37739,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38124,7 +37750,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38135,7 +37761,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38146,7 +37772,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38157,7 +37783,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38168,7 +37794,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38179,7 +37805,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38190,7 +37816,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38201,7 +37827,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38212,7 +37838,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38223,7 +37849,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38234,7 +37860,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38245,7 +37871,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38256,7 +37882,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38267,7 +37893,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38278,7 +37904,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38289,7 +37915,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38300,7 +37926,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38311,7 +37937,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38322,7 +37948,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38333,7 +37959,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38344,7 +37970,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38355,7 +37981,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38366,7 +37992,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38377,7 +38003,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38388,7 +38014,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38399,7 +38025,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38410,7 +38036,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38421,18 +38047,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "sublimequartz.com": { - "domain": "sublimequartz.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38443,7 +38058,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38454,7 +38069,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38465,7 +38080,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38476,7 +38091,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38487,7 +38102,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38498,7 +38113,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38509,7 +38124,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38520,7 +38135,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38531,7 +38146,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38542,7 +38157,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38553,7 +38168,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38564,7 +38179,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38575,7 +38190,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38586,7 +38201,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38597,7 +38212,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38608,18 +38223,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "tearfulglass.com": { - "domain": "tearfulglass.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38630,7 +38234,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38641,7 +38245,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38652,7 +38256,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38663,7 +38267,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38674,7 +38278,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38685,7 +38289,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38696,7 +38300,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38707,7 +38311,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38718,7 +38322,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38729,18 +38333,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "thrivingmarketplace.com": { - "domain": "thrivingmarketplace.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38751,7 +38344,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38762,7 +38355,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38773,7 +38366,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38784,7 +38377,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38795,7 +38388,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38806,7 +38399,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38817,7 +38410,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38828,7 +38421,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38839,7 +38432,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38850,7 +38443,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38861,7 +38454,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38872,7 +38465,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38883,7 +38476,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38894,7 +38487,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38905,7 +38498,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38916,7 +38509,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38927,7 +38520,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38938,7 +38531,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38949,7 +38542,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38960,7 +38553,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38971,7 +38564,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38982,7 +38575,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38993,7 +38586,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39004,7 +38597,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39015,7 +38608,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39026,7 +38619,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39037,7 +38630,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39048,7 +38641,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39059,7 +38652,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39070,7 +38663,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39081,7 +38674,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39092,7 +38685,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39103,7 +38696,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39114,7 +38707,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39125,7 +38718,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39136,7 +38729,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39147,7 +38740,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39158,7 +38751,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39169,7 +38762,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39180,18 +38773,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "vibrantcelebration.com": { - "domain": "vibrantcelebration.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39202,7 +38784,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39213,7 +38795,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39224,7 +38806,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39235,7 +38817,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39246,7 +38828,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39257,18 +38839,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "vividfrost.com": { - "domain": "vividfrost.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39279,7 +38850,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39290,7 +38861,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39301,7 +38872,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39312,7 +38883,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39323,7 +38894,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39334,7 +38905,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39345,7 +38916,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39356,7 +38927,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39367,7 +38938,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39378,7 +38949,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39389,7 +38960,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39400,7 +38971,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39411,7 +38982,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39422,18 +38993,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "wittyshack.com": { - "domain": "wittyshack.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39444,7 +39004,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39455,7 +39015,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39466,7 +39026,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39477,29 +39037,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "zestyhorizon.com": { - "domain": "zestyhorizon.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, - "fingerprinting": 1, - "cookies": 0.01, - "default": "block" - }, - "zestyrover.com": { - "domain": "zestyrover.com", - "owner": { - "name": "Leven Labs, Inc. DBA Admiral", - "displayName": "Admiral" - }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39510,7 +39048,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39521,7 +39059,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0129, + "prevalence": 0.0151, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -49562,6 +49100,7 @@ "aloofvest.com", "ambientdusk.com", "ambientlagoon.com", + "ambientlagoon.com", "ambiguousafternoon.com", "ambiguousdinosaurs.com", "ambrosialsummit.com", @@ -49598,6 +49137,7 @@ "bawdybalance.com", "beamvolcano.com", "beancontrol.com", + "beancontrol.com", "bedsberry.com", "beginnerpancake.com", "begintrain.com", @@ -49622,6 +49162,8 @@ "breakfastboat.com", "brighttoe.com", "briskstorm.com", + "brighttoe.com", + "briskstorm.com", "broadborder.com", "brotherslocket.com", "buildingknife.com", @@ -49641,6 +49183,7 @@ "capablecup.com", "capriciouscorn.com", "captivatingcanyon.com", + "captivatingcanyon.com", "carefuldolls.com", "caringcast.com", "carpentercomparison.com", @@ -49677,15 +49220,16 @@ "cleanhaircut.com", "cloisteredcord.com", "cloisteredcurve.com", + "cloisteredcurve.com", "closedcows.com", "coatfood.com", - "cobaltoverture.com", "coldbalance.com", "colossalclouds.com", "colossalcoat.com", "colossalcry.com", "combativecar.com", "combbit.com", + "combbit.com", "combcattle.com", "combcompetition.com", "comfortablecheese.com", @@ -49704,6 +49248,7 @@ "coverapparatus.com", "cozyhillside.com", "cozytryst.com", + "cozytryst.com", "crabbychin.com", "cratecamera.com", "creatorcherry.com", @@ -49746,6 +49291,7 @@ "dewdroplagoon.com", "digestiondrawer.com", "dinnerquartz.com", + "dinnerquartz.com", "diplomahawaii.com", "disagreeabledrop.com", "discreetfield.com", @@ -49758,18 +49304,19 @@ "dramaticdirection.com", "dreamycanyon.com", "drollwharf.com", + "drollwharf.com", "dustydime.com", "dustyhammer.com", - "eagerknight.com", - "echoinghaven.com", "effervescentcoral.com", "effervescentvista.com", "effulgenttempest.com", "elasticchange.com", "elderlybean.com", "elusivebreeze.com", + "elusivebreeze.com", "eminentbubble.com", "enchantingdiscovery.com", + "enchantingdiscovery.com", "enchantingmystique.com", "encouragingthread.com", "endurablebulb.com", @@ -49914,10 +49461,12 @@ "internalsink.com", "j93557g.com", "jubilantaura.com", + "jubilantaura.com", "jubilantcanyon.com", "jubilantcascade.com", "jubilantglimmer.com", "jubilanttempest.com", + "jubilanttempest.com", "jubilantwhisper.com", "kaputquill.com", "keenquill.com", @@ -49945,6 +49494,7 @@ "lovelydrum.com", "ludicrousarch.com", "luminousboulevard.com", + "luminousboulevard.com", "luminouscatalyst.com", "lumpylumber.com", "lunchroomlock.com", @@ -49962,7 +49512,6 @@ "meatydime.com", "meddleplant.com", "melodiouschorus.com", - "melodiouscomposition.com", "meltmilk.com", "memopilot.com", "memorizematch.com", @@ -49974,6 +49523,7 @@ "mixedreading.com", "modularmental.com", "monacobeatles.com", + "monacobeatles.com", "moorshoes.com", "motionflowers.com", "motionlessbag.com", @@ -49997,6 +49547,7 @@ "niftyhospital.com", "nightwound.com", "nocturnalloom.com", + "nocturnalloom.com", "nondescriptcrowd.com", "nondescriptnote.com", "nostalgicneed.com", @@ -50027,12 +49578,14 @@ "peacefullimit.com", "petiteumbrella.com", "piquantgrove.com", + "piquantgrove.com", "piquantvortex.com", "placidactivity.com", "placidperson.com", "planebasin.com", "plantdigestion.com", "playfulriver.com", + "playfulriver.com", "pleasantpump.com", "plotrabbit.com", "pluckypocket.com", @@ -50057,6 +49610,7 @@ "pricklydebt.com", "pricklypollution.com", "pristinegale.com", + "pristinegale.com", "processplantation.com", "profusesupport.com", "protestcopy.com", @@ -50117,6 +49671,7 @@ "rightfulfall.com", "rigidrobin.com", "rollconnection.com", + "rollconnection.com", "roofrelation.com", "roseincome.com", "ruralrobin.com", @@ -50172,6 +49727,7 @@ "sheargovernor.com", "shesubscriptions.com", "shinypond.com", + "shinypond.com", "shirtsidewalk.com", "shiveringspot.com", "shiverscissors.com", @@ -50220,6 +49776,7 @@ "spotlessstamp.com", "spottednoise.com", "sprysummit.com", + "sprysummit.com", "spuriousair.com", "spysubstance.com", "squalidscrew.com", @@ -50310,6 +49867,8 @@ "tranquilplume.com", "tranquilveil.com", "tranquilveranda.com", + "tranquilveil.com", + "tranquilveranda.com", "tremendousearthquake.com", "tremendousplastic.com", "tritebadge.com", @@ -50338,6 +49897,7 @@ "unwieldyimpulse.com", "unwieldyplastic.com", "uppitytime.com", + "uppitytime.com", "uselesslumber.com", "vanishmemory.com", "velvetquasar.com", @@ -50346,18 +49906,20 @@ "venusgloria.com", "verdantanswer.com", "verdantlabyrinth.com", + "verdantlabyrinth.com", "verdantloom.com", "verseballs.com", "vibrantcelebration.com", "vibrantgale.com", "vibranthaven.com", "vibrantpact.com", + "vibrantpact.com", "vibranttalisman.com", "virtualvincent.com", "vividcanopy.com", - "vividfrost.com", "vividmeadow.com", "vividplume.com", + "vividplume.com", "volatileprofit.com", "volatilevessel.com", "voraciousgrip.com", @@ -50385,7 +49947,7 @@ "zipperxray.com", "zlp6s.pw" ], - "prevalence": 0.0129, + "prevalence": 0.0151, "displayName": "Admiral" } }, @@ -51130,6 +50692,7 @@ "aloofvest.com": "Leven Labs, Inc. DBA Admiral", "ambientdusk.com": "Leven Labs, Inc. DBA Admiral", "ambientlagoon.com": "Leven Labs, Inc. DBA Admiral", + "ambientlagoon.com": "Leven Labs, Inc. DBA Admiral", "ambiguousafternoon.com": "Leven Labs, Inc. DBA Admiral", "ambiguousdinosaurs.com": "Leven Labs, Inc. DBA Admiral", "ambrosialsummit.com": "Leven Labs, Inc. DBA Admiral", @@ -51166,6 +50729,7 @@ "bawdybalance.com": "Leven Labs, Inc. DBA Admiral", "beamvolcano.com": "Leven Labs, Inc. DBA Admiral", "beancontrol.com": "Leven Labs, Inc. DBA Admiral", + "beancontrol.com": "Leven Labs, Inc. DBA Admiral", "bedsberry.com": "Leven Labs, Inc. DBA Admiral", "beginnerpancake.com": "Leven Labs, Inc. DBA Admiral", "begintrain.com": "Leven Labs, Inc. DBA Admiral", @@ -51190,6 +50754,8 @@ "breakfastboat.com": "Leven Labs, Inc. DBA Admiral", "brighttoe.com": "Leven Labs, Inc. DBA Admiral", "briskstorm.com": "Leven Labs, Inc. DBA Admiral", + "brighttoe.com": "Leven Labs, Inc. DBA Admiral", + "briskstorm.com": "Leven Labs, Inc. DBA Admiral", "broadborder.com": "Leven Labs, Inc. DBA Admiral", "brotherslocket.com": "Leven Labs, Inc. DBA Admiral", "buildingknife.com": "Leven Labs, Inc. DBA Admiral", @@ -51209,6 +50775,7 @@ "capablecup.com": "Leven Labs, Inc. DBA Admiral", "capriciouscorn.com": "Leven Labs, Inc. DBA Admiral", "captivatingcanyon.com": "Leven Labs, Inc. DBA Admiral", + "captivatingcanyon.com": "Leven Labs, Inc. DBA Admiral", "carefuldolls.com": "Leven Labs, Inc. DBA Admiral", "caringcast.com": "Leven Labs, Inc. DBA Admiral", "carpentercomparison.com": "Leven Labs, Inc. DBA Admiral", @@ -51245,15 +50812,16 @@ "cleanhaircut.com": "Leven Labs, Inc. DBA Admiral", "cloisteredcord.com": "Leven Labs, Inc. DBA Admiral", "cloisteredcurve.com": "Leven Labs, Inc. DBA Admiral", + "cloisteredcurve.com": "Leven Labs, Inc. DBA Admiral", "closedcows.com": "Leven Labs, Inc. DBA Admiral", "coatfood.com": "Leven Labs, Inc. DBA Admiral", - "cobaltoverture.com": "Leven Labs, Inc. DBA Admiral", "coldbalance.com": "Leven Labs, Inc. DBA Admiral", "colossalclouds.com": "Leven Labs, Inc. DBA Admiral", "colossalcoat.com": "Leven Labs, Inc. DBA Admiral", "colossalcry.com": "Leven Labs, Inc. DBA Admiral", "combativecar.com": "Leven Labs, Inc. DBA Admiral", "combbit.com": "Leven Labs, Inc. DBA Admiral", + "combbit.com": "Leven Labs, Inc. DBA Admiral", "combcattle.com": "Leven Labs, Inc. DBA Admiral", "combcompetition.com": "Leven Labs, Inc. DBA Admiral", "comfortablecheese.com": "Leven Labs, Inc. DBA Admiral", @@ -51272,6 +50840,7 @@ "coverapparatus.com": "Leven Labs, Inc. DBA Admiral", "cozyhillside.com": "Leven Labs, Inc. DBA Admiral", "cozytryst.com": "Leven Labs, Inc. DBA Admiral", + "cozytryst.com": "Leven Labs, Inc. DBA Admiral", "crabbychin.com": "Leven Labs, Inc. DBA Admiral", "cratecamera.com": "Leven Labs, Inc. DBA Admiral", "creatorcherry.com": "Leven Labs, Inc. DBA Admiral", @@ -51314,6 +50883,7 @@ "dewdroplagoon.com": "Leven Labs, Inc. DBA Admiral", "digestiondrawer.com": "Leven Labs, Inc. DBA Admiral", "dinnerquartz.com": "Leven Labs, Inc. DBA Admiral", + "dinnerquartz.com": "Leven Labs, Inc. DBA Admiral", "diplomahawaii.com": "Leven Labs, Inc. DBA Admiral", "disagreeabledrop.com": "Leven Labs, Inc. DBA Admiral", "discreetfield.com": "Leven Labs, Inc. DBA Admiral", @@ -51326,18 +50896,19 @@ "dramaticdirection.com": "Leven Labs, Inc. DBA Admiral", "dreamycanyon.com": "Leven Labs, Inc. DBA Admiral", "drollwharf.com": "Leven Labs, Inc. DBA Admiral", + "drollwharf.com": "Leven Labs, Inc. DBA Admiral", "dustydime.com": "Leven Labs, Inc. DBA Admiral", "dustyhammer.com": "Leven Labs, Inc. DBA Admiral", - "eagerknight.com": "Leven Labs, Inc. DBA Admiral", - "echoinghaven.com": "Leven Labs, Inc. DBA Admiral", "effervescentcoral.com": "Leven Labs, Inc. DBA Admiral", "effervescentvista.com": "Leven Labs, Inc. DBA Admiral", "effulgenttempest.com": "Leven Labs, Inc. DBA Admiral", "elasticchange.com": "Leven Labs, Inc. DBA Admiral", "elderlybean.com": "Leven Labs, Inc. DBA Admiral", "elusivebreeze.com": "Leven Labs, Inc. DBA Admiral", + "elusivebreeze.com": "Leven Labs, Inc. DBA Admiral", "eminentbubble.com": "Leven Labs, Inc. DBA Admiral", "enchantingdiscovery.com": "Leven Labs, Inc. DBA Admiral", + "enchantingdiscovery.com": "Leven Labs, Inc. DBA Admiral", "enchantingmystique.com": "Leven Labs, Inc. DBA Admiral", "encouragingthread.com": "Leven Labs, Inc. DBA Admiral", "endurablebulb.com": "Leven Labs, Inc. DBA Admiral", @@ -51482,10 +51053,12 @@ "internalsink.com": "Leven Labs, Inc. DBA Admiral", "j93557g.com": "Leven Labs, Inc. DBA Admiral", "jubilantaura.com": "Leven Labs, Inc. DBA Admiral", + "jubilantaura.com": "Leven Labs, Inc. DBA Admiral", "jubilantcanyon.com": "Leven Labs, Inc. DBA Admiral", "jubilantcascade.com": "Leven Labs, Inc. DBA Admiral", "jubilantglimmer.com": "Leven Labs, Inc. DBA Admiral", "jubilanttempest.com": "Leven Labs, Inc. DBA Admiral", + "jubilanttempest.com": "Leven Labs, Inc. DBA Admiral", "jubilantwhisper.com": "Leven Labs, Inc. DBA Admiral", "kaputquill.com": "Leven Labs, Inc. DBA Admiral", "keenquill.com": "Leven Labs, Inc. DBA Admiral", @@ -51513,6 +51086,7 @@ "lovelydrum.com": "Leven Labs, Inc. DBA Admiral", "ludicrousarch.com": "Leven Labs, Inc. DBA Admiral", "luminousboulevard.com": "Leven Labs, Inc. DBA Admiral", + "luminousboulevard.com": "Leven Labs, Inc. DBA Admiral", "luminouscatalyst.com": "Leven Labs, Inc. DBA Admiral", "lumpylumber.com": "Leven Labs, Inc. DBA Admiral", "lunchroomlock.com": "Leven Labs, Inc. DBA Admiral", @@ -51530,7 +51104,6 @@ "meatydime.com": "Leven Labs, Inc. DBA Admiral", "meddleplant.com": "Leven Labs, Inc. DBA Admiral", "melodiouschorus.com": "Leven Labs, Inc. DBA Admiral", - "melodiouscomposition.com": "Leven Labs, Inc. DBA Admiral", "meltmilk.com": "Leven Labs, Inc. DBA Admiral", "memopilot.com": "Leven Labs, Inc. DBA Admiral", "memorizematch.com": "Leven Labs, Inc. DBA Admiral", @@ -51542,6 +51115,7 @@ "mixedreading.com": "Leven Labs, Inc. DBA Admiral", "modularmental.com": "Leven Labs, Inc. DBA Admiral", "monacobeatles.com": "Leven Labs, Inc. DBA Admiral", + "monacobeatles.com": "Leven Labs, Inc. DBA Admiral", "moorshoes.com": "Leven Labs, Inc. DBA Admiral", "motionflowers.com": "Leven Labs, Inc. DBA Admiral", "motionlessbag.com": "Leven Labs, Inc. DBA Admiral", @@ -51565,6 +51139,7 @@ "niftyhospital.com": "Leven Labs, Inc. DBA Admiral", "nightwound.com": "Leven Labs, Inc. DBA Admiral", "nocturnalloom.com": "Leven Labs, Inc. DBA Admiral", + "nocturnalloom.com": "Leven Labs, Inc. DBA Admiral", "nondescriptcrowd.com": "Leven Labs, Inc. DBA Admiral", "nondescriptnote.com": "Leven Labs, Inc. DBA Admiral", "nostalgicneed.com": "Leven Labs, Inc. DBA Admiral", @@ -51595,12 +51170,14 @@ "peacefullimit.com": "Leven Labs, Inc. DBA Admiral", "petiteumbrella.com": "Leven Labs, Inc. DBA Admiral", "piquantgrove.com": "Leven Labs, Inc. DBA Admiral", + "piquantgrove.com": "Leven Labs, Inc. DBA Admiral", "piquantvortex.com": "Leven Labs, Inc. DBA Admiral", "placidactivity.com": "Leven Labs, Inc. DBA Admiral", "placidperson.com": "Leven Labs, Inc. DBA Admiral", "planebasin.com": "Leven Labs, Inc. DBA Admiral", "plantdigestion.com": "Leven Labs, Inc. DBA Admiral", "playfulriver.com": "Leven Labs, Inc. DBA Admiral", + "playfulriver.com": "Leven Labs, Inc. DBA Admiral", "pleasantpump.com": "Leven Labs, Inc. DBA Admiral", "plotrabbit.com": "Leven Labs, Inc. DBA Admiral", "pluckypocket.com": "Leven Labs, Inc. DBA Admiral", @@ -51625,6 +51202,7 @@ "pricklydebt.com": "Leven Labs, Inc. DBA Admiral", "pricklypollution.com": "Leven Labs, Inc. DBA Admiral", "pristinegale.com": "Leven Labs, Inc. DBA Admiral", + "pristinegale.com": "Leven Labs, Inc. DBA Admiral", "processplantation.com": "Leven Labs, Inc. DBA Admiral", "profusesupport.com": "Leven Labs, Inc. DBA Admiral", "protestcopy.com": "Leven Labs, Inc. DBA Admiral", @@ -51685,6 +51263,7 @@ "rightfulfall.com": "Leven Labs, Inc. DBA Admiral", "rigidrobin.com": "Leven Labs, Inc. DBA Admiral", "rollconnection.com": "Leven Labs, Inc. DBA Admiral", + "rollconnection.com": "Leven Labs, Inc. DBA Admiral", "roofrelation.com": "Leven Labs, Inc. DBA Admiral", "roseincome.com": "Leven Labs, Inc. DBA Admiral", "ruralrobin.com": "Leven Labs, Inc. DBA Admiral", @@ -51740,6 +51319,7 @@ "sheargovernor.com": "Leven Labs, Inc. DBA Admiral", "shesubscriptions.com": "Leven Labs, Inc. DBA Admiral", "shinypond.com": "Leven Labs, Inc. DBA Admiral", + "shinypond.com": "Leven Labs, Inc. DBA Admiral", "shirtsidewalk.com": "Leven Labs, Inc. DBA Admiral", "shiveringspot.com": "Leven Labs, Inc. DBA Admiral", "shiverscissors.com": "Leven Labs, Inc. DBA Admiral", @@ -51788,6 +51368,7 @@ "spotlessstamp.com": "Leven Labs, Inc. DBA Admiral", "spottednoise.com": "Leven Labs, Inc. DBA Admiral", "sprysummit.com": "Leven Labs, Inc. DBA Admiral", + "sprysummit.com": "Leven Labs, Inc. DBA Admiral", "spuriousair.com": "Leven Labs, Inc. DBA Admiral", "spysubstance.com": "Leven Labs, Inc. DBA Admiral", "squalidscrew.com": "Leven Labs, Inc. DBA Admiral", @@ -51878,6 +51459,8 @@ "tranquilplume.com": "Leven Labs, Inc. DBA Admiral", "tranquilveil.com": "Leven Labs, Inc. DBA Admiral", "tranquilveranda.com": "Leven Labs, Inc. DBA Admiral", + "tranquilveil.com": "Leven Labs, Inc. DBA Admiral", + "tranquilveranda.com": "Leven Labs, Inc. DBA Admiral", "tremendousearthquake.com": "Leven Labs, Inc. DBA Admiral", "tremendousplastic.com": "Leven Labs, Inc. DBA Admiral", "tritebadge.com": "Leven Labs, Inc. DBA Admiral", @@ -51906,6 +51489,7 @@ "unwieldyimpulse.com": "Leven Labs, Inc. DBA Admiral", "unwieldyplastic.com": "Leven Labs, Inc. DBA Admiral", "uppitytime.com": "Leven Labs, Inc. DBA Admiral", + "uppitytime.com": "Leven Labs, Inc. DBA Admiral", "uselesslumber.com": "Leven Labs, Inc. DBA Admiral", "vanishmemory.com": "Leven Labs, Inc. DBA Admiral", "velvetquasar.com": "Leven Labs, Inc. DBA Admiral", @@ -51914,18 +51498,20 @@ "venusgloria.com": "Leven Labs, Inc. DBA Admiral", "verdantanswer.com": "Leven Labs, Inc. DBA Admiral", "verdantlabyrinth.com": "Leven Labs, Inc. DBA Admiral", + "verdantlabyrinth.com": "Leven Labs, Inc. DBA Admiral", "verdantloom.com": "Leven Labs, Inc. DBA Admiral", "verseballs.com": "Leven Labs, Inc. DBA Admiral", "vibrantcelebration.com": "Leven Labs, Inc. DBA Admiral", "vibrantgale.com": "Leven Labs, Inc. DBA Admiral", "vibranthaven.com": "Leven Labs, Inc. DBA Admiral", "vibrantpact.com": "Leven Labs, Inc. DBA Admiral", + "vibrantpact.com": "Leven Labs, Inc. DBA Admiral", "vibranttalisman.com": "Leven Labs, Inc. DBA Admiral", "virtualvincent.com": "Leven Labs, Inc. DBA Admiral", "vividcanopy.com": "Leven Labs, Inc. DBA Admiral", - "vividfrost.com": "Leven Labs, Inc. DBA Admiral", "vividmeadow.com": "Leven Labs, Inc. DBA Admiral", "vividplume.com": "Leven Labs, Inc. DBA Admiral", + "vividplume.com": "Leven Labs, Inc. DBA Admiral", "volatileprofit.com": "Leven Labs, Inc. DBA Admiral", "volatilevessel.com": "Leven Labs, Inc. DBA Admiral", "voraciousgrip.com": "Leven Labs, Inc. DBA Admiral", diff --git a/scripts/update_embedded.sh b/scripts/update_embedded.sh index 3083a0e983..c14009e6f2 100755 --- a/scripts/update_embedded.sh +++ b/scripts/update_embedded.sh @@ -4,8 +4,8 @@ set -eo pipefail # The following URLs shall match the ones in AppConfigurationURLprovider.swift. # Danger checks that the URLs match on every PR. If the code changes, the regex that Danger uses may need an update. -TDS_URL="https://staticcdn.duckduckgo.com/trackerblocking/v5/current/macos-tds.json" CONFIG_URL="https://staticcdn.duckduckgo.com/trackerblocking/config/v4/macos-config.json" +TDS_URL="https://staticcdn.duckduckgo.com/trackerblocking/v6/current/macos-tds.json" # If -c is passed, then check the URLs in the Configuration files are correct. if [ "$1" == "-c" ]; then From 0d2c7a46869ccc8399fbd80ca017d16c978b6001 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 15 Mar 2024 17:35:53 -0700 Subject: [PATCH 12/60] remove dead code --- .../ClickToLoad/ClickToLoadUserScript.swift | 194 ------------------ .../ScriptSourceProviding.swift | 7 - 2 files changed, 201 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift index 1400fb280d..da2be89fd9 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift @@ -75,7 +75,6 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { private func handleGetClickToLoadState(params: Any, message: UserScriptMessage) -> Encodable? { webView = message.messageWebView - print("handleGetClickToLoadState for url \(String(describing: message)) for webView \(webView?.url)") return [ "devMode": devMode, "youtubePreviewsEnabled": false @@ -105,200 +104,7 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { public func displayClickToLoadPlaceholders() { print("displayClickToLoadPlaceholders for url \(String(describing: webView?.url)) for broker \(broker)") if let webView = webView { - let fbSurrogate = """ - (() => { - 'use strict'; - console.warn('fb-sdk document.currentScript.src', document.currentScript, document.currentScript?.src); - console.warn('in fbSurrogate, location is', window.location.href); - window.fbTest = "inline surrogate"; - const facebookEntity = 'Facebook, Inc.'; - const originalFBURL = 'https://connect.facebook.net/en_US/sdk.js?XFBML=false' //FIXME: document.currentScript.src; - let siteInit = function () {}; - let fbIsEnabled = false; - let initData = {}; - let runInit = false; - const parseCalls = []; - const popupName = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 12); - const fbLogin = { - callback: function () {}, - params: undefined, - shouldRun: false - }; - function messageAddon (detailObject) { - detailObject.entity = facebookEntity; - const event = new CustomEvent('ddg-ctp', { - detail: detailObject, - bubbles: false, - cancelable: false, - composed: false - }); - dispatchEvent(event); - } - /** - * When setting up the Facebook SDK, the site may define a function called window.fbAsyncInit. - * Once the SDK loads, it searches for and calls window.fbAsyncInit. However, some sites may - * not use this, and just call FB.init directly at some point (after ensuring that the script has loaded). - * - * Our surrogate (defined below in window.FB) captures calls made to init by page scripts. If at a - * later point we load the real sdk here, we then re-call init with whatever arguments the page passed in - * originally. The runInit param should be true when a page has called init directly. - * Because we put it in asyncInit, the flow will be something like: - * - * FB SDK loads -> SDK calls window.fbAsyncInit -> Our function calls window.FB.init (maybe) -> - * our function calls original fbAsyncInit (if it existed) - */ - function enableFacebookSDK () { - if (!fbIsEnabled) { - window.FB = undefined; - window.fbAsyncInit = function () { - if (runInit && initData) { - window.FB.init(initData); - } - siteInit(); - if (fbLogin.shouldRun) { - window.FB.login(fbLogin.callback, fbLogin.params); - } - }; - const fbScript = document.createElement('script'); - fbScript.setAttribute('crossorigin', 'anonymous'); - fbScript.setAttribute('async', ''); - fbScript.setAttribute('defer', ''); - fbScript.src = originalFBURL; - fbScript.onload = function () { - for (const node of parseCalls) { - window.FB.XFBML.parse.apply(window.FB.XFBML, node); - } - }; - document.head.appendChild(fbScript); - fbIsEnabled = true; - } else { - if (initData) { - window.FB.init(initData); - } - } - } - function runFacebookLogin () { - fbLogin.shouldRun = true; - replaceWindowOpen(); - loginPopup(); - enableFacebookSDK(); - } - function replaceWindowOpen () { - const oldOpen = window.open; - window.open = function (url, name, windowParams) { - const u = new URL(url); - if (u.origin === 'https://www.facebook.com') { - name = popupName; - } - return oldOpen.call(window, url, name, windowParams); - }; - } - function loginPopup () { - const width = Math.min(window.screen.width, 450); - const height = Math.min(window.screen.height, 450); - const popupParams = `width=${width},height=${height},scrollbars=1,location=1`; - window.open('about:blank', popupName, popupParams); - } - window.addEventListener('ddg-ctp-load-sdk', event => { - if (event.detail.entity === facebookEntity) { - enableFacebookSDK(); - } - }); - window.addEventListener('ddg-ctp-run-login', event => { - if (event.detail.entity === facebookEntity) { - runFacebookLogin(); - } - }); - window.addEventListener('ddg-ctp-cancel-modal', event => { - if (event.detail.entity === facebookEntity) { - fbLogin.callback({ }); - } - }); - // Instead of using fbAsyncInit, some websites create a list of FB API calls - // that should be made after init. - const bufferCalls = window.FB && window.FB.__buffer && window.FB.__buffer.calls; - function init () { - if (window.fbAsyncInit) { - siteInit = window.fbAsyncInit; - window.fbAsyncInit(); - } - if (bufferCalls) { - for (const [method, params] of bufferCalls) { - if (Object.prototype.hasOwnProperty.call(window.FB, method)) { - window.FB[method].apply(window.FB, params); - } - } - } - } - if (!window.FB || window.FB.__buffer) { - window.FB = { - api: function (url, cb) { cb(); }, - init: function (obj) { - if (obj) { - initData = obj; - runInit = true; - messageAddon({ - appID: obj.appId - }); - } - }, - ui: function (obj, cb) { - if (obj.method && obj.method === 'share') { - const shareLink = 'https://www.facebook.com/sharer/sharer.php?u=' + obj.href; - window.open(shareLink, 'share-facebook', 'width=550,height=235'); - } - // eslint-disable-next-line node/no-callback-literal - cb({}); - }, - getAccessToken: function () {}, - getAuthResponse: function () { - return { status: '' }; - }, - // eslint-disable-next-line node/no-callback-literal - getLoginStatus: function (callback) { callback({ status: 'unknown' }); }, - getUserID: function () {}, - login: function (cb, params) { - fbLogin.callback = cb; - fbLogin.params = params; - messageAddon({ - action: 'login' - }); - }, - logout: function () {}, - AppEvents: { - EventNames: {}, - logEvent: function (a, b, c) {}, - logPageView: function () {} - }, - Event: { - subscribe: function (event, callback) { - if (event === 'xfbml.render') { - callback(); - } - }, - unsubscribe: function () {} - }, - XFBML: { - parse: function (n) { - parseCalls.push(n); - } - } - }; - if (document.readyState === 'complete') { - init(); - } else { - // sdk script loaded before page content, so wait for load. - window.addEventListener('load', (event) => { - init(); - }); - } - } - window.dispatchEvent(new CustomEvent('ddg-ctp-surrogate-load')); - console.warn('dispatched event'); - })(); - """ broker?.push(method: "displayClickToLoadPlaceholders", params: ["ruleAction": ["block"]], for: self, into: webView) - webView.evaluateJavaScript(fbSurrogate, in: nil, in: WKContentWorld.page) } } } diff --git a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift index f245a23f87..931c912a07 100644 --- a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift +++ b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift @@ -29,7 +29,6 @@ protocol ScriptSourceProviding { var privacyConfigurationManager: PrivacyConfigurationManaging { get } var autofillSourceProvider: AutofillUserScriptSourceProvider? { get } var sessionKey: String? { get } - var clickToLoadSource: String { get } func buildAutofillSource() -> AutofillUserScriptSourceProvider } @@ -46,7 +45,6 @@ struct ScriptSourceProvider: ScriptSourceProviding { private(set) var surrogatesConfig: SurrogatesUserScriptConfig? private(set) var autofillSourceProvider: AutofillUserScriptSourceProvider? private(set) var sessionKey: String? - private(set) var clickToLoadSource: String = "" let configStorage: ConfigurationStoring let privacyConfigurationManager: PrivacyConfigurationManaging @@ -72,7 +70,6 @@ struct ScriptSourceProvider: ScriptSourceProviding { self.contentBlockerRulesConfig = buildContentBlockerRulesConfig() self.surrogatesConfig = buildSurrogatesConfig() self.sessionKey = generateSessionKey() - self.clickToLoadSource = buildClickToLoadSource() self.autofillSourceProvider = buildAutofillSource() } @@ -155,8 +152,4 @@ struct ScriptSourceProvider: ScriptSourceProviding { return font } - private func buildClickToLoadSource() -> String { - return "" - } - } From 3a0c7fd447c1300f203b61a6305481ba1b56787b Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Mon, 18 Mar 2024 12:22:01 -0700 Subject: [PATCH 13/60] switch back to separate blocking CTL rule set --- .../ClickToLoadRulesSplitter.swift | 51 ++++++++++++++++--- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift index a56b6df709..5b57f651ce 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift @@ -52,12 +52,13 @@ struct ClickToLoadRulesSplitter { } private func split(trackerData: TrackerDataManager.DataSet) -> (withoutBlockCTL: TrackerDataManager.DataSet, withBlockCTL: TrackerDataManager.DataSet)? { - let trackersWithBlockCTL = filterTrackersWithCTLAction(trackerData.tds.trackers) + // the logic for CTL tracker management has been updated, now the main TDS list retains the CTL blocking/surrogate rules at all times, and there is a separate CTL "ignore" override rule set + // this CTL override side are now only added when CTL protections are removed, to override the corresponding blocking / surrogate rules + let (mainTDSTrackers, ctlTrackers) = processCTLActions(trackerData.tds.trackers) - if !trackersWithBlockCTL.isEmpty { - let trackersWithoutBlockCTL = filterTrackersWithoutCTLAction(trackerData.tds.trackers) - let trackerDataWithoutBlockCTL = makeTrackerData(using: trackersWithoutBlockCTL, originalTDS: trackerData.tds) - let trackerDataWithBlockCTL = makeTrackerData(using: trackersWithBlockCTL, originalTDS: trackerData.tds) + if !ctlTrackers.isEmpty { + let trackerDataWithoutBlockCTL = makeTrackerData(using: mainTDSTrackers, originalTDS: trackerData.tds) + let trackerDataWithBlockCTL = makeTrackerData(using: ctlTrackers, originalTDS: trackerData.tds) return ( (tds: trackerDataWithoutBlockCTL, etag: Constants.clickToLoadRuleListPrefix + trackerData.etag), @@ -76,6 +77,42 @@ struct ClickToLoadRulesSplitter { cnames: originalTDS.cnames) } + private func processCTLActions(_ trackers: [String: KnownTracker]) -> (mainTDS: [String: KnownTracker], ctlOverrides: [String: KnownTracker]) { + var mainTDSTrackers = trackers + var ctlTrackers: [String: KnownTracker] = [:] + + for (key, tracker) in mainTDSTrackers { + if let rules = tracker.rules as [KnownTracker.Rule]? { + var ctlRules: [KnownTracker.Rule] = [] + + for ruleIndex in rules.indices.reversed() { + if let action = rules[ruleIndex].action, action == .blockCtlFB { + var newRule = rules[ruleIndex] + if newRule.surrogate != nil { + // if rule includes a surroate, the action should be nil, as it gets converted to a redirect + newRule.action = nil + } else { + newRule.action = .block + } + print("RULE MATCH for \(key): \(rules[ruleIndex]) -> \(newRule)") + + mainTDSTrackers[key]?.rules?.remove(at: ruleIndex) + ctlRules.insert(newRule, at: 0) + } + } + + if !ctlRules.isEmpty { + var ctlTracker = tracker + ctlTracker.defaultAction = .ignore + ctlTracker.rules = ctlRules + ctlTrackers[key] = ctlTracker + } + } + } + + return (mainTDSTrackers, ctlTrackers) + } + private func filterTrackersWithoutCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { trackers.filter { (_, tracker) in tracker.containsCTLActions == false } } @@ -89,7 +126,7 @@ struct ClickToLoadRulesSplitter { if modifiedTracker.defaultAction == .blockCtlFB { modifiedTracker.defaultAction = .block } - print("RULES BEFORE \(modifiedTracker.rules)") +// print("RULES BEFORE \(modifiedTracker.rules)") if let rules = modifiedTracker.rules as [KnownTracker.Rule]? { for ruleIndex in rules.indices { @@ -99,7 +136,7 @@ struct ClickToLoadRulesSplitter { } } } - print("RULES AFTER \(modifiedTracker.rules)") +// print("RULES AFTER \(modifiedTracker.rules)") return (key, modifiedTracker) }) From 7156d7883a31a0d3fc04b88b3d5aa116a4d940f0 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Tue, 19 Mar 2024 18:38:25 -0700 Subject: [PATCH 14/60] switch back to previous CTL rules, part 2 This restores functionality where --- .../ClickToLoadRulesSplitter.swift | 41 +++++++++---------- .../FBProtectionTabExtension.swift | 2 +- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift index 5b57f651ce..2c8e805b09 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift @@ -25,6 +25,7 @@ struct ClickToLoadRulesSplitter { public enum Constants { public static let clickToLoadRuleListPrefix = "CTL_" + public static let tdsRuleListPrefix = "TDS_" } @@ -52,21 +53,20 @@ struct ClickToLoadRulesSplitter { } private func split(trackerData: TrackerDataManager.DataSet) -> (withoutBlockCTL: TrackerDataManager.DataSet, withBlockCTL: TrackerDataManager.DataSet)? { - // the logic for CTL tracker management has been updated, now the main TDS list retains the CTL blocking/surrogate rules at all times, and there is a separate CTL "ignore" override rule set - // this CTL override side are now only added when CTL protections are removed, to override the corresponding blocking / surrogate rules - let (mainTDSTrackers, ctlTrackers) = processCTLActions(trackerData.tds.trackers) + let trackersWithBlockCTL = filterTrackersWithCTLAction(trackerData.tds.trackers) - if !ctlTrackers.isEmpty { - let trackerDataWithoutBlockCTL = makeTrackerData(using: mainTDSTrackers, originalTDS: trackerData.tds) - let trackerDataWithBlockCTL = makeTrackerData(using: ctlTrackers, originalTDS: trackerData.tds) + if !trackersWithBlockCTL.isEmpty { + let trackersWithoutBlockCTL = filterTrackersWithoutCTLAction(trackerData.tds.trackers) + let trackerDataWithoutBlockCTL = makeTrackerData(using: trackersWithoutBlockCTL, originalTDS: trackerData.tds) + let trackerDataWithBlockCTL = makeTrackerData(using: trackersWithBlockCTL, originalTDS: trackerData.tds) - return ( - (tds: trackerDataWithoutBlockCTL, etag: Constants.clickToLoadRuleListPrefix + trackerData.etag), - (tds: trackerDataWithBlockCTL, etag: Constants.clickToLoadRuleListPrefix + trackerData.etag) - ) - } - return nil - } + return ( + (tds: trackerDataWithoutBlockCTL, etag: Constants.tdsRuleListPrefix + trackerData.etag), + (tds: trackerDataWithBlockCTL, etag: Constants.clickToLoadRuleListPrefix + trackerData.etag) + ) + } + return nil + } private func makeTrackerData(using trackers: [String: KnownTracker], originalTDS: TrackerData) -> TrackerData { let entities = originalTDS.extractEntities(for: trackers) @@ -94,7 +94,6 @@ struct ClickToLoadRulesSplitter { } else { newRule.action = .block } - print("RULE MATCH for \(key): \(rules[ruleIndex]) -> \(newRule)") mainTDSTrackers[key]?.rules?.remove(at: ruleIndex) ctlRules.insert(newRule, at: 0) @@ -122,21 +121,19 @@ struct ClickToLoadRulesSplitter { return tracker.containsCTLActions == true }.map { (key, value) in var modifiedTracker = value - // Modify the tracker here - if modifiedTracker.defaultAction == .blockCtlFB { - modifiedTracker.defaultAction = .block - } -// print("RULES BEFORE \(modifiedTracker.rules)") + // Modify the tracker here if let rules = modifiedTracker.rules as [KnownTracker.Rule]? { for ruleIndex in rules.indices { if let action = rules[ruleIndex].action, action == .blockCtlFB { -// modifiedTracker.rules?[ruleIndex].action = .block - modifiedTracker.rules?[ruleIndex].action = nil + if rules[ruleIndex].surrogate != nil { + modifiedTracker.rules?[ruleIndex].action = nil + } else { + modifiedTracker.rules?[ruleIndex].action = .block + } } } } -// print("RULES AFTER \(modifiedTracker.rules)") return (key, modifiedTracker) }) diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index abe42a2be5..5d946f545a 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -83,7 +83,7 @@ extension FBProtectionTabExtension { do { try userContentController.disableGlobalContentRuleList(withIdentifier: ContentBlockerRulesLists.Constants.clickToLoadRulesListName) } catch { - assertionFailure("FB List was not enabled") + assertionFailure("Missing FB List") return false } } From fd7287eca3e2b5b317e0d858302701907f762268 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Thu, 21 Mar 2024 16:18:44 -0700 Subject: [PATCH 15/60] combine rules for surrogates user script --- .../ScriptSourceProviding.swift | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift index 931c912a07..4113c9ca78 100644 --- a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift +++ b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift @@ -21,6 +21,7 @@ import Combine import Common import BrowserServicesKit import Configuration +import TrackerRadarKit protocol ScriptSourceProviding { @@ -114,12 +115,11 @@ struct ScriptSourceProvider: ScriptSourceProviding { #endif let surrogates = configStorage.loadData(for: .surrogates)?.utf8String() ?? "" - let tdsName = DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName - let rules = contentBlockingManager.currentRules.first(where: { $0.name == tdsName}) + let allTrackers = mergeTrackerDataSets(rules: contentBlockingManager.currentRules) return DefaultSurrogatesUserScriptConfig(privacyConfig: privacyConfigurationManager.privacyConfig, surrogates: surrogates, - trackerData: rules?.trackerData, - encodedSurrogateTrackerData: rules?.encodedTrackerData, + trackerData: allTrackers.trackerData, + encodedSurrogateTrackerData: allTrackers.encodedTrackerData, trackerDataManager: trackerDataManager, tld: tld, isDebugBuild: isDebugBuild) @@ -138,6 +138,29 @@ struct ScriptSourceProvider: ScriptSourceProviding { return data } + private func mergeTrackerDataSets(rules: [ContentBlockerRulesManager.Rules]) -> (trackerData: TrackerData, encodedTrackerData: String) { + let tdsName = DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName + let tdsIndex = contentBlockingManager.currentRules.firstIndex(where: { $0.name == tdsName}) + + // copy main TDS, to retain cnames (also, perf) + var combinedTrackerData = rules[tdsIndex!].trackerData + for index in 0...rules.count-1 { + print("\(rules[index].name): \(rules[index].trackerData.trackers.count) trackers, \(rules[index].trackerData.entities.count) entities, \(rules[index].trackerData.domains.count) domains") + if index != tdsIndex { + combinedTrackerData.trackers.merge(rules[index].trackerData.trackers) { (current, _) in current } + combinedTrackerData.entities.merge(rules[index].trackerData.entities) { (current, _) in current } + combinedTrackerData.domains.merge(rules[index].trackerData.domains) { (current, _) in current } + } + } + print("COMBINED: \(combinedTrackerData.trackers.count) trackers, \(combinedTrackerData.entities.count) entities, \(combinedTrackerData.domains.count) domains") + + let surrogateTDS = ContentBlockerRulesManager.extractSurrogates(from: combinedTrackerData) + let encodedData = try? JSONEncoder().encode(surrogateTDS) + let encodedTrackerData = String(data: encodedData!, encoding: .utf8)! + + return (trackerData: combinedTrackerData, encodedTrackerData: encodedTrackerData) + } + private func loadFont(_ fileName: String, _ fileExt: String) -> String? { let url = Bundle.main.url( forResource: fileName, From 7025ba1efb0aeb247a0b3a2c4489e19e143431fa Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 5 Apr 2024 10:31:00 -0700 Subject: [PATCH 16/60] cleanup surrogate code to remove need for vars --- .../ClickToLoadRulesSplitter.swift | 127 ++++++++++-------- .../ClickToLoad/ClickToLoadUserScript.swift | 1 - .../ScriptSourceProviding.swift | 42 +++--- .../ContentBlockingTabExtension.swift | 4 + 4 files changed, 92 insertions(+), 82 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift index 2c8e805b09..2d9efd7905 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift @@ -1,6 +1,5 @@ // // ClickToLoadRulesSplitter.swift -// DuckDuckGo // // Copyright © 2023 DuckDuckGo. All rights reserved. // @@ -53,20 +52,20 @@ struct ClickToLoadRulesSplitter { } private func split(trackerData: TrackerDataManager.DataSet) -> (withoutBlockCTL: TrackerDataManager.DataSet, withBlockCTL: TrackerDataManager.DataSet)? { - let trackersWithBlockCTL = filterTrackersWithCTLAction(trackerData.tds.trackers) + let trackersWithBlockCTL = filterTrackersWithCTLAction(trackerData.tds.trackers) - if !trackersWithBlockCTL.isEmpty { - let trackersWithoutBlockCTL = filterTrackersWithoutCTLAction(trackerData.tds.trackers) - let trackerDataWithoutBlockCTL = makeTrackerData(using: trackersWithoutBlockCTL, originalTDS: trackerData.tds) - let trackerDataWithBlockCTL = makeTrackerData(using: trackersWithBlockCTL, originalTDS: trackerData.tds) + if !trackersWithBlockCTL.isEmpty { + let trackersWithoutBlockCTL = filterTrackersWithoutCTLAction(trackerData.tds.trackers) + let trackerDataWithoutBlockCTL = makeTrackerData(using: trackersWithoutBlockCTL, originalTDS: trackerData.tds) + let trackerDataWithBlockCTL = makeTrackerData(using: trackersWithBlockCTL, originalTDS: trackerData.tds) - return ( - (tds: trackerDataWithoutBlockCTL, etag: Constants.tdsRuleListPrefix + trackerData.etag), - (tds: trackerDataWithBlockCTL, etag: Constants.clickToLoadRuleListPrefix + trackerData.etag) - ) - } - return nil - } + return ( + (tds: trackerDataWithoutBlockCTL, etag: Constants.tdsRuleListPrefix + trackerData.etag), + (tds: trackerDataWithBlockCTL, etag: Constants.clickToLoadRuleListPrefix + trackerData.etag) + ) + } + return nil + } private func makeTrackerData(using trackers: [String: KnownTracker], originalTDS: TrackerData) -> TrackerData { let entities = originalTDS.extractEntities(for: trackers) @@ -77,40 +76,40 @@ struct ClickToLoadRulesSplitter { cnames: originalTDS.cnames) } - private func processCTLActions(_ trackers: [String: KnownTracker]) -> (mainTDS: [String: KnownTracker], ctlOverrides: [String: KnownTracker]) { - var mainTDSTrackers = trackers - var ctlTrackers: [String: KnownTracker] = [:] - - for (key, tracker) in mainTDSTrackers { - if let rules = tracker.rules as [KnownTracker.Rule]? { - var ctlRules: [KnownTracker.Rule] = [] - - for ruleIndex in rules.indices.reversed() { - if let action = rules[ruleIndex].action, action == .blockCtlFB { - var newRule = rules[ruleIndex] - if newRule.surrogate != nil { - // if rule includes a surroate, the action should be nil, as it gets converted to a redirect - newRule.action = nil - } else { - newRule.action = .block - } - - mainTDSTrackers[key]?.rules?.remove(at: ruleIndex) - ctlRules.insert(newRule, at: 0) - } - } - - if !ctlRules.isEmpty { - var ctlTracker = tracker - ctlTracker.defaultAction = .ignore - ctlTracker.rules = ctlRules - ctlTrackers[key] = ctlTracker - } - } - } - - return (mainTDSTrackers, ctlTrackers) - } +// private func processCTLActions(_ trackers: [String: KnownTracker]) -> (mainTDS: [String: KnownTracker], ctlOverrides: [String: KnownTracker]) { +// var mainTDSTrackers = trackers +// var ctlTrackers: [String: KnownTracker] = [:] +// +// for (key, tracker) in mainTDSTrackers { +// if let rules = tracker.rules as [KnownTracker.Rule]? { +// var ctlRules: [KnownTracker.Rule] = [] +// +// for ruleIndex in rules.indices.reversed() { +// if let action = rules[ruleIndex].action, action == .blockCtlFB { +// var newRule = rules[ruleIndex] +// if newRule.surrogate != nil { +// // if rule includes a surroate, the action should be nil, as it gets converted to a redirect +// newRule.action = nil +// } else { +// newRule.action = .block +// } +// +// mainTDSTrackers[key]?.rules?.remove(at: ruleIndex) +// ctlRules.insert(newRule, at: 0) +// } +// } +// +// if !ctlRules.isEmpty { +// var ctlTracker = tracker +// ctlTracker.defaultAction = .ignore +// ctlTracker.rules = ctlRules +// ctlTrackers[key] = ctlTracker +// } +// } +// } +// +// return (mainTDSTrackers, ctlTrackers) +// } private func filterTrackersWithoutCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { trackers.filter { (_, tracker) in tracker.containsCTLActions == false } @@ -119,23 +118,37 @@ struct ClickToLoadRulesSplitter { private func filterTrackersWithCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { return Dictionary(uniqueKeysWithValues: trackers.filter { (_, tracker) in return tracker.containsCTLActions == true - }.map { (key, value) in - var modifiedTracker = value - + }.map { (trackerKey, trackerValue) in // Modify the tracker here - if let rules = modifiedTracker.rules as [KnownTracker.Rule]? { - for ruleIndex in rules.indices { - if let action = rules[ruleIndex].action, action == .blockCtlFB { - if rules[ruleIndex].surrogate != nil { - modifiedTracker.rules?[ruleIndex].action = nil + if let rules = trackerValue.rules as [KnownTracker.Rule]? { + let updatedRules = rules.map { (ruleValue) in + var action = ruleValue.action + if action == .blockCtlFB { + if ruleValue.surrogate != nil { + action = nil } else { - modifiedTracker.rules?[ruleIndex].action = .block + action = .block } } + let newRule = KnownTracker.Rule(rule: ruleValue.rule, + surrogate: ruleValue.surrogate, + action: action, + options: ruleValue.options, + exceptions: ruleValue.exceptions) + return newRule } + let updatedTracker = KnownTracker(domain: trackerValue.domain, + defaultAction: trackerValue.defaultAction, + owner: trackerValue.owner, + prevalence: trackerValue.prevalence, + subdomains: trackerValue.subdomains, + categories: trackerValue.categories, + rules: updatedRules) + + return (trackerKey, updatedTracker) } - return (key, modifiedTracker) + return (trackerKey, trackerValue) }) } diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift index da2be89fd9..bad654c075 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift @@ -100,7 +100,6 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { return nil } - // swiftlint:disable function_body_length public func displayClickToLoadPlaceholders() { print("displayClickToLoadPlaceholders for url \(String(describing: webView?.url)) for broker \(broker)") if let webView = webView { diff --git a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift index 4113c9ca78..8d46a199a6 100644 --- a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift +++ b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift @@ -142,17 +142,26 @@ struct ScriptSourceProvider: ScriptSourceProviding { let tdsName = DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName let tdsIndex = contentBlockingManager.currentRules.firstIndex(where: { $0.name == tdsName}) - // copy main TDS, to retain cnames (also, perf) - var combinedTrackerData = rules[tdsIndex!].trackerData - for index in 0...rules.count-1 { - print("\(rules[index].name): \(rules[index].trackerData.trackers.count) trackers, \(rules[index].trackerData.entities.count) entities, \(rules[index].trackerData.domains.count) domains") - if index != tdsIndex { - combinedTrackerData.trackers.merge(rules[index].trackerData.trackers) { (current, _) in current } - combinedTrackerData.entities.merge(rules[index].trackerData.entities) { (current, _) in current } - combinedTrackerData.domains.merge(rules[index].trackerData.domains) { (current, _) in current } + let cnames = rules[tdsIndex!].trackerData.cnames + var combinedTrackers: [String: KnownTracker] = [:] + var combinedEntities: [String: Entity] = [:] + var combinedDomains: [String: String] = [:] + rules.forEach { ruleSet in + ruleSet.trackerData.trackers.forEach { key, value in + combinedTrackers[key] = value + } + ruleSet.trackerData.entities.forEach { key, value in + combinedEntities[key] = value + } + ruleSet.trackerData.domains.forEach { key, value in + combinedDomains[key] = value } } - print("COMBINED: \(combinedTrackerData.trackers.count) trackers, \(combinedTrackerData.entities.count) entities, \(combinedTrackerData.domains.count) domains") + + let combinedTrackerData = TrackerData(trackers: combinedTrackers, + entities: combinedEntities, + domains: combinedDomains, + cnames: cnames) let surrogateTDS = ContentBlockerRulesManager.extractSurrogates(from: combinedTrackerData) let encodedData = try? JSONEncoder().encode(surrogateTDS) @@ -160,19 +169,4 @@ struct ScriptSourceProvider: ScriptSourceProviding { return (trackerData: combinedTrackerData, encodedTrackerData: encodedTrackerData) } - - private func loadFont(_ fileName: String, _ fileExt: String) -> String? { - let url = Bundle.main.url( - forResource: fileName, - withExtension: fileExt - ) - guard let base64String = try? Data(contentsOf: url!).base64EncodedString() else { - assertionFailure("Failed to load font") - return nil - } - - let font = "data:application/octet-stream;base64," + base64String - return font - } - } diff --git a/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift index e05df904dc..a84a423c9a 100644 --- a/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift @@ -156,6 +156,10 @@ extension ContentBlockingTabExtension: SurrogatesUserScriptDelegate { return true } + func surrogatesUserScriptShouldProcessCTLTrackers(_ script: SurrogatesUserScript) -> Bool { + return fbBlockingEnabledProvider.fbBlockingEnabled + } + func surrogatesUserScript(_ script: SurrogatesUserScript, detectedTracker tracker: DetectedRequest, withSurrogate host: String) { trackersSubject.send(DetectedTracker(request: tracker, type: .trackerWithSurrogate(host: host))) } From d3d0c872110ac636332c84358165ca5ad4f66af6 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Thu, 11 Apr 2024 13:18:00 -0700 Subject: [PATCH 17/60] update embeds --- .../AppPrivacyConfigurationDataProvider.swift | 4 +- .../AppTrackerDataSetProvider.swift | 4 +- DuckDuckGo/ContentBlocker/trackerData.json | 2156 ++++++++++------- 3 files changed, 1289 insertions(+), 875 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/AppPrivacyConfigurationDataProvider.swift b/DuckDuckGo/ContentBlocker/AppPrivacyConfigurationDataProvider.swift index 4606c3cb3c..95b2cf8503 100644 --- a/DuckDuckGo/ContentBlocker/AppPrivacyConfigurationDataProvider.swift +++ b/DuckDuckGo/ContentBlocker/AppPrivacyConfigurationDataProvider.swift @@ -22,8 +22,8 @@ import BrowserServicesKit final class AppPrivacyConfigurationDataProvider: EmbeddedDataProvider { public struct Constants { - public static let embeddedDataETag = "\"4c644-18e3ab0ef90\"" - public static let embeddedDataSHA = "2b364157d149f3b1a9ef8cd69e16a213d4adada9ca5e5a3f1872f609e83d89af" + public static let embeddedDataETag = "\"35bda-18ec9d0d7f8\"" + public static let embeddedDataSHA = "ba6cb6e4ad76fd69ac137b2331ef05e5c152d6e796a388a18ce3d48da8d35f69" } var embeddedDataEtag: String { diff --git a/DuckDuckGo/ContentBlocker/AppTrackerDataSetProvider.swift b/DuckDuckGo/ContentBlocker/AppTrackerDataSetProvider.swift index 30e6777667..bed5b633f2 100644 --- a/DuckDuckGo/ContentBlocker/AppTrackerDataSetProvider.swift +++ b/DuckDuckGo/ContentBlocker/AppTrackerDataSetProvider.swift @@ -22,8 +22,8 @@ import BrowserServicesKit final class AppTrackerDataSetProvider: EmbeddedDataProvider { public struct Constants { - public static let embeddedDataETag = "\"ec148e720d6291488a96429e5cd639d8\"" - public static let embeddedDataSHA = "7cd2e94aaf67bc693225d03f5fe5fef0de55bb1a8656a8f49b93724155f4b654" + public static let embeddedDataETag = "\"e3f38700e86aa37c35122bbebf0d42cf\"" + public static let embeddedDataSHA = "36ef35555fb614802e0f228a1501a063035bcdd8bb708c1053bd7ef4db97b449" } var embeddedDataEtag: String { diff --git a/DuckDuckGo/ContentBlocker/trackerData.json b/DuckDuckGo/ContentBlocker/trackerData.json index 541aa991df..b9676bf1e7 100644 --- a/DuckDuckGo/ContentBlocker/trackerData.json +++ b/DuckDuckGo/ContentBlocker/trackerData.json @@ -1,7 +1,7 @@ { "_builtWith": { - "tracker-radar": "09133e827d9dcbba9465c87efdf0229ddd910d3e867f8ccd5efc31abd7073963-4013b4e91930c643394cb31c6c745356f133b04f", - "tracker-surrogates": "ba0d8cefe4432723ec75b998241efd2454dff35a" + "tracker-radar": "74dd9601901673a7c0f87e609695b5a0e31b808adabd62e6db6ed7c99bde966d-4013b4e91930c643394cb31c6c745356f133b04f", + "tracker-surrogates": "0528e3226df15b1a3e319ad68ef76612a8f26623" }, "readme": "https://github.com/duckduckgo/tracker-blocklists", "trackers": { @@ -434,7 +434,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -445,7 +445,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -491,7 +491,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2379,7 +2379,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2390,7 +2390,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2434,7 +2434,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2445,7 +2445,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2560,7 +2560,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2694,7 +2694,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -2705,7 +2705,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3024,7 +3024,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3151,7 +3151,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3275,7 +3275,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3659,7 +3659,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3670,7 +3670,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3681,7 +3681,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3692,7 +3692,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3758,7 +3758,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3810,7 +3810,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3821,7 +3821,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -3958,7 +3958,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -4309,7 +4309,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -4344,7 +4344,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -4790,7 +4790,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -4801,7 +4801,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5003,7 +5003,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5045,7 +5045,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5068,7 +5068,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5103,7 +5103,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5132,7 +5132,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5420,7 +5420,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5537,7 +5537,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5548,7 +5548,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5559,7 +5559,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5570,7 +5570,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5607,7 +5607,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -5662,7 +5662,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -6198,7 +6198,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -6352,7 +6352,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -6668,7 +6668,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -6679,7 +6679,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -6799,7 +6799,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -6995,7 +6995,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7031,7 +7031,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7042,7 +7042,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7053,7 +7053,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7664,7 +7664,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7675,7 +7675,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7686,7 +7686,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7767,7 +7767,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7890,7 +7890,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7901,7 +7901,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7979,7 +7979,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -7990,7 +7990,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -8105,7 +8105,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -8256,7 +8256,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -8267,7 +8267,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -8758,7 +8758,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -8769,7 +8769,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -8810,7 +8810,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9226,7 +9226,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9824,7 +9824,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9835,7 +9835,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9846,7 +9846,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9886,7 +9886,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9928,7 +9928,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -9982,7 +9982,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10050,7 +10050,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10061,7 +10061,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10109,7 +10109,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10235,7 +10235,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10395,7 +10395,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10406,7 +10406,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10417,7 +10417,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10444,7 +10444,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10494,7 +10494,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -10541,7 +10541,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -11019,7 +11019,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -11059,7 +11059,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -11795,7 +11795,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -11884,7 +11884,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -11895,7 +11895,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12092,7 +12092,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12132,7 +12132,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12143,7 +12143,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12154,7 +12154,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12165,7 +12165,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12491,7 +12491,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12502,7 +12502,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -12513,7 +12513,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -14421,7 +14421,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -15106,7 +15106,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -15181,7 +15181,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -15232,7 +15232,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16091,7 +16091,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16102,7 +16102,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16131,7 +16131,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16350,7 +16350,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16659,7 +16659,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16670,7 +16670,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16855,7 +16855,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -16904,7 +16904,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -17178,7 +17178,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -17189,7 +17189,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -17752,7 +17752,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -18100,7 +18100,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -18239,7 +18239,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -18598,7 +18598,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -18809,7 +18809,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -19986,7 +19986,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20207,7 +20207,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20218,7 +20218,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20229,7 +20229,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20369,7 +20369,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20856,7 +20856,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20885,7 +20885,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20896,7 +20896,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20907,7 +20907,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -20971,7 +20971,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21051,7 +21051,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21099,7 +21099,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21110,7 +21110,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21150,7 +21150,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21161,7 +21161,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21196,7 +21196,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21207,7 +21207,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21340,7 +21340,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21424,7 +21424,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21895,7 +21895,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21906,7 +21906,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21917,7 +21917,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21987,7 +21987,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -21998,7 +21998,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22151,7 +22151,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22162,7 +22162,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22204,7 +22204,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22215,7 +22215,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22226,7 +22226,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22496,7 +22496,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22507,7 +22507,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22568,7 +22568,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22626,7 +22626,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22637,7 +22637,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22737,7 +22737,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22760,7 +22760,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -22771,7 +22771,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23128,7 +23128,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23232,7 +23232,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23368,7 +23368,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23443,7 +23443,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23454,7 +23454,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23498,7 +23498,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23509,7 +23509,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23520,7 +23520,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23531,7 +23531,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23611,7 +23611,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23644,7 +23644,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23695,7 +23695,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23831,7 +23831,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23960,7 +23960,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -23971,7 +23971,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24218,7 +24218,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24229,7 +24229,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24240,7 +24240,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24521,7 +24521,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24556,7 +24556,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24597,7 +24597,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24713,7 +24713,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24724,7 +24724,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24753,7 +24753,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24849,7 +24849,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24906,7 +24906,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -24917,7 +24917,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25038,7 +25038,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25195,7 +25195,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25221,7 +25221,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25232,7 +25232,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25295,7 +25295,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25306,7 +25306,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25317,7 +25317,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25548,7 +25548,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25575,7 +25575,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25586,7 +25586,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25597,7 +25597,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25627,7 +25627,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25638,7 +25638,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25666,7 +25666,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25677,7 +25677,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25750,7 +25750,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25798,7 +25798,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25809,7 +25809,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25820,7 +25820,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25831,7 +25831,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25842,7 +25842,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25853,7 +25853,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25925,7 +25925,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25936,7 +25936,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -25990,7 +25990,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -26192,7 +26192,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -26500,7 +26500,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -26511,7 +26511,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -26522,7 +26522,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -26773,7 +26773,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -26784,7 +26784,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -27202,7 +27202,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28059,7 +28059,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28208,7 +28208,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28219,7 +28219,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28352,7 +28352,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28435,7 +28435,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28446,7 +28446,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -28807,7 +28807,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -29133,7 +29133,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -29144,7 +29144,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -29270,7 +29270,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -29281,7 +29281,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -31055,7 +31055,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -31398,7 +31398,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32558,7 +32558,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32569,7 +32569,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32580,7 +32580,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32591,7 +32591,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32602,7 +32602,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32613,7 +32613,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32624,7 +32624,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "accurateanimal.com": { + "domain": "accurateanimal.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32635,7 +32646,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32646,7 +32657,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32657,7 +32668,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32668,7 +32679,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32679,7 +32690,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32690,7 +32701,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32701,7 +32712,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32712,7 +32723,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32723,7 +32734,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32734,7 +32745,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32745,7 +32756,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32756,7 +32767,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32767,7 +32778,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32778,7 +32789,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32789,7 +32800,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32800,7 +32811,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32811,7 +32822,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32822,7 +32833,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32833,7 +32844,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32844,7 +32855,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32855,7 +32866,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32866,7 +32877,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32877,7 +32888,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32888,7 +32899,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32899,7 +32910,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32910,7 +32921,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32921,7 +32932,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32932,7 +32943,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32943,7 +32954,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32954,7 +32965,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32965,7 +32976,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32976,7 +32987,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32987,7 +32998,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -32998,7 +33009,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33009,7 +33020,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33020,7 +33031,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33031,7 +33042,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33042,7 +33053,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33053,7 +33064,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33064,7 +33075,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33075,7 +33086,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33086,7 +33097,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33097,7 +33108,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33108,7 +33119,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33119,7 +33130,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33130,7 +33141,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33141,7 +33152,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33152,7 +33163,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33163,7 +33174,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33174,7 +33185,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33185,7 +33196,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33196,7 +33207,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33207,7 +33218,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33218,7 +33229,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33229,7 +33240,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33240,7 +33251,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33251,7 +33262,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33262,7 +33273,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33273,7 +33284,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33284,7 +33295,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33295,7 +33306,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33306,7 +33317,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33317,7 +33328,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33328,7 +33339,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33339,7 +33350,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33350,7 +33361,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33361,7 +33372,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33372,7 +33383,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33383,7 +33394,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33394,7 +33405,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33405,7 +33416,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "calypsocapsule.com": { + "domain": "calypsocapsule.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33416,7 +33438,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33427,7 +33449,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33438,7 +33460,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33449,7 +33471,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33460,7 +33482,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33471,7 +33493,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33482,7 +33504,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33493,7 +33515,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33504,7 +33526,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33515,7 +33537,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33526,7 +33548,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33537,7 +33559,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33548,7 +33570,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33559,7 +33581,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33570,7 +33592,29 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "chaireggnog.com": { + "domain": "chaireggnog.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "chairsdonkey.com": { + "domain": "chairsdonkey.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33581,7 +33625,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33592,7 +33636,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33603,7 +33647,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33614,7 +33658,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33625,7 +33669,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33636,7 +33680,29 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "chipperisle.com": { + "domain": "chipperisle.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "chivalrouscord.com": { + "domain": "chivalrouscord.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33647,7 +33713,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33658,7 +33724,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33669,7 +33735,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33680,7 +33746,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33691,7 +33757,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "cobaltoverture.com": { + "domain": "cobaltoverture.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33702,7 +33779,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33713,7 +33790,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33724,7 +33801,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33735,7 +33812,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33746,7 +33823,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33757,7 +33834,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33768,7 +33845,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33779,7 +33856,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33790,7 +33867,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33801,7 +33878,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33812,7 +33889,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33823,7 +33900,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33834,7 +33911,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33845,7 +33922,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33856,7 +33933,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33867,7 +33944,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33878,7 +33955,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33889,7 +33966,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33900,7 +33977,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33911,7 +33988,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33922,7 +33999,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33933,7 +34010,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33944,7 +34021,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "creatorpassenger.com": { + "domain": "creatorpassenger.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33955,7 +34043,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33966,7 +34054,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33977,7 +34065,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33988,7 +34076,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -33999,7 +34087,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34010,7 +34098,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34021,7 +34109,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34032,7 +34120,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34043,7 +34131,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34054,7 +34142,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34065,7 +34153,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34076,7 +34164,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34087,7 +34175,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34098,7 +34186,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34109,7 +34197,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34120,7 +34208,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34131,7 +34219,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34142,7 +34230,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34153,7 +34241,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34164,7 +34252,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34175,7 +34263,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34186,7 +34274,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34197,7 +34285,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34208,7 +34296,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34219,7 +34307,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34230,7 +34318,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34241,7 +34329,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34252,7 +34340,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34263,7 +34351,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34274,7 +34362,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34285,7 +34373,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34296,7 +34384,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34307,7 +34395,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34318,7 +34406,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34329,7 +34417,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34340,7 +34428,29 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "eagerknight.com": { + "domain": "eagerknight.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "echoinghaven.com": { + "domain": "echoinghaven.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34351,7 +34461,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34362,7 +34472,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "effulgenttempest.com": { + "domain": "effulgenttempest.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34373,7 +34494,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34384,7 +34505,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34395,7 +34516,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34406,7 +34527,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34417,7 +34538,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34428,7 +34549,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34439,7 +34560,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34450,7 +34571,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "engineertrick.com": { + "domain": "engineertrick.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34461,7 +34593,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34472,7 +34604,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34483,7 +34615,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34494,7 +34626,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34505,7 +34637,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34516,7 +34648,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34527,7 +34659,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34538,7 +34670,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34549,7 +34681,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34560,7 +34692,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34571,7 +34703,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34582,7 +34714,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "exquisiteartisanship.com": { + "domain": "exquisiteartisanship.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34593,7 +34736,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34604,7 +34747,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34615,7 +34758,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34626,7 +34769,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34637,7 +34780,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34648,7 +34791,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34659,7 +34802,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34670,7 +34813,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34681,7 +34824,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34692,7 +34835,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34703,7 +34846,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34714,7 +34857,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34725,7 +34868,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34736,7 +34879,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34747,7 +34890,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34758,7 +34901,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34769,7 +34912,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "flameuncle.com": { + "domain": "flameuncle.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34780,7 +34934,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34791,7 +34945,40 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "flourishingcollaboration.com": { + "domain": "flourishingcollaboration.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "flourishinginnovation.com": { + "domain": "flourishinginnovation.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "flourishingpartnership.com": { + "domain": "flourishingpartnership.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34802,7 +34989,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34813,7 +35000,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34824,7 +35011,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34835,7 +35022,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34846,7 +35033,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34857,7 +35044,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34868,7 +35055,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34879,7 +35066,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34890,7 +35077,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34901,7 +35088,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34912,7 +35099,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34923,7 +35110,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34934,7 +35121,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34945,7 +35132,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34956,7 +35143,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34967,7 +35154,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34978,7 +35165,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -34989,7 +35176,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "gladysway.com": { + "domain": "gladysway.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35000,7 +35198,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35011,7 +35209,29 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "glitteringbrook.com": { + "domain": "glitteringbrook.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "goldfishgrowth.com": { + "domain": "goldfishgrowth.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35022,7 +35242,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35033,7 +35253,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35044,7 +35264,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35055,7 +35275,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35066,7 +35286,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35077,7 +35297,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35088,7 +35308,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35099,7 +35319,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35110,7 +35330,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35121,7 +35341,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35132,7 +35352,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35143,7 +35363,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35154,7 +35374,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35165,7 +35385,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35176,7 +35396,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35187,7 +35407,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35198,7 +35418,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35209,7 +35429,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35220,7 +35440,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35231,7 +35451,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35242,7 +35462,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35253,7 +35473,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35264,7 +35484,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35275,7 +35495,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35286,7 +35506,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35297,7 +35517,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35308,7 +35528,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35319,7 +35539,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35330,7 +35550,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35341,7 +35561,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35352,7 +35572,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35363,7 +35583,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35374,7 +35594,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35385,7 +35605,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35396,7 +35616,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35407,7 +35627,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35418,7 +35638,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35429,7 +35649,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35440,7 +35660,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "impulselumber.com": { + "domain": "impulselumber.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35451,7 +35682,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35462,7 +35693,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35473,7 +35704,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35484,7 +35715,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35495,7 +35726,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35506,7 +35737,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35517,7 +35748,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35528,7 +35759,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35539,7 +35770,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35550,7 +35781,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35561,7 +35792,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35572,7 +35803,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35583,7 +35814,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "keenquill.com": { + "domain": "keenquill.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35594,7 +35836,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35605,7 +35847,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35616,7 +35858,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35627,7 +35869,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35638,7 +35880,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35649,7 +35891,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "lighttalon.com": { + "domain": "lighttalon.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35660,7 +35913,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35671,7 +35924,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35682,7 +35935,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35693,7 +35946,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35704,7 +35957,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35715,7 +35968,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35726,7 +35979,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35737,7 +35990,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35748,7 +36001,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35759,7 +36012,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35770,7 +36023,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35781,7 +36034,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35792,7 +36045,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35803,7 +36056,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35814,7 +36067,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "majesticwaterscape.com": { + "domain": "majesticwaterscape.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35825,7 +36089,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35836,7 +36100,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35847,7 +36111,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35858,7 +36122,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35869,7 +36133,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35880,7 +36144,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35891,7 +36155,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "melodiouscomposition.com": { + "domain": "melodiouscomposition.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35902,7 +36177,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35913,7 +36188,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35924,7 +36199,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35935,7 +36210,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35946,7 +36221,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35957,7 +36232,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35968,7 +36243,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35979,7 +36254,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -35990,7 +36265,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36001,7 +36276,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36012,7 +36287,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36023,7 +36298,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36034,7 +36309,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36045,7 +36320,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36056,7 +36331,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36067,7 +36342,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36078,7 +36353,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36089,7 +36364,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36100,7 +36375,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36111,7 +36386,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36122,7 +36397,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36133,7 +36408,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36144,7 +36419,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36155,7 +36430,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36166,7 +36441,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36177,7 +36452,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36188,7 +36463,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36199,7 +36474,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36210,7 +36485,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36221,7 +36496,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36232,7 +36507,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36243,7 +36518,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36254,7 +36529,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36265,7 +36540,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36276,7 +36551,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36287,7 +36562,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36298,7 +36573,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36309,7 +36584,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "opulentsylvan.com": { + "domain": "opulentsylvan.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36320,7 +36606,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36331,7 +36617,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36342,7 +36628,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36353,7 +36639,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36364,7 +36650,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36375,7 +36661,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36386,7 +36672,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36397,7 +36683,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36408,7 +36694,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36419,7 +36705,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36430,7 +36716,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36441,7 +36727,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36452,7 +36738,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36463,7 +36749,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36474,7 +36760,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36485,7 +36771,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36496,7 +36782,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "pluckyzone.com": { + "domain": "pluckyzone.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36507,7 +36804,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36518,7 +36815,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36529,7 +36826,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36540,7 +36837,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "polishedfolly.com": { + "domain": "polishedfolly.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36551,7 +36859,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36562,7 +36870,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "popplantation.com": { + "domain": "popplantation.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36573,7 +36892,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36584,7 +36903,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36595,7 +36914,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36606,7 +36925,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36617,7 +36936,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36628,7 +36947,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "publicsofa.com": { + "domain": "publicsofa.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36639,7 +36969,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "pulsatingmeadow.com": { + "domain": "pulsatingmeadow.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36650,7 +36991,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36661,7 +37002,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36672,7 +37013,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36683,7 +37024,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36694,7 +37035,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36705,7 +37046,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36716,7 +37057,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36727,7 +37068,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36738,7 +37079,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36749,7 +37090,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36760,7 +37101,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36771,7 +37112,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36782,7 +37123,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36793,7 +37134,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36804,7 +37145,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36815,7 +37156,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36826,7 +37167,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36837,7 +37178,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36848,7 +37189,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36859,7 +37200,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36870,7 +37211,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36881,7 +37222,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36892,7 +37233,29 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "relationrest.com": { + "domain": "relationrest.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "rememberdiscussion.com": { + "domain": "rememberdiscussion.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36903,7 +37266,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36914,7 +37277,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36925,7 +37288,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36936,7 +37299,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36947,7 +37310,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36958,7 +37321,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36969,7 +37332,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36980,7 +37343,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -36991,7 +37354,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37002,7 +37365,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37013,7 +37376,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37024,7 +37387,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37035,7 +37398,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37046,7 +37409,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37057,7 +37420,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37068,7 +37431,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37079,7 +37442,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37090,7 +37453,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37101,7 +37464,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37112,7 +37475,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37123,7 +37486,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37134,7 +37497,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37145,7 +37508,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37156,7 +37519,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37167,7 +37530,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37178,7 +37541,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37189,7 +37552,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37200,7 +37563,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37211,7 +37574,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37222,7 +37585,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37233,7 +37596,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37244,7 +37607,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37255,7 +37618,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37266,7 +37629,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37277,7 +37640,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "serenecascade.com": { + "domain": "serenecascade.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37288,7 +37662,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37299,7 +37673,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37310,7 +37684,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37321,7 +37695,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37332,7 +37706,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37343,7 +37717,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37354,7 +37728,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37365,7 +37739,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37376,7 +37750,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37387,7 +37761,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37398,7 +37772,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37409,7 +37783,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37420,7 +37794,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37431,7 +37805,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37442,7 +37816,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37453,7 +37827,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37464,7 +37838,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37475,7 +37849,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37486,7 +37860,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37497,7 +37871,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37508,7 +37882,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37519,7 +37893,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37530,7 +37904,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37541,7 +37915,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37552,7 +37926,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37563,7 +37937,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37574,7 +37948,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37585,7 +37959,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37596,7 +37970,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37607,7 +37981,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37618,7 +37992,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37629,7 +38003,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37640,7 +38014,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37651,7 +38025,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37662,7 +38036,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37673,7 +38047,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37684,7 +38058,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37695,7 +38069,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37706,7 +38080,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37717,7 +38091,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37728,7 +38102,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37739,7 +38113,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37750,7 +38124,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37761,7 +38135,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37772,7 +38146,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37783,7 +38157,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37794,7 +38168,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37805,7 +38179,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37816,7 +38190,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37827,7 +38201,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37838,7 +38212,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37849,7 +38223,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37860,7 +38234,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37871,7 +38245,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37882,7 +38256,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37893,7 +38267,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37904,7 +38278,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37915,7 +38289,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37926,7 +38300,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37937,7 +38311,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37948,7 +38322,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37959,7 +38333,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37970,7 +38344,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37981,7 +38355,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -37992,7 +38366,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38003,7 +38377,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38014,7 +38388,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38025,7 +38399,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38036,7 +38410,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38047,7 +38421,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "sublimequartz.com": { + "domain": "sublimequartz.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38058,7 +38443,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38069,7 +38454,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38080,7 +38465,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38091,7 +38476,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38102,7 +38487,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38113,7 +38498,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38124,7 +38509,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38135,7 +38520,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38146,7 +38531,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38157,7 +38542,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38168,7 +38553,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38179,7 +38564,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38190,7 +38575,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38201,7 +38586,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38212,7 +38597,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38223,7 +38608,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "tearfulglass.com": { + "domain": "tearfulglass.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38234,7 +38630,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38245,7 +38641,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38256,7 +38652,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38267,7 +38663,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38278,7 +38674,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38289,7 +38685,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38300,7 +38696,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38311,7 +38707,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38322,7 +38718,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38333,7 +38729,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "thrivingmarketplace.com": { + "domain": "thrivingmarketplace.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38344,7 +38751,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38355,7 +38762,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38366,7 +38773,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38377,7 +38784,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38388,7 +38795,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38399,7 +38806,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38410,7 +38817,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38421,7 +38828,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38432,7 +38839,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38443,7 +38850,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38454,7 +38861,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38465,7 +38872,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38476,7 +38883,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38487,7 +38894,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38498,7 +38905,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38509,7 +38916,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38520,7 +38927,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38531,7 +38938,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38542,7 +38949,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38553,7 +38960,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38564,7 +38971,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38575,7 +38982,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38586,7 +38993,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38597,7 +39004,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38608,7 +39015,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38619,7 +39026,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38630,7 +39037,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38641,7 +39048,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38652,7 +39059,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38663,7 +39070,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38674,7 +39081,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38685,7 +39092,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38696,7 +39103,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38707,7 +39114,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38718,7 +39125,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38729,7 +39136,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38740,7 +39147,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38751,7 +39158,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38762,7 +39169,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38773,7 +39180,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "vibrantcelebration.com": { + "domain": "vibrantcelebration.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38784,7 +39202,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38795,7 +39213,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38806,7 +39224,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38817,7 +39235,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38828,7 +39246,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38839,7 +39257,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "vividfrost.com": { + "domain": "vividfrost.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38850,7 +39279,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38861,7 +39290,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38872,7 +39301,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38883,7 +39312,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38894,7 +39323,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38905,7 +39334,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38916,7 +39345,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38927,7 +39356,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38938,7 +39367,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38949,7 +39378,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38960,7 +39389,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38971,7 +39400,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38982,7 +39411,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -38993,7 +39422,18 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "wittyshack.com": { + "domain": "wittyshack.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39004,7 +39444,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39015,7 +39455,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39026,7 +39466,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39037,7 +39477,29 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "zestyhorizon.com": { + "domain": "zestyhorizon.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, + "fingerprinting": 1, + "cookies": 0.01, + "default": "block" + }, + "zestyrover.com": { + "domain": "zestyrover.com", + "owner": { + "name": "Leven Labs, Inc. DBA Admiral", + "displayName": "Admiral" + }, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39048,7 +39510,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -39059,7 +39521,7 @@ "name": "Leven Labs, Inc. DBA Admiral", "displayName": "Admiral" }, - "prevalence": 0.0151, + "prevalence": 0.0129, "fingerprinting": 1, "cookies": 0.01, "default": "block" @@ -49100,7 +49562,6 @@ "aloofvest.com", "ambientdusk.com", "ambientlagoon.com", - "ambientlagoon.com", "ambiguousafternoon.com", "ambiguousdinosaurs.com", "ambrosialsummit.com", @@ -49137,7 +49598,6 @@ "bawdybalance.com", "beamvolcano.com", "beancontrol.com", - "beancontrol.com", "bedsberry.com", "beginnerpancake.com", "begintrain.com", @@ -49162,8 +49622,6 @@ "breakfastboat.com", "brighttoe.com", "briskstorm.com", - "brighttoe.com", - "briskstorm.com", "broadborder.com", "brotherslocket.com", "buildingknife.com", @@ -49183,7 +49641,6 @@ "capablecup.com", "capriciouscorn.com", "captivatingcanyon.com", - "captivatingcanyon.com", "carefuldolls.com", "caringcast.com", "carpentercomparison.com", @@ -49220,16 +49677,15 @@ "cleanhaircut.com", "cloisteredcord.com", "cloisteredcurve.com", - "cloisteredcurve.com", "closedcows.com", "coatfood.com", + "cobaltoverture.com", "coldbalance.com", "colossalclouds.com", "colossalcoat.com", "colossalcry.com", "combativecar.com", "combbit.com", - "combbit.com", "combcattle.com", "combcompetition.com", "comfortablecheese.com", @@ -49248,7 +49704,6 @@ "coverapparatus.com", "cozyhillside.com", "cozytryst.com", - "cozytryst.com", "crabbychin.com", "cratecamera.com", "creatorcherry.com", @@ -49291,7 +49746,6 @@ "dewdroplagoon.com", "digestiondrawer.com", "dinnerquartz.com", - "dinnerquartz.com", "diplomahawaii.com", "disagreeabledrop.com", "discreetfield.com", @@ -49304,19 +49758,18 @@ "dramaticdirection.com", "dreamycanyon.com", "drollwharf.com", - "drollwharf.com", "dustydime.com", "dustyhammer.com", + "eagerknight.com", + "echoinghaven.com", "effervescentcoral.com", "effervescentvista.com", "effulgenttempest.com", "elasticchange.com", "elderlybean.com", "elusivebreeze.com", - "elusivebreeze.com", "eminentbubble.com", "enchantingdiscovery.com", - "enchantingdiscovery.com", "enchantingmystique.com", "encouragingthread.com", "endurablebulb.com", @@ -49461,12 +49914,10 @@ "internalsink.com", "j93557g.com", "jubilantaura.com", - "jubilantaura.com", "jubilantcanyon.com", "jubilantcascade.com", "jubilantglimmer.com", "jubilanttempest.com", - "jubilanttempest.com", "jubilantwhisper.com", "kaputquill.com", "keenquill.com", @@ -49494,7 +49945,6 @@ "lovelydrum.com", "ludicrousarch.com", "luminousboulevard.com", - "luminousboulevard.com", "luminouscatalyst.com", "lumpylumber.com", "lunchroomlock.com", @@ -49512,6 +49962,7 @@ "meatydime.com", "meddleplant.com", "melodiouschorus.com", + "melodiouscomposition.com", "meltmilk.com", "memopilot.com", "memorizematch.com", @@ -49523,7 +49974,6 @@ "mixedreading.com", "modularmental.com", "monacobeatles.com", - "monacobeatles.com", "moorshoes.com", "motionflowers.com", "motionlessbag.com", @@ -49547,7 +49997,6 @@ "niftyhospital.com", "nightwound.com", "nocturnalloom.com", - "nocturnalloom.com", "nondescriptcrowd.com", "nondescriptnote.com", "nostalgicneed.com", @@ -49578,14 +50027,12 @@ "peacefullimit.com", "petiteumbrella.com", "piquantgrove.com", - "piquantgrove.com", "piquantvortex.com", "placidactivity.com", "placidperson.com", "planebasin.com", "plantdigestion.com", "playfulriver.com", - "playfulriver.com", "pleasantpump.com", "plotrabbit.com", "pluckypocket.com", @@ -49610,7 +50057,6 @@ "pricklydebt.com", "pricklypollution.com", "pristinegale.com", - "pristinegale.com", "processplantation.com", "profusesupport.com", "protestcopy.com", @@ -49671,7 +50117,6 @@ "rightfulfall.com", "rigidrobin.com", "rollconnection.com", - "rollconnection.com", "roofrelation.com", "roseincome.com", "ruralrobin.com", @@ -49727,7 +50172,6 @@ "sheargovernor.com", "shesubscriptions.com", "shinypond.com", - "shinypond.com", "shirtsidewalk.com", "shiveringspot.com", "shiverscissors.com", @@ -49776,7 +50220,6 @@ "spotlessstamp.com", "spottednoise.com", "sprysummit.com", - "sprysummit.com", "spuriousair.com", "spysubstance.com", "squalidscrew.com", @@ -49867,8 +50310,6 @@ "tranquilplume.com", "tranquilveil.com", "tranquilveranda.com", - "tranquilveil.com", - "tranquilveranda.com", "tremendousearthquake.com", "tremendousplastic.com", "tritebadge.com", @@ -49897,7 +50338,6 @@ "unwieldyimpulse.com", "unwieldyplastic.com", "uppitytime.com", - "uppitytime.com", "uselesslumber.com", "vanishmemory.com", "velvetquasar.com", @@ -49906,20 +50346,18 @@ "venusgloria.com", "verdantanswer.com", "verdantlabyrinth.com", - "verdantlabyrinth.com", "verdantloom.com", "verseballs.com", "vibrantcelebration.com", "vibrantgale.com", "vibranthaven.com", "vibrantpact.com", - "vibrantpact.com", "vibranttalisman.com", "virtualvincent.com", "vividcanopy.com", + "vividfrost.com", "vividmeadow.com", "vividplume.com", - "vividplume.com", "volatileprofit.com", "volatilevessel.com", "voraciousgrip.com", @@ -49947,7 +50385,7 @@ "zipperxray.com", "zlp6s.pw" ], - "prevalence": 0.0151, + "prevalence": 0.0129, "displayName": "Admiral" } }, @@ -50692,7 +51130,6 @@ "aloofvest.com": "Leven Labs, Inc. DBA Admiral", "ambientdusk.com": "Leven Labs, Inc. DBA Admiral", "ambientlagoon.com": "Leven Labs, Inc. DBA Admiral", - "ambientlagoon.com": "Leven Labs, Inc. DBA Admiral", "ambiguousafternoon.com": "Leven Labs, Inc. DBA Admiral", "ambiguousdinosaurs.com": "Leven Labs, Inc. DBA Admiral", "ambrosialsummit.com": "Leven Labs, Inc. DBA Admiral", @@ -50729,7 +51166,6 @@ "bawdybalance.com": "Leven Labs, Inc. DBA Admiral", "beamvolcano.com": "Leven Labs, Inc. DBA Admiral", "beancontrol.com": "Leven Labs, Inc. DBA Admiral", - "beancontrol.com": "Leven Labs, Inc. DBA Admiral", "bedsberry.com": "Leven Labs, Inc. DBA Admiral", "beginnerpancake.com": "Leven Labs, Inc. DBA Admiral", "begintrain.com": "Leven Labs, Inc. DBA Admiral", @@ -50754,8 +51190,6 @@ "breakfastboat.com": "Leven Labs, Inc. DBA Admiral", "brighttoe.com": "Leven Labs, Inc. DBA Admiral", "briskstorm.com": "Leven Labs, Inc. DBA Admiral", - "brighttoe.com": "Leven Labs, Inc. DBA Admiral", - "briskstorm.com": "Leven Labs, Inc. DBA Admiral", "broadborder.com": "Leven Labs, Inc. DBA Admiral", "brotherslocket.com": "Leven Labs, Inc. DBA Admiral", "buildingknife.com": "Leven Labs, Inc. DBA Admiral", @@ -50775,7 +51209,6 @@ "capablecup.com": "Leven Labs, Inc. DBA Admiral", "capriciouscorn.com": "Leven Labs, Inc. DBA Admiral", "captivatingcanyon.com": "Leven Labs, Inc. DBA Admiral", - "captivatingcanyon.com": "Leven Labs, Inc. DBA Admiral", "carefuldolls.com": "Leven Labs, Inc. DBA Admiral", "caringcast.com": "Leven Labs, Inc. DBA Admiral", "carpentercomparison.com": "Leven Labs, Inc. DBA Admiral", @@ -50812,16 +51245,15 @@ "cleanhaircut.com": "Leven Labs, Inc. DBA Admiral", "cloisteredcord.com": "Leven Labs, Inc. DBA Admiral", "cloisteredcurve.com": "Leven Labs, Inc. DBA Admiral", - "cloisteredcurve.com": "Leven Labs, Inc. DBA Admiral", "closedcows.com": "Leven Labs, Inc. DBA Admiral", "coatfood.com": "Leven Labs, Inc. DBA Admiral", + "cobaltoverture.com": "Leven Labs, Inc. DBA Admiral", "coldbalance.com": "Leven Labs, Inc. DBA Admiral", "colossalclouds.com": "Leven Labs, Inc. DBA Admiral", "colossalcoat.com": "Leven Labs, Inc. DBA Admiral", "colossalcry.com": "Leven Labs, Inc. DBA Admiral", "combativecar.com": "Leven Labs, Inc. DBA Admiral", "combbit.com": "Leven Labs, Inc. DBA Admiral", - "combbit.com": "Leven Labs, Inc. DBA Admiral", "combcattle.com": "Leven Labs, Inc. DBA Admiral", "combcompetition.com": "Leven Labs, Inc. DBA Admiral", "comfortablecheese.com": "Leven Labs, Inc. DBA Admiral", @@ -50840,7 +51272,6 @@ "coverapparatus.com": "Leven Labs, Inc. DBA Admiral", "cozyhillside.com": "Leven Labs, Inc. DBA Admiral", "cozytryst.com": "Leven Labs, Inc. DBA Admiral", - "cozytryst.com": "Leven Labs, Inc. DBA Admiral", "crabbychin.com": "Leven Labs, Inc. DBA Admiral", "cratecamera.com": "Leven Labs, Inc. DBA Admiral", "creatorcherry.com": "Leven Labs, Inc. DBA Admiral", @@ -50883,7 +51314,6 @@ "dewdroplagoon.com": "Leven Labs, Inc. DBA Admiral", "digestiondrawer.com": "Leven Labs, Inc. DBA Admiral", "dinnerquartz.com": "Leven Labs, Inc. DBA Admiral", - "dinnerquartz.com": "Leven Labs, Inc. DBA Admiral", "diplomahawaii.com": "Leven Labs, Inc. DBA Admiral", "disagreeabledrop.com": "Leven Labs, Inc. DBA Admiral", "discreetfield.com": "Leven Labs, Inc. DBA Admiral", @@ -50896,19 +51326,18 @@ "dramaticdirection.com": "Leven Labs, Inc. DBA Admiral", "dreamycanyon.com": "Leven Labs, Inc. DBA Admiral", "drollwharf.com": "Leven Labs, Inc. DBA Admiral", - "drollwharf.com": "Leven Labs, Inc. DBA Admiral", "dustydime.com": "Leven Labs, Inc. DBA Admiral", "dustyhammer.com": "Leven Labs, Inc. DBA Admiral", + "eagerknight.com": "Leven Labs, Inc. DBA Admiral", + "echoinghaven.com": "Leven Labs, Inc. DBA Admiral", "effervescentcoral.com": "Leven Labs, Inc. DBA Admiral", "effervescentvista.com": "Leven Labs, Inc. DBA Admiral", "effulgenttempest.com": "Leven Labs, Inc. DBA Admiral", "elasticchange.com": "Leven Labs, Inc. DBA Admiral", "elderlybean.com": "Leven Labs, Inc. DBA Admiral", "elusivebreeze.com": "Leven Labs, Inc. DBA Admiral", - "elusivebreeze.com": "Leven Labs, Inc. DBA Admiral", "eminentbubble.com": "Leven Labs, Inc. DBA Admiral", "enchantingdiscovery.com": "Leven Labs, Inc. DBA Admiral", - "enchantingdiscovery.com": "Leven Labs, Inc. DBA Admiral", "enchantingmystique.com": "Leven Labs, Inc. DBA Admiral", "encouragingthread.com": "Leven Labs, Inc. DBA Admiral", "endurablebulb.com": "Leven Labs, Inc. DBA Admiral", @@ -51053,12 +51482,10 @@ "internalsink.com": "Leven Labs, Inc. DBA Admiral", "j93557g.com": "Leven Labs, Inc. DBA Admiral", "jubilantaura.com": "Leven Labs, Inc. DBA Admiral", - "jubilantaura.com": "Leven Labs, Inc. DBA Admiral", "jubilantcanyon.com": "Leven Labs, Inc. DBA Admiral", "jubilantcascade.com": "Leven Labs, Inc. DBA Admiral", "jubilantglimmer.com": "Leven Labs, Inc. DBA Admiral", "jubilanttempest.com": "Leven Labs, Inc. DBA Admiral", - "jubilanttempest.com": "Leven Labs, Inc. DBA Admiral", "jubilantwhisper.com": "Leven Labs, Inc. DBA Admiral", "kaputquill.com": "Leven Labs, Inc. DBA Admiral", "keenquill.com": "Leven Labs, Inc. DBA Admiral", @@ -51086,7 +51513,6 @@ "lovelydrum.com": "Leven Labs, Inc. DBA Admiral", "ludicrousarch.com": "Leven Labs, Inc. DBA Admiral", "luminousboulevard.com": "Leven Labs, Inc. DBA Admiral", - "luminousboulevard.com": "Leven Labs, Inc. DBA Admiral", "luminouscatalyst.com": "Leven Labs, Inc. DBA Admiral", "lumpylumber.com": "Leven Labs, Inc. DBA Admiral", "lunchroomlock.com": "Leven Labs, Inc. DBA Admiral", @@ -51104,6 +51530,7 @@ "meatydime.com": "Leven Labs, Inc. DBA Admiral", "meddleplant.com": "Leven Labs, Inc. DBA Admiral", "melodiouschorus.com": "Leven Labs, Inc. DBA Admiral", + "melodiouscomposition.com": "Leven Labs, Inc. DBA Admiral", "meltmilk.com": "Leven Labs, Inc. DBA Admiral", "memopilot.com": "Leven Labs, Inc. DBA Admiral", "memorizematch.com": "Leven Labs, Inc. DBA Admiral", @@ -51115,7 +51542,6 @@ "mixedreading.com": "Leven Labs, Inc. DBA Admiral", "modularmental.com": "Leven Labs, Inc. DBA Admiral", "monacobeatles.com": "Leven Labs, Inc. DBA Admiral", - "monacobeatles.com": "Leven Labs, Inc. DBA Admiral", "moorshoes.com": "Leven Labs, Inc. DBA Admiral", "motionflowers.com": "Leven Labs, Inc. DBA Admiral", "motionlessbag.com": "Leven Labs, Inc. DBA Admiral", @@ -51139,7 +51565,6 @@ "niftyhospital.com": "Leven Labs, Inc. DBA Admiral", "nightwound.com": "Leven Labs, Inc. DBA Admiral", "nocturnalloom.com": "Leven Labs, Inc. DBA Admiral", - "nocturnalloom.com": "Leven Labs, Inc. DBA Admiral", "nondescriptcrowd.com": "Leven Labs, Inc. DBA Admiral", "nondescriptnote.com": "Leven Labs, Inc. DBA Admiral", "nostalgicneed.com": "Leven Labs, Inc. DBA Admiral", @@ -51170,14 +51595,12 @@ "peacefullimit.com": "Leven Labs, Inc. DBA Admiral", "petiteumbrella.com": "Leven Labs, Inc. DBA Admiral", "piquantgrove.com": "Leven Labs, Inc. DBA Admiral", - "piquantgrove.com": "Leven Labs, Inc. DBA Admiral", "piquantvortex.com": "Leven Labs, Inc. DBA Admiral", "placidactivity.com": "Leven Labs, Inc. DBA Admiral", "placidperson.com": "Leven Labs, Inc. DBA Admiral", "planebasin.com": "Leven Labs, Inc. DBA Admiral", "plantdigestion.com": "Leven Labs, Inc. DBA Admiral", "playfulriver.com": "Leven Labs, Inc. DBA Admiral", - "playfulriver.com": "Leven Labs, Inc. DBA Admiral", "pleasantpump.com": "Leven Labs, Inc. DBA Admiral", "plotrabbit.com": "Leven Labs, Inc. DBA Admiral", "pluckypocket.com": "Leven Labs, Inc. DBA Admiral", @@ -51202,7 +51625,6 @@ "pricklydebt.com": "Leven Labs, Inc. DBA Admiral", "pricklypollution.com": "Leven Labs, Inc. DBA Admiral", "pristinegale.com": "Leven Labs, Inc. DBA Admiral", - "pristinegale.com": "Leven Labs, Inc. DBA Admiral", "processplantation.com": "Leven Labs, Inc. DBA Admiral", "profusesupport.com": "Leven Labs, Inc. DBA Admiral", "protestcopy.com": "Leven Labs, Inc. DBA Admiral", @@ -51263,7 +51685,6 @@ "rightfulfall.com": "Leven Labs, Inc. DBA Admiral", "rigidrobin.com": "Leven Labs, Inc. DBA Admiral", "rollconnection.com": "Leven Labs, Inc. DBA Admiral", - "rollconnection.com": "Leven Labs, Inc. DBA Admiral", "roofrelation.com": "Leven Labs, Inc. DBA Admiral", "roseincome.com": "Leven Labs, Inc. DBA Admiral", "ruralrobin.com": "Leven Labs, Inc. DBA Admiral", @@ -51319,7 +51740,6 @@ "sheargovernor.com": "Leven Labs, Inc. DBA Admiral", "shesubscriptions.com": "Leven Labs, Inc. DBA Admiral", "shinypond.com": "Leven Labs, Inc. DBA Admiral", - "shinypond.com": "Leven Labs, Inc. DBA Admiral", "shirtsidewalk.com": "Leven Labs, Inc. DBA Admiral", "shiveringspot.com": "Leven Labs, Inc. DBA Admiral", "shiverscissors.com": "Leven Labs, Inc. DBA Admiral", @@ -51368,7 +51788,6 @@ "spotlessstamp.com": "Leven Labs, Inc. DBA Admiral", "spottednoise.com": "Leven Labs, Inc. DBA Admiral", "sprysummit.com": "Leven Labs, Inc. DBA Admiral", - "sprysummit.com": "Leven Labs, Inc. DBA Admiral", "spuriousair.com": "Leven Labs, Inc. DBA Admiral", "spysubstance.com": "Leven Labs, Inc. DBA Admiral", "squalidscrew.com": "Leven Labs, Inc. DBA Admiral", @@ -51459,8 +51878,6 @@ "tranquilplume.com": "Leven Labs, Inc. DBA Admiral", "tranquilveil.com": "Leven Labs, Inc. DBA Admiral", "tranquilveranda.com": "Leven Labs, Inc. DBA Admiral", - "tranquilveil.com": "Leven Labs, Inc. DBA Admiral", - "tranquilveranda.com": "Leven Labs, Inc. DBA Admiral", "tremendousearthquake.com": "Leven Labs, Inc. DBA Admiral", "tremendousplastic.com": "Leven Labs, Inc. DBA Admiral", "tritebadge.com": "Leven Labs, Inc. DBA Admiral", @@ -51489,7 +51906,6 @@ "unwieldyimpulse.com": "Leven Labs, Inc. DBA Admiral", "unwieldyplastic.com": "Leven Labs, Inc. DBA Admiral", "uppitytime.com": "Leven Labs, Inc. DBA Admiral", - "uppitytime.com": "Leven Labs, Inc. DBA Admiral", "uselesslumber.com": "Leven Labs, Inc. DBA Admiral", "vanishmemory.com": "Leven Labs, Inc. DBA Admiral", "velvetquasar.com": "Leven Labs, Inc. DBA Admiral", @@ -51498,20 +51914,18 @@ "venusgloria.com": "Leven Labs, Inc. DBA Admiral", "verdantanswer.com": "Leven Labs, Inc. DBA Admiral", "verdantlabyrinth.com": "Leven Labs, Inc. DBA Admiral", - "verdantlabyrinth.com": "Leven Labs, Inc. DBA Admiral", "verdantloom.com": "Leven Labs, Inc. DBA Admiral", "verseballs.com": "Leven Labs, Inc. DBA Admiral", "vibrantcelebration.com": "Leven Labs, Inc. DBA Admiral", "vibrantgale.com": "Leven Labs, Inc. DBA Admiral", "vibranthaven.com": "Leven Labs, Inc. DBA Admiral", "vibrantpact.com": "Leven Labs, Inc. DBA Admiral", - "vibrantpact.com": "Leven Labs, Inc. DBA Admiral", "vibranttalisman.com": "Leven Labs, Inc. DBA Admiral", "virtualvincent.com": "Leven Labs, Inc. DBA Admiral", "vividcanopy.com": "Leven Labs, Inc. DBA Admiral", + "vividfrost.com": "Leven Labs, Inc. DBA Admiral", "vividmeadow.com": "Leven Labs, Inc. DBA Admiral", "vividplume.com": "Leven Labs, Inc. DBA Admiral", - "vividplume.com": "Leven Labs, Inc. DBA Admiral", "volatileprofit.com": "Leven Labs, Inc. DBA Admiral", "volatilevessel.com": "Leven Labs, Inc. DBA Admiral", "voraciousgrip.com": "Leven Labs, Inc. DBA Admiral", From 48796805e373f6b7d94ab474527f8c451f907e47 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Thu, 11 Apr 2024 13:18:29 -0700 Subject: [PATCH 18/60] update config clickToPlay -> clickToLoad --- DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index 5d946f545a..e30e93b6b9 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -58,7 +58,7 @@ extension FBProtectionTabExtension { // Enable/disable FBProtection only after UserScripts are installed (awaitContentBlockingAssetsInstalled) let privacyConfiguration = privacyConfigurationManager.privacyConfig - let featureEnabled = privacyConfiguration.isFeature(.clickToPlay, enabledForDomain: url.host) + let featureEnabled = privacyConfiguration.isFeature(.clickToLoad, enabledForDomain: url.host) setFBProtection(enable: featureEnabled) } From 909e53b9c16209a368f12993c8cf796542cf3ec4 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Thu, 11 Apr 2024 13:53:32 -0700 Subject: [PATCH 19/60] burn with fire (dead code) --- .../ContentBlocker/ClickToLoad/clickToLoad.js | 1142 ----------------- .../ClickToLoad/clickToLoadConfig.json | 414 ------ .../ContentBlocker/ClickToLoad/fb-sdk.js | 189 --- .../ContentBlocker/ClickToLoad/fb-tds.json | 65 - .../ContentBlockerRulesLists.swift | 17 - .../ScriptSourceProviding.swift | 2 +- 6 files changed, 1 insertion(+), 1828 deletions(-) delete mode 100644 DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoad.js delete mode 100644 DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoadConfig.json delete mode 100644 DuckDuckGo/ContentBlocker/ClickToLoad/fb-sdk.js delete mode 100644 DuckDuckGo/ContentBlocker/ClickToLoad/fb-tds.json diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoad.js b/DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoad.js deleted file mode 100644 index 2238de1f3c..0000000000 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoad.js +++ /dev/null @@ -1,1142 +0,0 @@ -(function clickToLoad () { -// function sendMessage (messageType, options, callback) { -// TODO chrome.runtime.sendMessage({ messageType, options }, callback) -// } - - // LDA DISABLED - let appID - const loadingImages = { - darkMode: '', - lightMode: '' - } - let logoImg - const titleID = 'DuckDuckGoPrivacyEssentialsCTLElementTitle_LDATEST_EMBED' - const entities = [] - const entityData = {} - const fbSurrogate = `${fb-sdk.js}` // eslint-disable-line - const fbConfig = JSON.parse(`${clickToLoadConfig.json}`.replace(/\\/g, '')) // eslint-disable-line - const proximaRegFontInline = `${proximaRegFont}` // eslint-disable-line - const proximaBoldFontInline = `${proximaBoldFont}` // eslint-disable-line - - return; - - /** - * - * Base64 encode / decode - * http://www.webtoolkit.info/ - * - **/ - const Base64 = { - - // private property - _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', - - // public method for encoding - encode: function (input) { - let output = '' - let chr1, chr2, chr3, enc1, enc2, enc3, enc4 - let i = 0 - - input = Base64._utf8_encode(input) - - while (i < input.length) { - chr1 = input.charCodeAt(i++) - chr2 = input.charCodeAt(i++) - chr3 = input.charCodeAt(i++) - - enc1 = chr1 >> 2 - enc2 = ((chr1 & 3) << 4) | (chr2 >> 4) - enc3 = ((chr2 & 15) << 2) | (chr3 >> 6) - enc4 = chr3 & 63 - - if (isNaN(chr2)) { - enc3 = enc4 = 64 - } else if (isNaN(chr3)) { - enc4 = 64 - } - - output = output + - this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + - this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4) - } - - return output - }, - - // private method for UTF-8 encoding - _utf8_encode: function (string) { - string = string.replace(/\r\n/g, '\n') - let utftext = '' - - for (let n = 0; n < string.length; n++) { - const c = string.charCodeAt(n) - - if (c < 128) { - utftext += String.fromCharCode(c) - } else if ((c > 127) && (c < 2048)) { - utftext += String.fromCharCode((c >> 6) | 192) - utftext += String.fromCharCode((c & 63) | 128) - } else { - utftext += String.fromCharCode((c >> 12) | 224) - utftext += String.fromCharCode(((c >> 6) & 63) | 128) - utftext += String.fromCharCode((c & 63) | 128) - } - } - - return utftext - } - } - // Buffer - class Buffer { - static from (string, type) { - return new Buffer(string) - } - - constructor (string) { - this.string = string - } - - toString (type) { - return Base64.encode(this.string) - } - } - - function b64EncodeSurrogate (sur) { - const b64dataheader = 'data:application/javascript;base64,' - - // remove comment lines - const lines = sur.split('\n').filter((line) => { - return !(/^#.*/).test(line) - }) - - const b64surrogate = Buffer.from(lines.join('\n').toString(), 'binary').toString('base64') - return b64dataheader + b64surrogate - } - - function loadSurrogate (surrogate) { - const s = document.createElement('script') - s.type = 'application/javascript' - s.async = false - s.src = surrogate - const scripts = document.getElementsByTagName('script') - if (scripts && scripts.length > 0) { - scripts[0].parentNode.insertBefore(s, scripts[0]) - s.remove() - } - } - - function getTopLevelURL () { - try { - // FROM: https://stackoverflow.com/a/7739035/73479 - // FIX: Better capturing of top level URL so that trackers in embedded documents are not considered first party - return new URL(window.location !== window.parent.location ? document.referrer : document.location.href) - } catch (error) { - return new URL(location.href) - } - } - - /********************************************************* - * Style Definitions - *********************************************************/ - const styles = { - fontStyle: ` - @font-face{ - font-family: DuckDuckGoPrivacyEssentials; - src: url(${proximaRegFontInline}); - } - @font-face{ - font-family: DuckDuckGoPrivacyEssentialsBold; - font-weight: bold; - src: url(${proximaBoldFontInline}); - } - `, - darkMode: { - background: ` - background: #111111; - `, - textFont: ` - color: rgba(255, 255, 255, 0.9); - `, - buttonFont: ` - color: #111111; - `, - linkFont: ` - color: #5784FF; - `, - buttonBackground: ` - background: #5784FF; - ` - }, - lightMode: { - background: ` - background: #FFFFFF; - `, - textFont: ` - color: #222222; - `, - buttonFont: ` - color: #FFFFFF; - `, - linkFont: ` - color: #3969EF; - `, - buttonBackground: ` - background: #3969EF; - ` - }, - loginMode: { - buttonBackground: ` - background: #666666; - `, - buttonFont: ` - color: #FFFFFF; - ` - }, - cancelMode: { - buttonBackground: ` - background: rgba(34, 34, 34, 0.1); - `, - buttonFont: ` - color: #222222; - ` - }, - button: ` - border-radius: 8px; - - padding: 11px 22px; - font-weight: bold; - margin: auto; - border-color: #3969EF; - border: none; - - font-family: DuckDuckGoPrivacyEssentialsBold; - font-size: 14px; - - position: relative; - cursor: pointer; - box-shadow: none; - z-index: 2147483646; - `, - circle: ` - border-radius: 50%; - width: 18px; - height: 18px; - background: #E0E0E0; - border: 1px solid #E0E0E0; - position: absolute; - top: -8px; - right: -8px; - `, - loginIcon: ` - position: absolute; - top: -13px; - right: -10px; - height: 28px; - width: 28px; - `, - rectangle: ` - width: 12px; - height: 3px; - background: #666666; - position: relative; - top: 42.5%; - margin: auto; - `, - textBubble: ` - background: #FFFFFF; - border: 1px solid rgba(0, 0, 0, 0.1); - border-radius: 16px; - box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.12), 0px 8px 16px rgba(0, 0, 0, 0.08); - width: 360px; - margin-top: 10px; - z-index: 2147483647; - position: absolute; - `, - textBubbleWidth: 360, // Should match the width rule in textBubble - textBubbleLeftShift: 100, // Should match the CSS left: rule in textBubble - textArrow: ` - display: inline-block; - background: #FFFFFF; - border: solid rgba(0, 0, 0, 0.1); - border-width: 0 1px 1px 0; - padding: 5px; - transform: rotate(-135deg); - -webkit-transform: rotate(-135deg); - position: relative; - top: -9px; - `, - arrowDefaultLocationPercent: 50, - hoverTextTitle: ` - padding: 0px 12px 12px; - margin-top: -5px; - `, - hoverTextBody: ` - font-family: DuckDuckGoPrivacyEssentials; - font-size: 14px; - line-height: 21px; - margin: auto; - padding: 17px; - text-align: left; - `, - hoverContainer: ` - padding-bottom: 10px; - `, - buttonTextContainer: ` - display: flex; - flex-direction: row; - align-items: center; - `, - headerRow: ` - - `, - block: ` - box-sizing: border-box; - border: 1px solid rgba(0,0,0,0.1); - border-radius: 12px; - max-width: 600px; - min-height: 300px; - margin: auto; - display: flex; - flex-direction: column; - - font-family: DuckDuckGoPrivacyEssentials; - line-height: 1; - `, - imgRow: ` - display: flex; - flex-direction: column; - margin: 20px 0px; - `, - content: ` - display: flex; - flex-direction: column; - margin: auto; - `, - titleBox: ` - display: flex; - padding: 12px; - max-height: 44px; - border-bottom: 1px solid; - border-color: rgba(196, 196, 196, 0.3); - `, - title: ` - font-family: DuckDuckGoPrivacyEssentials; - line-height: 1.4; - font-size: 14px; - margin: auto 10px; - flex-basis: 100%; - height: 1.4em; - flex-wrap: wrap; - overflow: hidden; - text-align: left; - `, - buttonRow: ` - display: flex; - height: 100% - flex-direction: row; - margin: 20px auto 0px; - padding-bottom: 36px; - `, - modalContentTitle: ` - font-family: DuckDuckGoPrivacyEssentialsBold; - font-size: 17px; - font-weight: bold; - line-height: 21px; - margin: 27px auto 10px; - text-align: center; - `, - modalContentText: ` - font-family: DuckDuckGoPrivacyEssentials; - font-size: 14px; - line-height: 21px; - margin: 0px auto 24px; - text-align: center; - `, - modalButton: ` - `, - modalIcon: ` - display: block; - `, - contentTitle: ` - font-family: DuckDuckGoPrivacyEssentialsBold; - font-size: 17px; - font-weight: bold; - margin: 20px auto 10px; - padding: 0px 30px; - text-align: center; - `, - contentText: ` - font-family: DuckDuckGoPrivacyEssentials; - font-size: 14px; - line-height: 21px; - margin: auto; - padding: 0px 40px; - text-align: center; - `, - icon: ` - height: 80px; - width: 80px; - margin: auto; - `, - logo: ` - flex-basis: 0%; - min-width: 20px; - height: 21px; - `, - logoImg: ` - height: 21px; - width: 21px; - `, - loadingImg: ` - display: block; - margin: 0px 8px 0px 0px; - height: 14px; - width: 14px; - `, - modal: ` - width: 312px; - margin: auto; - background-color: #FFFFFF; - position: absolute; - left: calc(50% - 312px/2); - top: calc(50% - 356px/2 + 0.5px); - display: block; - box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.08), 0px 2px 4px rgba(0, 0, 0, 0.1); - border-radius: 12px; - `, - modalContent: ` - padding: 24px; - display: flex; - flex-direction: column; - `, - overlay: ` - height: 100%; - width: 100%; - background-color: #666666; - opacity: .5; - display: block; - position: fixed; - top: 0; - right: 0; - `, - modalContainer: ` - height: 100%; - width: 100%; - z-index: 2147483647; - display: block; - position: fixed; - `, - headerLinkContainer: ` - flex-basis: 100%; - display: grid; - justify-content: flex-end; - `, - headerLink: ` - line-height: 1.4; - font-size: 14px; - font-weight: bold; - font-family: DuckDuckGoPrivacyEssentialsBold; - text-decoration: none; - cursor: pointer; - min-width: 100px; - text-align: end; - float: right; - display: none; - `, - generalLink: ` - line-height: 1.4; - font-size: 14px; - font-weight: bold; - font-family: DuckDuckGoPrivacyEssentialsBold; - cursor: pointer; - text-decoration: none; - `, - wrapperDiv: ` - display: inline-block; - border: 0; - padding: 0; - margin: 0; - ` - } - - /********************************************************* - * Widget Replacement logic - *********************************************************/ - class DuckWidget { - constructor (widgetData, originalElement, entity) { - this.clickAction = { ...widgetData.clickAction } // shallow copy - this.replaceSettings = widgetData.replaceSettings - this.originalElement = originalElement - this.dataElements = {} - this.gatherDataElements() - this.entity = entity - } - - // Collect and store data elements from original widget. Store default values - // from config if not present. - gatherDataElements () { - if (!this.clickAction.urlDataAttributesToPreserve) { - return - } - for (const [attrName, attrSettings] of Object.entries(this.clickAction.urlDataAttributesToPreserve)) { - let value = this.originalElement.getAttribute(attrName) - if (!value) { - if (attrSettings.required) { - // missing a required attribute means we won't be able to replace it - // with a light version, replace with full version. - this.clickAction.type = 'allowFull' - } - value = attrSettings.default - } - this.dataElements[attrName] = value - } - } - - // Return the facebook content URL to use when a user has clicked. - getTargetURL () { - // Copying over data fields should be done lazily, since some required data may not be - // captured until after page scripts run. - this.copySocialDataFields() - return this.clickAction.targetURL - } - - // Determine if element should render in dark mode - getMode () { - // Login buttons are always the login style types - if (this.replaceSettings.type === 'loginButton') { - return 'loginMode' - } - const mode = this.originalElement.getAttribute('data-colorscheme') - if (mode === 'dark') { - return 'darkMode' - } - return 'lightMode' - } - - // The config file offers the ability to style the replaced facebook widget. This - // collects the style from the original element & any specified in config for the element - // type and returns a CSS string. - getStyle () { - let styleString = 'border: none;' - - if (this.clickAction.styleDataAttributes) { - // Copy elements from the original div into style attributes as directed by config - for (const [attr, valAttr] of Object.entries(this.clickAction.styleDataAttributes)) { - let valueFound = this.dataElements[valAttr.name] - if (!valueFound) { - valueFound = this.dataElements[valAttr.fallbackAttribute] - } - let partialStyleString = '' - if (valueFound) { - partialStyleString += `${attr}: ${valueFound}` - } - if (!partialStyleString.includes(valAttr.unit)) { - partialStyleString += valAttr.unit - } - partialStyleString += ';' - styleString += partialStyleString - } - } - - return styleString - } - - // Some data fields are 'kept' from the original element. These are used both in - // replacement styling (darkmode, width, height), and when returning to a FB element. - copySocialDataFields () { - if (!this.clickAction.urlDataAttributesToPreserve) { - return - } - - // App ID may be set by client scripts, and is required for some elements. - if (this.dataElements.app_id_replace && appID != null) { - this.clickAction.targetURL = this.clickAction.targetURL.replace('app_id_replace', appID) - } - - for (const key of Object.keys(this.dataElements)) { - const attrValue = encodeURIComponent(this.dataElements[key]) - if (attrValue) { - this.clickAction.targetURL = this.clickAction.targetURL.replace(key, attrValue) - } - } - } - - /* - * Creates an iFrame for this facebook content. - * - * @returns {Element} - */ - createFBIFrame () { - const frame = document.createElement('iframe') - - frame.setAttribute('src', this.getTargetURL()) - frame.setAttribute('style', this.getStyle()) - - return frame - } - - /* - * Fades out the given element. Returns a promise that resolves when the fade is complete. - * @param {Element} element - the element to fade in or out - * @param {int} interval - frequency of opacity updates (ms) - * @param {bool} fadeIn - true if the element should fade in instead of out - */ - fadeElement (element, interval, fadeIn) { - return new Promise((resolve, reject) => { - let opacity = fadeIn ? 0 : 1 - const originStyle = element.style.cssText - const fadeOut = setInterval(function () { - opacity += fadeIn ? 0.03 : -0.03 - element.style.cssText = originStyle + `opacity: ${opacity};` - if (opacity <= 0 || opacity >= 1) { - clearInterval(fadeOut) - resolve() - } - }, interval) - }) - } - - fadeOutElement (element) { - return this.fadeElement(element, 10, false) - } - - fadeInElement (element) { - return this.fadeElement(element, 10, true) - } - - clickFunction (originalElement, replacementElement) { - let clicked = false - const handleClick = function handleClick (e) { - // Ensure that the click is created by a user event & prevent double clicks from adding more animations - if (e.isTrusted && !clicked) { - clicked = true - let isLogin = false - if (this.replaceSettings.type === 'loginButton') { - isLogin = true - } - enableSocialTracker(this.entity, isLogin) - const parent = replacementElement.parentNode - - // If we allow everything when this element is clicked, - // notify surrogate to enable SDK and replace original element. - if (this.clickAction.type === 'allowFull') { - parent.replaceChild(originalElement, replacementElement) - // window.dispatchEvent(new CustomEvent(`Load${this.entity}SDK`)) - return - } - // Create a container for the new FB element - const fbContainer = document.createElement('div') - fbContainer.style.cssText = styles.wrapperDiv - const fadeIn = document.createElement('div') - fadeIn.style.cssText = 'display: none; opacity: 0;' - - // Loading animation (FB can take some time to load) - const loadingImg = document.createElement('img') - loadingImg.setAttribute('src', loadingImages[this.getMode()]) - loadingImg.setAttribute('height', '14px') - loadingImg.style.cssText = styles.loadingImg - - // Always add the animation to the button, regardless of click source - if (e.srcElement.nodeName === 'BUTTON') { - e.srcElement.firstElementChild.insertBefore(loadingImg, e.srcElement.firstElementChild.firstChild) - } else { - // try to find the button - let el = e.srcElement - let button = null - while (button === null && el !== null) { - button = el.querySelector('button') - el = el.parentElement - } - if (button) { - button.firstElementChild.insertBefore(loadingImg, button.firstElementChild.firstChild) - } - } - - fbContainer.appendChild(fadeIn) - // default case is this.clickAction.type === 'originalElement' - let fbElement = originalElement - - if (this.clickAction.type === 'iFrame') { - fbElement = this.createFBIFrame() - } - - /* - * Modify the overlay to include a Facebook iFrame, which - * starts invisible. Once loaded, fade out and remove the overlay - * then fade in the Facebook content - */ - parent.replaceChild(fbContainer, replacementElement) - fbContainer.appendChild(replacementElement) - fadeIn.appendChild(fbElement) - fbElement.addEventListener('load', () => { - this.fadeOutElement(replacementElement) - .then(v => { - fbContainer.replaceWith(fbElement) - this.fadeInElement(fadeIn).then(v => { - fbElement.focus() // focus on new element for screen readers - }) - }) - }) - } - }.bind(this) - // If this is a login button, show modal if needed - if (this.replaceSettings.type === 'loginButton' && entityData[this.entity].shouldShowLoginModal) { - return function handleLoginClick (e) { - makeModal(this.entity, handleClick, e) - }.bind(this) - } - return handleClick - } - } - - function init () { - const fbSurrogateB64 = b64EncodeSurrogate(fbSurrogate) - loadSurrogate(fbSurrogateB64) - - for (const entity of Object.keys(fbConfig)) { - entities.push(entity) - entityData[entity] = { - shouldShowLoginModal: true, - modalIcon: fbConfig[entity].informationalModal.icon, - modalTitle: fbConfig[entity].informationalModal.messageTitle, - modalText: fbConfig[entity].informationalModal.messageBody, - modalAcceptText: fbConfig[entity].informationalModal.confirmButtonText, - modalRejectText: fbConfig[entity].informationalModal.rejectButtonText, - simpleVersion: fbConfig[entity].simpleVersion - } - } - replaceClickToLoadElements(fbConfig) - } - - /** - * Creates a safe element and replaces the original tracking element with it. - * @param {Object} widgetData - a single entry from elementData - * @param {Element} originalElement - the element on the page we are replacing - */ - function createReplacementWidget (entity, widgetData, originalElement) { - // Construct the widget based on data in the original element - const widget = new DuckWidget(widgetData, originalElement, entity) - const parent = originalElement.parentNode - - if (widgetData.replaceSettings.type === 'blank') { - const el = document.createElement('div') - parent.replaceChild(el, originalElement) - } - if (widgetData.replaceSettings.type === 'loginButton') { - window.webkit.messageHandlers.getImage.postMessage(widgetData.replaceSettings.icon).then((icon) => { - // TODO shortcircuit and below - // Create a button to replace old element - const { button, container } = makeLoginButton(widgetData.replaceSettings.buttonText, widget.getMode(), widgetData.replaceSettings.popupTitleText, widgetData.replaceSettings.popupBodyText, icon, originalElement) - button.addEventListener('click', widget.clickFunction(originalElement, container)) - parent.replaceChild(container, originalElement) - }) - .catch((e) => console.log('messageHandler exception', e)) - } - if (widgetData.replaceSettings.type === 'dialog') { - window.webkit.messageHandlers.getImage.postMessage(widgetData.replaceSettings.icon).then((icon) => { - const button = makeButton(widgetData.replaceSettings.buttonText, widget.getMode()) - const textButton = makeTextButton(widgetData.replaceSettings.buttonText, widget.getMode()) - const { contentBlock, shadowRoot } = createContentBlock( - widget, button, textButton, icon - ) - button.addEventListener('click', widget.clickFunction(originalElement, contentBlock)) - textButton.addEventListener('click', widget.clickFunction(originalElement, contentBlock)) - parent.replaceChild(contentBlock, originalElement) - - // Show an unblock link if parent element forces small height - // which may hide video. - if ((!!contentBlock.offsetHeight && contentBlock.offsetHeight <= 200) || - (!!contentBlock.parentNode && contentBlock.parentNode.offsetHeight <= 200)) { - const textButton = shadowRoot.querySelector(`#${titleID + 'TextButton'}`) - textButton.style.cssText += 'display: block' - } - }) - .catch((e) => console.log('messageHandler exception', e)) - } - } - - function replaceClickToLoadElements (config) { - for (const entity of Object.keys(config)) { - for (const widget of Object.values(config[entity].elementData)) { - const els = document.querySelectorAll(widget.selectors.join()) - for (const el of els) { - createReplacementWidget(entity, widget, el) - } - } - } - } - - /********************************************************* - * Messaging to surrogates & extension - *********************************************************/ - function enableSocialTracker (entity, isLogin) { - console.log('enableSocialTracker, isLogin=', isLogin) - window.webkit.messageHandlers.enableFacebook.postMessage(isLogin).then((enable) => { - console.log('enableSocialTracker PM callback', enable) - window.dispatchEvent(new CustomEvent('LoadFacebookSDK')) - }) - .catch((e) => console.log('messageHandler exception', e)) - } - - const hostname = getTopLevelURL().hostname - const fbExcludedDomains = fbConfig['Facebook'].excludedDomains.map(x => x.domain); - if (fbExcludedDomains.includes(hostname)) { - // console.warn('BAILING ON excludedDomains'); - return; - } - window.webkit.messageHandlers.initClickToLoad.postMessage(hostname).then((blocked) => { - if (!blocked || hostname === '') { - return - } - window.setTimeout(() => { - init() - }) - }) - - // Fetch reusable assets - window.webkit.messageHandlers.getImage.postMessage('loading_light.svg').then((response) => { - loadingImages.lightMode = response - }) - .catch((e) => console.log('messageHandler exception', e)) - - window.webkit.messageHandlers.getImage.postMessage('loading_dark.svg').then((response) => { - loadingImages.darkMode = response - }) - .catch((e) => console.log('messageHandler exception', e)) - - window.webkit.messageHandlers.getImage.postMessage('dax.png').then((response) => { - logoImg = response - }) - .catch((e) => console.log('messageHandler exception', e)) - - // Listen for events from surrogates - addEventListener('ddgClickToLoad', (event) => { - if (!event.detail) return - const entity = event.detail.entity - if (!entities.includes(entity)) { - // Unknown entity, reject - return - } - if (event.detail.appID) { - appID = JSON.stringify(event.detail.appID).replace(/"/g, '') - } - // Handle login call - if (event.detail.action === 'login') { - if (entityData[entity].shouldShowLoginModal) { - makeModal(entity, runLogin, entity) - } else { - runLogin(entity) - } - } - }) - - function runLogin (entity) { - enableSocialTracker(entity, true) - window.dispatchEvent(new CustomEvent(`Run${entity}Login`)) - } - - /********************************************************* - * Widget building blocks - *********************************************************/ - function getLearnMoreLink (mode) { - if (!mode) { - mode = 'lightMode' - } - const linkElement = document.createElement('a') - linkElement.style.cssText = styles.generalLink + styles[mode].linkFont - linkElement.ariaLabel = 'Read about this privacy protection' - linkElement.href = 'https://help.duckduckgo.com/duckduckgo-help-pages/privacy/embedded-content-protection/' - linkElement.target = '_blank' - linkElement.textContent = 'Learn More' - return linkElement - } - - function makeTextButton (linkText, mode) { - const linkElement = document.createElement('a') - linkElement.style.cssText = styles.headerLink + styles[mode].linkFont - linkElement.textContent = linkText - return linkElement - } - - function makeButton (buttonText, mode) { - const button = document.createElement('button') - button.style.cssText = styles.button + styles[mode].buttonBackground - const textContainer = document.createElement('div') - textContainer.style.cssText = styles.buttonTextContainer + styles[mode].buttonFont - textContainer.textContent = buttonText - button.appendChild(textContainer) - return button - } - - /* If there isn't an image available, just make a default block symbol */ - function makeDefaultBlockIcon () { - const blockedIcon = document.createElement('div') - const dash = document.createElement('div') - blockedIcon.appendChild(dash) - blockedIcon.style.cssText = styles.circle - dash.style.cssText = styles.rectangle - return blockedIcon - } - - /* FB login replacement button, with hover text */ - function makeLoginButton (buttonText, mode, hoverTextTitle, hoverTextBody, icon, originalElement) { - const container = document.createElement('div') - container.style.cssText = 'position: relative;' - // inherit any class styles on the button - container.className = 'fb-login-button FacebookLogin__button' - const styleElement = document.createElement('style') - styleElement.textContent = ` - #DuckDuckGoPrivacyEssentialsHoverableText { - display: none; - } - #DuckDuckGoPrivacyEssentialsHoverable:hover #DuckDuckGoPrivacyEssentialsHoverableText { - display: block; - } - ` - container.appendChild(styleElement) - - const hoverContainer = document.createElement('div') - hoverContainer.id = 'DuckDuckGoPrivacyEssentialsHoverable' - hoverContainer.style.cssText = styles.hoverContainer - container.appendChild(hoverContainer) - - // Make the button - const button = makeButton(buttonText, mode) - // Add blocked icon - if (!icon) { - button.appendChild(makeDefaultBlockIcon()) - } else { - const imgElement = document.createElement('img') - imgElement.style.cssText = styles.loginIcon - imgElement.setAttribute('src', icon) - imgElement.setAttribute('height', '28px') - button.appendChild(imgElement) - } - hoverContainer.appendChild(button) - - // hover action - const hoverBox = document.createElement('div') - hoverBox.id = 'DuckDuckGoPrivacyEssentialsHoverableText' - hoverBox.style.cssText = styles.textBubble - const arrow = document.createElement('div') - arrow.style.cssText = styles.textArrow - hoverBox.appendChild(arrow) - const branding = createTitleRow('DuckDuckGo') - branding.style.cssText += styles.hoverTextTitle - hoverBox.appendChild(branding) - const hoverText = document.createElement('div') - hoverText.style.cssText = styles.hoverTextBody - hoverText.textContent = hoverTextBody + ' ' - hoverText.appendChild(getLearnMoreLink()) - hoverBox.appendChild(hoverText) - - hoverContainer.appendChild(hoverBox) - const rect = originalElement.getBoundingClientRect() - /* - * The left side of the hover popup may go offscreen if the - * login button is all the way on the left side of the page. This - * If that is the case, dynamically shift the box right so it shows - * properly. - */ - if (rect.left < styles.textBubbleLeftShift) { - const leftShift = -rect.left + 10 // 10px away from edge of the screen - hoverBox.style.cssText += `left: ${leftShift}px;` - const change = (1 - (rect.left / styles.textBubbleLeftShift)) * (100 - styles.arrowDefaultLocationPercent) - arrow.style.cssText += `left: ${Math.max(10, styles.arrowDefaultLocationPercent - change)}%;` - } else if (rect.left + styles.textBubbleWidth - styles.textBubbleLeftShift > window.innerWidth) { - const rightShift = rect.left + styles.textBubbleWidth - styles.textBubbleLeftShift - const diff = Math.min(rightShift - window.innerWidth, styles.textBubbleLeftShift) - const rightMargin = 20 // Add some margin to the page, so scrollbar doesn't overlap. - hoverBox.style.cssText += `left: -${styles.textBubbleLeftShift + diff + rightMargin}px;` - const change = ((diff / styles.textBubbleLeftShift)) * (100 - styles.arrowDefaultLocationPercent) - arrow.style.cssText += `left: ${Math.max(10, styles.arrowDefaultLocationPercent + change)}%;` - } else { - hoverBox.style.cssText += `left: -${styles.textBubbleLeftShift}px;` - arrow.style.cssText += `left: ${styles.arrowDefaultLocationPercent}%;` - } - - return { - button: button, - container: container - } - } - - function makeModal (entity, acceptFunction, ...acceptFunctionParams) { - window.webkit.messageHandlers.getImage.postMessage(entityData[entity].modalIcon).then((icon) => { - // TODO short circuit this - const modalContainer = document.createElement('div') - modalContainer.style.cssText = styles.modalContainer - const pageOverlay = document.createElement('div') - pageOverlay.style.cssText = styles.overlay - const modal = document.createElement('div') - modal.style.cssText = styles.modal - - // Title - const modalTitle = createTitleRow('DuckDuckGo') - modal.appendChild(modalTitle) - - // Content - const modalContent = document.createElement('div') - modalContent.style.cssText = styles.modalContent - - const iconElement = document.createElement('img') - iconElement.style.cssText = styles.icon + styles.modalIcon - iconElement.setAttribute('src', icon) - iconElement.setAttribute('height', '70px') - - const title = document.createElement('div') - title.style.cssText = styles.modalContentTitle - title.textContent = entityData[entity].modalTitle - - const message = document.createElement('div') - message.style.cssText = styles.modalContentText - message.textContent = entityData[entity].modalText + ' ' - message.appendChild(getLearnMoreLink()) - - modalContent.appendChild(iconElement) - modalContent.appendChild(title) - modalContent.appendChild(message) - - // Buttons - const buttonRow = document.createElement('div') - buttonRow.style.cssText = 'margin:auto;' - const allowButton = makeButton(entityData[entity].modalAcceptText, 'lightMode') - allowButton.style.cssText += styles.modalButton + 'margin-right: 15px;' - allowButton.addEventListener('click', function doLogin () { - acceptFunction(...acceptFunctionParams) - document.body.removeChild(modalContainer) - }) - const rejectButton = makeButton(entityData[entity].modalRejectText, 'cancelMode') - rejectButton.style.cssText += styles.modalButton + 'float: right;' - rejectButton.addEventListener('click', function cancelLogin () { - document.body.removeChild(modalContainer) - }) - - buttonRow.appendChild(allowButton) - buttonRow.appendChild(rejectButton) - modalContent.appendChild(buttonRow) - - modal.appendChild(modalContent) - - modalContainer.appendChild(pageOverlay) - modalContainer.appendChild(modal) - document.body.insertBefore(modalContainer, document.body.childNodes[0]) - }) - } - - function createTitleRow (message, textButton) { - // Create row container - const row = document.createElement('div') - row.style.cssText = styles.titleBox - - // Logo - const logoContainer = document.createElement('div') - logoContainer.style.cssText = styles.logo - const logoElement = document.createElement('img') - logoElement.setAttribute('src', logoImg) - logoElement.setAttribute('height', '21px') - logoElement.style.cssText = styles.logoImg - logoContainer.appendChild(logoElement) - row.appendChild(logoContainer) - - // Content box title - const msgElement = document.createElement('div') - msgElement.id = titleID // Ensure we can find this to potentially hide it later. - msgElement.textContent = message - msgElement.style.cssText = styles.title - row.appendChild(msgElement) - - // Text button for very small boxes - if (textButton) { - textButton.id = titleID + 'TextButton' - row.appendChild(textButton) - } - - return row - } - - // Create the content block to replace other divs/iframes with - function createContentBlock (widget, button, textButton, img) { - const contentBlock = document.createElement('div') - contentBlock.style.cssText = styles.wrapperDiv - - // Put our custom font-faces inside the wrapper element, since - // @font-face does not work inside a shadowRoot. - // See https://github.com/mdn/interactive-examples/issues/887. - const fontFaceStyleElement = document.createElement('style') - fontFaceStyleElement.textContent = styles.fontStyle - contentBlock.appendChild(fontFaceStyleElement) - - // Put everyting else inside the shadowRoot of the wrapper element to - // reduce the chances of the website's stylesheets messing up the - // placeholder's appearance. - const shadowRoot = contentBlock.attachShadow({ mode: 'closed' }) - - // Style element includes our font & overwrites page styles - const styleElement = document.createElement('style') - const wrapperClass = 'DuckDuckGoSocialContainer' - styleElement.textContent = ` - .${wrapperClass} a { - ${styles[widget.getMode()].linkFont} - font-weight: bold; - } - .${wrapperClass} a:hover { - ${styles[widget.getMode()].linkFont} - font-weight: bold; - } - ` - shadowRoot.appendChild(styleElement) - - // Create overall grid structure - const element = document.createElement('div') - element.style.cssText = styles.block + styles[widget.getMode()].background + styles[widget.getMode()].textFont - element.className = wrapperClass - shadowRoot.appendChild(element) - - // grid of three rows - const titleRow = document.createElement('div') - titleRow.style.cssText = styles.headerRow - element.appendChild(titleRow) - titleRow.appendChild(createTitleRow('DuckDuckGo', textButton)) - - const contentRow = document.createElement('div') - contentRow.style.cssText = styles.content - - if (img) { - const imageRow = document.createElement('div') - imageRow.style.cssText = styles.imgRow - const imgElement = document.createElement('img') - imgElement.style.cssText = styles.icon - imgElement.setAttribute('src', img) - imgElement.setAttribute('height', '70px') - imageRow.appendChild(imgElement) - element.appendChild(imageRow) - } - - const contentTitle = document.createElement('div') - contentTitle.style.cssText = styles.contentTitle - if (entityData[widget.entity].simpleVersion && widget.replaceSettings.simpleInfoTitle) { - contentTitle.textContent = widget.replaceSettings.simpleInfoTitle - } else { - contentTitle.textContent = widget.replaceSettings.infoTitle - } - contentRow.appendChild(contentTitle) - const contentText = document.createElement('div') - contentText.style.cssText = styles.contentText - if (entityData[widget.entity].simpleVersion && widget.replaceSettings.simpleInfoText) { - contentText.textContent = widget.replaceSettings.simpleInfoText + ' ' - } else { - contentText.textContent = widget.replaceSettings.infoText + ' ' - } - contentText.appendChild(getLearnMoreLink()) - contentRow.appendChild(contentText) - element.appendChild(contentRow) - - const buttonRow = document.createElement('div') - buttonRow.style.cssText = styles.buttonRow - buttonRow.appendChild(button) - contentRow.appendChild(buttonRow) - - return { contentBlock, shadowRoot } - } -})() diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoadConfig.json b/DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoadConfig.json deleted file mode 100644 index 07dad4a49e..0000000000 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/clickToLoadConfig.json +++ /dev/null @@ -1,414 +0,0 @@ -{ - "Facebook": { - "domains": [ - "facebook.com", - "facebook.net" - ], - "excludedSubdomains": [ - "graph.facebook.com" - ], - "excludedDomains": [ - { - "domain": "www.figma.com", - "reason": "breakage due to file browser fb-page element" - }, - { - "domain": "facebook.com", - "reason": "FB breakage" - }, - { - "domain": "apps.facebook.com", - "reason": "FB breakage" - }, - { - "domain": "smartypance.com", - "reason": "https://app.asana.com/0/1200277586140538/1205348923041541/f" - }, - { - "domain": "www.dreamsresorts.com", - "reason": "https://app.asana.com/0/1200277586140538/1205409536696340/f" - }, - { - "domain": "www.standard.co.uk", - "reason": "https://app.asana.com/0/1200277586140538/1205326380537958/f" - } - ], - "surrogates": [ - { - "rule": "facebook\\.net\\/[a-z_A-Z]+\\/sdk.js", - "surrogate": "fb-sdk.js", - "xray": "fb-surrogate-xray.js" - }, - { - "rule": "facebook\\.net\\/[a-z_A-Z]+\\/all.js", - "surrogate": "fb-sdk.js", - "xray": "fb-surrogate-xray.js" - }, - { - "rule": "facebook\\.com\\/[a-z_A-Z]+\\/sdk.js", - "surrogate": "fb-sdk.js", - "xray": "fb-surrogate-xray.js" - } - ], - "informationalModal": { - "icon": "blocked_facebook_logo.svg", - "messageTitle": "Logging in with Facebook lets them track you", - "messageBody": "Once you're logged in, DuckDuckGo can't block Facebook content from tracking you on this site.", - "confirmButtonText": "Log In", - "rejectButtonText": "Go back" - }, - "clicksBeforeSimpleVersion": 3, - "elementData": { - "FB Like Button": { - "selectors": [ - ".fb-like" - ], - "replaceSettings": { - "type": "blank" - } - }, - "FB Button iFrames": { - "selectors": [ - "iframe[src*='://www.facebook.com/plugins/like.php']", - "iframe[src*='://www.facebook.com/v2.0/plugins/like.php']", - "iframe[src*='://www.facebook.com/plugins/share_button.php']", - "iframe[src*='://www.facebook.com/v2.0/plugins/share_button.php']" - ], - "replaceSettings": { - "type": "blank" - } - }, - "FB Save Button": { - "selectors": [ - ".fb-save" - ], - "replaceSettings": { - "type": "blank" - } - }, - "FB Share Button": { - "selectors": [ - ".fb-share-button" - ], - "replaceSettings": { - "type": "blank" - } - }, - "FB Page iFrames": { - "selectors": [ - "iframe[src*='://www.facebook.com/plugins/page.php']", - "iframe[src*='://www.facebook.com/v2.0/plugins/page.php']" - ], - "replaceSettings": { - "type": "dialog", - "buttonText": "Unblock Content", - "infoTitle": "DuckDuckGo blocked this content to prevent Facebook from tracking you", - "infoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity.", - "simpleInfoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity." - }, - "clickAction": { - "type": "originalElement" - } - }, - "FB Page Div": { - "selectors": [ - ".fb-page" - ], - "replaceSettings": { - "type": "dialog", - "buttonText": "Unblock Content", - "infoTitle": "DuckDuckGo blocked this content to prevent Facebook from tracking you", - "infoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity.", - "simpleInfoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity." - }, - "clickAction": { - "type": "iFrame", - "targetURL": "https://www.facebook.com/plugins/page.php?href=data-href&tabs=data-tabs&width=data-width&height=data-height", - "urlDataAttributesToPreserve": { - "data-href": { - "default": "", - "required": true - }, - "data-tabs": { - "default": "timeline" - }, - "data-height": { - "default": "500" - }, - "data-width": { - "default": "500" - } - }, - "styleDataAttributes": { - "width": { - "name": "data-width", - "unit": "px" - }, - "height": { - "name": "data-height", - "unit": "px" - } - } - } - }, - "FB Comment iFrames": { - "selectors": [ - "iframe[src*='://www.facebook.com/plugins/comment_embed.php']", - "iframe[src*='://www.facebook.com/v2.0/plugins/comment_embed.php']" - ], - "replaceSettings": { - "type": "dialog", - "buttonText": "Unblock Comment", - "infoTitle": "DuckDuckGo blocked this comment to prevent Facebook from tracking you", - "infoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity.", - "simpleInfoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity." - }, - "clickAction": { - "type": "originalElement" - } - }, - "FB Comments": { - "selectors": [ - ".fb-comments", - "fb\\3Acomments" - ], - "replaceSettings": { - "type": "dialog", - "buttonText": "Unblock Comments", - "infoTitle": "DuckDuckGo blocked these comments to prevent Facebook from tracking you", - "infoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity.", - "simpleInfoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity." - }, - "clickAction": { - "type": "allowFull", - "targetURL": "https://www.facebook.com/v9.0/plugins/comments.php?href=data-href&numposts=data-numposts&sdk=joey&version=v9.0&width=data-width", - "urlDataAttributesToPreserve": { - "data-href": { - "default": "", - "required": true - }, - "data-numposts": { - "default": 10 - }, - "data-width": { - "default": "500" - } - } - } - }, - "FB Embedded Comment Div": { - "selectors": [ - ".fb-comment-embed" - ], - "replaceSettings": { - "type": "dialog", - "buttonText": "Unblock Comment", - "infoTitle": "DuckDuckGo blocked this comment to prevent Facebook from tracking you", - "infoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity.", - "simpleInfoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity." - }, - "clickAction": { - "type": "iFrame", - "targetURL": "https://www.facebook.com/v9.0/plugins/comment_embed.php?href=data-href&sdk=joey&width=data-width&include_parent=data-include-parent", - "urlDataAttributesToPreserve": { - "data-href": { - "default": "", - "required": true - }, - "data-width": { - "default": "500" - }, - "data-include-parent": { - "default": "false" - } - }, - "styleDataAttributes": { - "width": { - "name": "data-width", - "unit": "px" - } - } - } - }, - "FB Post iFrames": { - "selectors": [ - "iframe[src*='://www.facebook.com/plugins/post.php']", - "iframe[src*='://www.facebook.com/v2.0/plugins/post.php']" - ], - "replaceSettings": { - "type": "dialog", - "buttonText": "Unblock Post", - "infoTitle": "DuckDuckGo blocked this post to prevent Facebook from tracking you", - "infoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity.", - "simpleInfoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity." - }, - "clickAction": { - "type": "originalElement" - } - }, - "FB Posts Div": { - "selectors": [ - ".fb-post" - ], - "replaceSettings": { - "type": "dialog", - "buttonText": "Unblock Post", - "infoTitle": "DuckDuckGo blocked this post to prevent Facebook from tracking you", - "infoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity.", - "simpleInfoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity." - }, - "clickAction": { - "type": "allowFull", - "targetURL": "https://www.facebook.com/v9.0/plugins/post.php?href=data-href&sdk=joey&show_text=true&width=data-width", - "urlDataAttributesToPreserve": { - "data-href": { - "default": "", - "required": true - }, - "data-width": { - "default": "500" - } - }, - "styleDataAttributes": { - "width": { - "name": "data-width", - "unit": "px" - }, - "height": { - "name": "data-height", - "unit": "px", - "fallbackAttribute": "data-width" - } - } - } - }, - "FB Video iFrames": { - "selectors": [ - "iframe[src*='://www.facebook.com/plugins/video.php']", - "iframe[src*='://www.facebook.com/v2.0/plugins/video.php']" - ], - "replaceSettings": { - "type": "dialog", - "buttonText": "Unblock Video", - "infoTitle": "DuckDuckGo blocked this video to prevent Facebook from tracking you", - "infoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity.", - "simpleInfoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity." - }, - "clickAction": { - "type": "originalElement" - } - }, - "FB Video": { - "selectors": [ - ".fb-video" - ], - "replaceSettings": { - "type": "dialog", - "buttonText": "Unblock Video", - "infoTitle": "DuckDuckGo blocked this video to prevent Facebook from tracking you", - "infoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity.", - "simpleInfoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity." - }, - "clickAction": { - "type": "iFrame", - "targetURL": "https://www.facebook.com/plugins/video.php?href=data-href&show_text=true&width=data-width", - "urlDataAttributesToPreserve": { - "data-href": { - "default": "", - "required": true - }, - "data-width": { - "default": "500" - } - }, - "styleDataAttributes": { - "width": { - "name": "data-width", - "unit": "px" - }, - "height": { - "name": "data-height", - "unit": "px", - "fallbackAttribute": "data-width" - } - } - } - }, - "FB Group iFrames": { - "selectors": [ - "iframe[src*='://www.facebook.com/plugins/group.php']", - "iframe[src*='://www.facebook.com/v2.0/plugins/group.php']" - ], - "replaceSettings": { - "type": "dialog", - "buttonText": "Unblock Content", - "infoTitle": "DuckDuckGo blocked this content to prevent Facebook from tracking you", - "infoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity.", - "simpleInfoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity." - }, - "clickAction": { - "type": "originalElement" - } - }, - "FB Group": { - "selectors": [ - ".fb-group" - ], - "replaceSettings": { - "type": "dialog", - "buttonText": "Unblock Content", - "infoTitle": "DuckDuckGo blocked this content to prevent Facebook from tracking you", - "infoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity.", - "simpleInfoText": "We blocked Facebook from tracking you when the page loaded. If you unblock this content, Facebook will know your activity." - }, - "clickAction": { - "type": "iFrame", - "targetURL": "https://www.facebook.com/plugins/group.php?href=data-href&width=data-width", - "urlDataAttributesToPreserve": { - "data-href": { - "default": "", - "required": true - }, - "data-width": { - "default": "500" - } - }, - "styleDataAttributes": { - "width": { - "name": "data-width", - "unit": "px" - } - } - } - }, - "FB Login Button": { - "selectors": [ - ".fb-login-button" - ], - "replaceSettings": { - "type": "loginButton", - "icon": "blocked_facebook_logo.svg", - "buttonText": "Log in with Facebook", - "popupTitleText": "DuckDuckGo blocked this Facebook login", - "popupBodyText": "Facebook tracks your activity on a site when you use them to login." - }, - "clickAction": { - "type": "allowFull", - "targetURL": "https://www.facebook.com/v9.0/plugins/login_button.php?app_id=app_id_replace&auto_logout_link=false&button_type=continue_with&sdk=joey&size=large&use_continue_as=false&width=", - "urlDataAttributesToPreserve": { - "data-href": { - "default": "", - "required": true - }, - "data-width": { - "default": "500" - }, - "app_id_replace": { - "default": "null" - } - } - } - } - } - } -} \ No newline at end of file diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/fb-sdk.js b/DuckDuckGo/ContentBlocker/ClickToLoad/fb-sdk.js deleted file mode 100644 index 03c1645d8b..0000000000 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/fb-sdk.js +++ /dev/null @@ -1,189 +0,0 @@ -(() => { -// facebook.net/sdk.js application/javascript - 'use strict' - // const originalFBURL = document.currentScript.src - let siteInit = function () {} - let fbIsEnabled = false - let initData = {} - let runInit = false - const parseCalls = [] - const popupName = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 12) - - const fbLogin = { - callback: function () {}, - params: undefined, - shouldRun: false - } - - function messageAddon (detailObject) { - detailObject.entity = 'Facebook' - const event = new CustomEvent('ddgClickToLoad', { - detail: detailObject, - bubbles: false, - cancelable: false, - composed: false - }) - dispatchEvent(event) - } - - /** - * When setting up the Facebook SDK, the site may define a function called window.fbAsyncInit. - * Once the SDK loads, it searches for and calls window.fbAsyncInit. However, some sites may - * not use this, and just call FB.init directly at some point (after ensuring that the script has loaded). - * - * Our surrogate (defined below in window.FB) captures calls made to init by page scripts. If at a - * later point we load the real sdk here, we then re-call init with whatever arguments the page passed in - * originally. The runInit param should be true when a page has called init directly. - * Because we put it in asyncInit, the flow will be something like: - * - * FB SDK loads -> SDK calls window.fbAsyncInit -> Our function calls window.FB.init (maybe) -> - * our function calls original fbAsyncInit (if it existed) - */ - function enableFacebookSDK () { - if (!fbIsEnabled) { - window.FB = undefined - window.fbTest = "*** disabled surrogate ***"; - window.fbAsyncInit = function () { - if (runInit && initData) { - window.FB.init(initData) - } - siteInit() - if (fbLogin.shouldRun) { - window.FB.login(fbLogin.callback, fbLogin.params) - } - } - const fbScript = document.createElement('script') - fbScript.setAttribute('crossorigin', 'anonymous') - fbScript.setAttribute('async', '') - fbScript.setAttribute('defer', '') - fbScript.src = 'https://connect.facebook.net/en_US/sdk.js?XFBML=false' // originalFBURL - fbScript.onload = function () { - for (const node of parseCalls) { - window.FB.XFBML.parse.apply(window.FB.XFBML, node) - } - } - document.head.appendChild(fbScript) - fbIsEnabled = true - } else { - if (initData) { - window.FB.init(initData) - } - } - } - - function removeFacebookSurrogate () { - window.fbAsyncInit = function () { - if (runInit && initData) { - window.FB.init(initData) - } - siteInit() - if (fbLogin.shouldRun) { - window.FB.login(fbLogin.callback, fbLogin.params) - } - } - if (window.FB && window.FB.isSurrogate) { - window.FB = undefined - } - } - - function runFacebookLogin () { - fbLogin.shouldRun = true - replaceWindowOpen() - loginPopup() - // enableFacebookSDK() - } - - function replaceWindowOpen () { - const oldOpen = window.open - window.open = function (url, name, windowParams) { - const u = new URL(url) - if (u.origin === 'https://www.facebook.com') { - name = popupName - } - return oldOpen.call(window, url, name, windowParams) - } - } - - function loginPopup () { - const width = Math.min(window.screen.width, 450) - const height = Math.min(window.screen.height, 450) - const popupParams = 'width=' + width + ',height=' + height + '},scrollbars=1,location=1' - window.open('about:blank', popupName, popupParams) - } - - window.addEventListener('LoadFacebookSDK', enableFacebookSDK) - window.addEventListener('RunFacebookLogin', runFacebookLogin) - window.addEventListener('RemoveFacebookSurrogate', removeFacebookSurrogate) - - function init () { - if (window.fbAsyncInit) { - siteInit = window.fbAsyncInit - window.fbAsyncInit() - } - } - - if (!window.FB) { - window.FB = { - api: function (url, cb) { cb() }, - init: function (obj) { - if (obj) { - initData = obj - runInit = true - messageAddon({ - appID: obj.appId - }) - } - }, - ui: function (obj, cb) { - if (obj.method && obj.method === 'share') { - const shareLink = 'https://www.facebook.com/sharer/sharer.php?u=' + obj.href - window.open(shareLink, 'share-facebook', 'width=550,height=235') - } - // eslint-disable-next-line node/no-callback-literal - cb({}) - }, - getAccessToken: function () {}, - getAuthResponse: function () { - return { status: '' } - }, - // eslint-disable-next-line node/no-callback-literal - getLoginStatus: function (callback) { callback({ status: 'unknown' }) }, - getUserID: function () {}, - login: function (cb, params) { - fbLogin.callback = cb - fbLogin.params = params - messageAddon({ - action: 'login' - }) - }, - logout: function () {}, - AppEvents: { - EventNames: {}, - logEvent: function (a, b, c) {}, - logPageView: function () {} - }, - Event: { - subscribe: function (event, callback) { - if (event === 'xfbml.render') { - callback() - } - }, - unsubscribe: function () {} - }, - XFBML: { - parse: function (n) { - parseCalls.push(n) - } - }, - isSurrogate: true - } - if (document.readyState === 'complete') { - init() - } else { - // sdk script loaded before page content, so wait for load. - window.addEventListener('load', (event) => { - init() - }) - } - } -})() diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/fb-tds.json b/DuckDuckGo/ContentBlocker/ClickToLoad/fb-tds.json deleted file mode 100644 index 698e3e7e3d..0000000000 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/fb-tds.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "trackers": { - "facebook.com": { - "domain": "facebook.com", - "owner": { - "name": "Facebook, Inc.", - "displayName": "Facebook" - }, - "default": "ignore", - "rules": [ - { - "rule": "facebook\\.com\\/[a-z_A-Z]+\\/sdk\\.js", - "exceptions": { - "domains": [ - "graph.facebook.com" - ] - }, - "action": "block" - } - ] - }, - "facebook.net": { - "domain": "facebook.net", - "owner": { - "name": "Facebook, Inc.", - "displayName": "Facebook" - }, - "default": "ignore", - "rules": [ - { - "rule": "facebook\\.net\\/[a-z_A-Z]+\\/sdk\\.js", - "exceptions": { - "domains": [ - "graph.facebook.com" - ] - }, - "action": "block" - }, - { - "rule": "facebook\\.net\\/[a-z_A-Z]+\\/all\\.js", - "exceptions": { - "domains": [ - "graph.facebook.com" - ] - }, - "action": "block" } - ] - } - }, - "entities": { - "Facebook, Inc.": { - "domains": [ - "facebook.com", - "facebook.net", - "graph.facebook.com" - ], - "displayName": "Facebook" - } - }, - "domains": { - "facebook.com": "Facebook, Inc.", - "facebook.net": "Facebook, Inc.", - "graph.facebook.com": "Facebook, Inc." - } -} diff --git a/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift b/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift index d7b0e8d112..c76a9a5147 100644 --- a/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift +++ b/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift @@ -27,23 +27,6 @@ final class ContentBlockerRulesLists: DefaultContentBlockerRulesListsSource { static let clickToLoadRulesListName = "ClickToLoad" } - static var fbTrackerDataFile: Data = { - do { - let url = Bundle.main.url(forResource: "fb-tds", withExtension: "json")! - return try Data(contentsOf: url) - } catch { - fatalError("Failed to load FB-TDS") - } - }() - - static var fbTrackerDataSet: TrackerRadarKit.TrackerData = { - do { - return try JSONDecoder().decode(TrackerData.self, from: fbTrackerDataFile) - } catch { - fatalError("Failed to JSON decode FB-TDS") - } - }() - func MD5(data: Data) -> String { let digest = Insecure.MD5.hash(data: data) diff --git a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift index 8d46a199a6..0ffe08cd67 100644 --- a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift +++ b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift @@ -96,7 +96,7 @@ struct ScriptSourceProvider: ScriptSourceProviding { let ctlTrackerData = (contentBlockingManager.currentRules.first(where: { $0.name == ContentBlockerRulesLists.Constants.clickToLoadRulesListName - })?.trackerData) ?? ContentBlockerRulesLists.fbTrackerDataSet + })?.trackerData) return DefaultContentBlockerUserScriptConfig(privacyConfiguration: privacyConfigurationManager.privacyConfig, trackerData: trackerData, From be1a4ea2815ebf56c3afe399a830d0de3e4915d0 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Sun, 14 Apr 2024 20:57:59 -0700 Subject: [PATCH 20/60] dead code cleanup part 2 --- DuckDuckGo.xcodeproj/project.pbxproj | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 1e4533d0b1..4b773ee0b9 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -658,14 +658,12 @@ 3706FCB7293F65D500E42796 /* 01_Fire_really_small.json in Resources */ = {isa = PBXBuildFile; fileRef = 8511E18325F82B34002F516B /* 01_Fire_really_small.json */; }; 3706FCB8293F65D500E42796 /* Onboarding.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85B7184927677C2D00B4277F /* Onboarding.storyboard */; }; 3706FCB9293F65D500E42796 /* FireproofDomains.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4B0511AD262CAA5A00F6079C /* FireproofDomains.storyboard */; }; - 3706FCBA293F65D500E42796 /* clickToLoadConfig.json in Resources */ = {isa = PBXBuildFile; fileRef = EA47767F272A21B700419EDA /* clickToLoadConfig.json */; }; 3706FCBC293F65D500E42796 /* dark-shield.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396F2754D4E900B241FA /* dark-shield.json */; }; 3706FCBD293F65D500E42796 /* dark-shield-mouse-over.json in Resources */ = {isa = PBXBuildFile; fileRef = AA7EB6EA27E880AE00036718 /* dark-shield-mouse-over.json */; }; 3706FCBE293F65D500E42796 /* autoconsent-bundle.js in Resources */ = {isa = PBXBuildFile; fileRef = B31055C327A1BA1D001AC618 /* autoconsent-bundle.js */; }; 3706FCBF293F65D500E42796 /* ContentOverlay.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7B1E819C27C8874900FF0E60 /* ContentOverlay.storyboard */; }; 3706FCC0293F65D500E42796 /* FindInPage.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85A0117325AF2EDF00FA6A0C /* FindInPage.storyboard */; }; 3706FCC3293F65D500E42796 /* userscript.js in Resources */ = {isa = PBXBuildFile; fileRef = B31055BE27A1BA1D001AC618 /* userscript.js */; }; - 3706FCC4293F65D500E42796 /* fb-tds.json in Resources */ = {isa = PBXBuildFile; fileRef = EA4617EF273A28A700F110A2 /* fb-tds.json */; }; 3706FCC6293F65D500E42796 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = AA68C3D62490F821001B8783 /* README.md */; }; 3706FCC8293F65D500E42796 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AA585D85248FD31400E9A3E2 /* Assets.xcassets */; }; 3706FCC9293F65D500E42796 /* NavigationBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85589E8C27BBBB870038AD11 /* NavigationBar.storyboard */; }; @@ -688,7 +686,6 @@ 3706FCE4293F65D500E42796 /* Fire.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AAB7320626DD0C37002FACF9 /* Fire.storyboard */; }; 3706FCE6293F65D500E42796 /* social_images in Resources */ = {isa = PBXBuildFile; fileRef = EA18D1C9272F0DC8006DC101 /* social_images */; }; 3706FCE7293F65D500E42796 /* shield-dot-mouse-over.json in Resources */ = {isa = PBXBuildFile; fileRef = AA7EB6E827E880A600036718 /* shield-dot-mouse-over.json */; }; - 3706FCE9293F65D500E42796 /* fb-sdk.js in Resources */ = {isa = PBXBuildFile; fileRef = EAC80DDF271F6C0100BBF02D /* fb-sdk.js */; }; 3706FCEA293F65D500E42796 /* PasswordManager.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 85625993269C8F9600EE44BC /* PasswordManager.storyboard */; }; 3706FCEB293F65D500E42796 /* dark-flame-mouse-over.json in Resources */ = {isa = PBXBuildFile; fileRef = AA7EB6E127E7D05500036718 /* dark-flame-mouse-over.json */; }; 3706FCEC293F65D500E42796 /* flame-mouse-over.json in Resources */ = {isa = PBXBuildFile; fileRef = AA7EB6E027E7D05500036718 /* flame-mouse-over.json */; }; @@ -702,7 +699,6 @@ 3706FCF5293F65D500E42796 /* dark-shield-dot.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396E2754D4E900B241FA /* dark-shield-dot.json */; }; 3706FCF6293F65D500E42796 /* trackers-2.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439742754D55100B241FA /* trackers-2.json */; }; 3706FCF7293F65D500E42796 /* ProximaNova-Reg-webfont.woff2 in Resources */ = {isa = PBXBuildFile; fileRef = EAA29AE8278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 */; }; - 3706FCF8293F65D500E42796 /* clickToLoad.js in Resources */ = {isa = PBXBuildFile; fileRef = EAFAD6C92728BD1200F9DF00 /* clickToLoad.js */; }; 3706FDDA293F661700E42796 /* EmbeddedTrackerDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9833913227AAAEEE00DAF119 /* EmbeddedTrackerDataTests.swift */; }; 3706FDDB293F661700E42796 /* AutofillPreferencesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3776583027F8325B009A6B35 /* AutofillPreferencesTests.swift */; }; 3706FDDC293F661700E42796 /* FileManagerExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B67C6C462654C643006C872E /* FileManagerExtensionTests.swift */; }; @@ -2444,17 +2440,13 @@ EA0BA3A9272217E6002A0B6C /* ClickToLoadUserScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */; }; EA18D1CA272F0DC8006DC101 /* social_images in Resources */ = {isa = PBXBuildFile; fileRef = EA18D1C9272F0DC8006DC101 /* social_images */; }; EA1E52B52798CF98002EC53C /* ClickToLoadModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1E52B42798CF98002EC53C /* ClickToLoadModelTests.swift */; }; - EA4617F0273A28A700F110A2 /* fb-tds.json in Resources */ = {isa = PBXBuildFile; fileRef = EA4617EF273A28A700F110A2 /* fb-tds.json */; }; - EA477680272A21B700419EDA /* clickToLoadConfig.json in Resources */ = {isa = PBXBuildFile; fileRef = EA47767F272A21B700419EDA /* clickToLoadConfig.json */; }; EA8AE76A279FBDB20078943E /* ClickToLoadTDSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */; }; EAA29AE9278D2E43007070CF /* ProximaNova-Bold-webfont.woff2 in Resources */ = {isa = PBXBuildFile; fileRef = EAA29AE7278D2E43007070CF /* ProximaNova-Bold-webfont.woff2 */; }; EAA29AEA278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 in Resources */ = {isa = PBXBuildFile; fileRef = EAA29AE8278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 */; }; - EAC80DE0271F6C0100BBF02D /* fb-sdk.js in Resources */ = {isa = PBXBuildFile; fileRef = EAC80DDF271F6C0100BBF02D /* fb-sdk.js */; }; EAE42800275D47FA00DAC26B /* ClickToLoadModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */; }; EAF52F4F2B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; EAF52F502B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; EAF52F512B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; - EAFAD6CA2728BD1200F9DF00 /* clickToLoad.js in Resources */ = {isa = PBXBuildFile; fileRef = EAFAD6C92728BD1200F9DF00 /* clickToLoad.js */; }; EE02D41A2BB4609900DBE6B3 /* UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D4192BB4609900DBE6B3 /* UITests.swift */; }; EE02D41C2BB460A600DBE6B3 /* BrowsingHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D41B2BB460A600DBE6B3 /* BrowsingHistoryTests.swift */; }; EE02D4202BB460C000DBE6B3 /* BrowserServicesKit in Frameworks */ = {isa = PBXBuildFile; productRef = EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */; }; @@ -3942,15 +3934,11 @@ EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClickToLoadUserScript.swift; sourceTree = ""; }; EA18D1C9272F0DC8006DC101 /* social_images */ = {isa = PBXFileReference; lastKnownFileType = folder; path = social_images; sourceTree = ""; }; EA1E52B42798CF98002EC53C /* ClickToLoadModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadModelTests.swift; sourceTree = ""; }; - EA4617EF273A28A700F110A2 /* fb-tds.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "fb-tds.json"; sourceTree = ""; }; - EA47767F272A21B700419EDA /* clickToLoadConfig.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = clickToLoadConfig.json; sourceTree = ""; }; EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadTDSTests.swift; sourceTree = ""; }; EAA29AE7278D2E43007070CF /* ProximaNova-Bold-webfont.woff2 */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ProximaNova-Bold-webfont.woff2"; sourceTree = ""; }; EAA29AE8278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ProximaNova-Reg-webfont.woff2"; sourceTree = ""; }; - EAC80DDF271F6C0100BBF02D /* fb-sdk.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "fb-sdk.js"; sourceTree = ""; }; EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClickToLoadModel.swift; sourceTree = ""; }; EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadRulesSplitter.swift; sourceTree = ""; }; - EAFAD6C92728BD1200F9DF00 /* clickToLoad.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clickToLoad.js; sourceTree = ""; }; EE02D4192BB4609900DBE6B3 /* UITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITests.swift; sourceTree = ""; }; EE02D41B2BB460A600DBE6B3 /* BrowsingHistoryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrowsingHistoryTests.swift; sourceTree = ""; }; EE0429DF2BA31D2F009EB20F /* FindInPageTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FindInPageTests.swift; sourceTree = ""; }; @@ -7978,10 +7966,6 @@ children = ( EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */, EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */, - EAFAD6C92728BD1200F9DF00 /* clickToLoad.js */, - EA47767F272A21B700419EDA /* clickToLoadConfig.json */, - EA4617EF273A28A700F110A2 /* fb-tds.json */, - EAC80DDF271F6C0100BBF02D /* fb-sdk.js */, EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */, ); path = ClickToLoad; @@ -8703,7 +8687,6 @@ 3706FCB8293F65D500E42796 /* Onboarding.storyboard in Resources */, 56CEE90F2B7A725C00CF10AA /* InfoPlist.xcstrings in Resources */, 3706FCB9293F65D500E42796 /* FireproofDomains.storyboard in Resources */, - 3706FCBA293F65D500E42796 /* clickToLoadConfig.json in Resources */, 3706FCBC293F65D500E42796 /* dark-shield.json in Resources */, 854DAAAE2A72B613001E2E24 /* BookmarksBarPromptAssets.xcassets in Resources */, 3706FCBD293F65D500E42796 /* dark-shield-mouse-over.json in Resources */, @@ -8712,7 +8695,6 @@ 3706FCC0293F65D500E42796 /* FindInPage.storyboard in Resources */, EEC8EB3F2982CA440065AA39 /* JSAlert.storyboard in Resources */, 3706FCC3293F65D500E42796 /* userscript.js in Resources */, - 3706FCC4293F65D500E42796 /* fb-tds.json in Resources */, 3706FCC6293F65D500E42796 /* README.md in Resources */, 3706FCC8293F65D500E42796 /* Assets.xcassets in Resources */, 3706FCC9293F65D500E42796 /* NavigationBar.storyboard in Resources */, @@ -8736,7 +8718,6 @@ 3706FCE4293F65D500E42796 /* Fire.storyboard in Resources */, 3706FCE6293F65D500E42796 /* social_images in Resources */, 3706FCE7293F65D500E42796 /* shield-dot-mouse-over.json in Resources */, - 3706FCE9293F65D500E42796 /* fb-sdk.js in Resources */, BD384ACB2BBC821B00EF3735 /* vpn-dark-mode.json in Resources */, 3706FCEA293F65D500E42796 /* PasswordManager.storyboard in Resources */, BD384ACC2BBC821B00EF3735 /* vpn-light-mode.json in Resources */, @@ -8752,7 +8733,6 @@ 3706FCF5293F65D500E42796 /* dark-shield-dot.json in Resources */, 3706FCF6293F65D500E42796 /* trackers-2.json in Resources */, 3706FCF7293F65D500E42796 /* ProximaNova-Reg-webfont.woff2 in Resources */, - 3706FCF8293F65D500E42796 /* clickToLoad.js in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -8889,7 +8869,6 @@ 85B7184A27677C2D00B4277F /* Onboarding.storyboard in Resources */, 56CEE90E2B7A725B00CF10AA /* InfoPlist.xcstrings in Resources */, 4B0511C3262CAA5A00F6079C /* FireproofDomains.storyboard in Resources */, - EA477680272A21B700419EDA /* clickToLoadConfig.json in Resources */, AA3439712754D4E900B241FA /* dark-shield.json in Resources */, 859F30672A72B38500C20372 /* BookmarksBarPromptAssets.xcassets in Resources */, AA7EB6EB27E880AE00036718 /* dark-shield-mouse-over.json in Resources */, @@ -8898,7 +8877,6 @@ 85A0117425AF2EDF00FA6A0C /* FindInPage.storyboard in Resources */, EEC111E4294D06020086524F /* JSAlert.storyboard in Resources */, B31055C627A1BA1D001AC618 /* userscript.js in Resources */, - EA4617F0273A28A700F110A2 /* fb-tds.json in Resources */, AA68C3D72490F821001B8783 /* README.md in Resources */, AA585D86248FD31400E9A3E2 /* Assets.xcassets in Resources */, 85589E8D27BBBB870038AD11 /* NavigationBar.storyboard in Resources */, @@ -8922,7 +8900,6 @@ AAB7320726DD0C37002FACF9 /* Fire.storyboard in Resources */, EA18D1CA272F0DC8006DC101 /* social_images in Resources */, AA7EB6E927E880A600036718 /* shield-dot-mouse-over.json in Resources */, - EAC80DE0271F6C0100BBF02D /* fb-sdk.js in Resources */, BD384AC92BBC821A00EF3735 /* vpn-dark-mode.json in Resources */, 85625994269C8F9600EE44BC /* PasswordManager.storyboard in Resources */, BD384ACA2BBC821A00EF3735 /* vpn-light-mode.json in Resources */, @@ -8938,7 +8915,6 @@ AA3439702754D4E900B241FA /* dark-shield-dot.json in Resources */, AA34397A2754D55100B241FA /* trackers-2.json in Resources */, EAA29AEA278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 in Resources */, - EAFAD6CA2728BD1200F9DF00 /* clickToLoad.js in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; From 12cce92294f58074fe87e997e31057e2d41c0abc Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Sun, 14 Apr 2024 20:58:57 -0700 Subject: [PATCH 21/60] clarify method naming --- .../Tab/TabExtensions/FBProtectionTabExtension.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index e30e93b6b9..aa27075113 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -54,16 +54,16 @@ final class FBProtectionTabExtension { extension FBProtectionTabExtension { - private func enableFBProtection(for url: URL) { + private func setFBProtection(for url: URL) { // Enable/disable FBProtection only after UserScripts are installed (awaitContentBlockingAssetsInstalled) let privacyConfiguration = privacyConfigurationManager.privacyConfig let featureEnabled = privacyConfiguration.isFeature(.clickToLoad, enabledForDomain: url.host) - setFBProtection(enable: featureEnabled) + enableFBProtection(enable: featureEnabled) } @discardableResult - private func setFBProtection(enable: Bool) -> Bool { + private func enableFBProtection(enable: Bool) -> Bool { if #unavailable(OSX 11) { // disable CTL for Catalina and earlier return false } @@ -101,7 +101,7 @@ extension FBProtectionTabExtension: ClickToLoadUserScriptDelegate { return true } - if setFBProtection(enable: false) { + if enableFBProtection(enable: false) { return true } else { return false @@ -116,7 +116,7 @@ extension FBProtectionTabExtension: NavigationResponder { if navigationAction.navigationType == NavigationType.other && navigationAction.isUserInitiated == false { return .next } - enableFBProtection(for: navigationAction.url) + setFBProtection(for: navigationAction.url) return .next } From 7ed7200dfd880b189d7389b078b9a5d061be7799 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Tue, 16 Apr 2024 16:31:49 -0700 Subject: [PATCH 22/60] handle empty ruleset in in surrogate generation (unit tests) --- .../ScriptSourceProviding.swift | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift index 0ffe08cd67..dcdedc093a 100644 --- a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift +++ b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift @@ -141,20 +141,24 @@ struct ScriptSourceProvider: ScriptSourceProviding { private func mergeTrackerDataSets(rules: [ContentBlockerRulesManager.Rules]) -> (trackerData: TrackerData, encodedTrackerData: String) { let tdsName = DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName let tdsIndex = contentBlockingManager.currentRules.firstIndex(where: { $0.name == tdsName}) - - let cnames = rules[tdsIndex!].trackerData.cnames + var combinedTrackers: [String: KnownTracker] = [:] var combinedEntities: [String: Entity] = [:] var combinedDomains: [String: String] = [:] - rules.forEach { ruleSet in - ruleSet.trackerData.trackers.forEach { key, value in - combinedTrackers[key] = value - } - ruleSet.trackerData.entities.forEach { key, value in - combinedEntities[key] = value - } - ruleSet.trackerData.domains.forEach { key, value in - combinedDomains[key] = value + var cnames: [TrackerData.CnameDomain: TrackerData.TrackerDomain]? = [:] + + if tdsIndex != nil { + cnames = rules[tdsIndex!].trackerData.cnames + rules.forEach { ruleSet in + ruleSet.trackerData.trackers.forEach { key, value in + combinedTrackers[key] = value + } + ruleSet.trackerData.entities.forEach { key, value in + combinedEntities[key] = value + } + ruleSet.trackerData.domains.forEach { key, value in + combinedDomains[key] = value + } } } From b249af6596b5c038593a473d036bea02ca1b6e78 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Tue, 16 Apr 2024 20:24:35 -0700 Subject: [PATCH 23/60] use fallback TDS for CTL test vs old embedded CTL TDS --- .../ContentBlocker/ClickToLoadTDSTests.swift | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift index 77f6d6f2f9..ed5358aab9 100644 --- a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift +++ b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift @@ -25,8 +25,20 @@ class ClickToLoadTDSTests: XCTestCase { func testEnsureClickToLoadTDSCompiles() throws { - let tds = ContentBlockerRulesLists.fbTrackerDataSet - let builder = ContentBlockerRulesBuilder(trackerData: tds) + let trackerManager = TrackerDataManager(etag: nil, + data: nil, + embeddedDataProvider: AppTrackerDataSetProvider()) + let mockAdAttributing = MockAttributing() + + let cbrLists = ContentBlockerRulesLists(trackerDataManager: trackerManager, adClickAttribution: mockAdAttributing) + let ruleSets = cbrLists.contentBlockerRulesLists + let tdsName = ContentBlockerRulesLists.Constants.clickToLoadRulesListName + + let ctlRules = ruleSets.first(where: { $0.name == tdsName}) + let ctlFallback = ctlRules?.fallbackTrackerData + let tds = ctlFallback?.tds + + let builder = ContentBlockerRulesBuilder(trackerData: tds!) let rules = builder.buildRules(withExceptions: [], andTemporaryUnprotectedDomains: [], @@ -44,7 +56,7 @@ class ClickToLoadTDSTests: XCTestCase { XCTAssertNotNil(result) XCTAssertNil(error) compiled.fulfill() - } + } wait(for: [compiled], timeout: 30.0) From a5e1287a31c10a04c394551710958cf398f5b7a3 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Wed, 17 Apr 2024 09:22:13 -0700 Subject: [PATCH 24/60] bump TDS test to v6 --- UnitTests/AppDelegate/AppConfigurationURLProviderTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UnitTests/AppDelegate/AppConfigurationURLProviderTests.swift b/UnitTests/AppDelegate/AppConfigurationURLProviderTests.swift index 4b300a8347..b23486adf8 100644 --- a/UnitTests/AppDelegate/AppConfigurationURLProviderTests.swift +++ b/UnitTests/AppDelegate/AppConfigurationURLProviderTests.swift @@ -27,7 +27,7 @@ final class AppConfigurationURLProviderTests: XCTestCase { XCTAssertEqual(AppConfigurationURLProvider().url(for: .bloomFilterExcludedDomains).absoluteString, "https://staticcdn.duckduckgo.com/https/https-mobile-v2-false-positives.json") XCTAssertEqual(AppConfigurationURLProvider().url(for: .privacyConfiguration).absoluteString, "https://staticcdn.duckduckgo.com/trackerblocking/config/v4/macos-config.json") XCTAssertEqual(AppConfigurationURLProvider().url(for: .surrogates).absoluteString, "https://staticcdn.duckduckgo.com/surrogates.txt") - XCTAssertEqual(AppConfigurationURLProvider().url(for: .trackerDataSet).absoluteString, "https://staticcdn.duckduckgo.com/trackerblocking/v5/current/macos-tds.json") + XCTAssertEqual(AppConfigurationURLProvider().url(for: .trackerDataSet).absoluteString, "https://staticcdn.duckduckgo.com/trackerblocking/v6/current/macos-tds.json") XCTAssertEqual(AppConfigurationURLProvider().url(for: .FBConfig).absoluteString, "https://staticcdn.duckduckgo.com/useragents/") } From a93d49d35229bf9dea392c78203ed3aa0150464e Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 19 Apr 2024 08:46:13 -0700 Subject: [PATCH 25/60] remove remapping of custom action .blockCtlFB to .block plus some cleanup --- .../ClickToLoadRulesSplitter.swift | 66 ------------------- .../ScriptSourceProviding.swift | 2 +- 2 files changed, 1 insertion(+), 67 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift index 2d9efd7905..036a0aada7 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift @@ -76,41 +76,6 @@ struct ClickToLoadRulesSplitter { cnames: originalTDS.cnames) } -// private func processCTLActions(_ trackers: [String: KnownTracker]) -> (mainTDS: [String: KnownTracker], ctlOverrides: [String: KnownTracker]) { -// var mainTDSTrackers = trackers -// var ctlTrackers: [String: KnownTracker] = [:] -// -// for (key, tracker) in mainTDSTrackers { -// if let rules = tracker.rules as [KnownTracker.Rule]? { -// var ctlRules: [KnownTracker.Rule] = [] -// -// for ruleIndex in rules.indices.reversed() { -// if let action = rules[ruleIndex].action, action == .blockCtlFB { -// var newRule = rules[ruleIndex] -// if newRule.surrogate != nil { -// // if rule includes a surroate, the action should be nil, as it gets converted to a redirect -// newRule.action = nil -// } else { -// newRule.action = .block -// } -// -// mainTDSTrackers[key]?.rules?.remove(at: ruleIndex) -// ctlRules.insert(newRule, at: 0) -// } -// } -// -// if !ctlRules.isEmpty { -// var ctlTracker = tracker -// ctlTracker.defaultAction = .ignore -// ctlTracker.rules = ctlRules -// ctlTrackers[key] = ctlTracker -// } -// } -// } -// -// return (mainTDSTrackers, ctlTrackers) -// } - private func filterTrackersWithoutCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { trackers.filter { (_, tracker) in tracker.containsCTLActions == false } } @@ -118,37 +83,6 @@ struct ClickToLoadRulesSplitter { private func filterTrackersWithCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { return Dictionary(uniqueKeysWithValues: trackers.filter { (_, tracker) in return tracker.containsCTLActions == true - }.map { (trackerKey, trackerValue) in - // Modify the tracker here - if let rules = trackerValue.rules as [KnownTracker.Rule]? { - let updatedRules = rules.map { (ruleValue) in - var action = ruleValue.action - if action == .blockCtlFB { - if ruleValue.surrogate != nil { - action = nil - } else { - action = .block - } - } - let newRule = KnownTracker.Rule(rule: ruleValue.rule, - surrogate: ruleValue.surrogate, - action: action, - options: ruleValue.options, - exceptions: ruleValue.exceptions) - return newRule - } - let updatedTracker = KnownTracker(domain: trackerValue.domain, - defaultAction: trackerValue.defaultAction, - owner: trackerValue.owner, - prevalence: trackerValue.prevalence, - subdomains: trackerValue.subdomains, - categories: trackerValue.categories, - rules: updatedRules) - - return (trackerKey, updatedTracker) - } - - return (trackerKey, trackerValue) }) } diff --git a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift index dcdedc093a..72a553da3f 100644 --- a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift +++ b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift @@ -141,7 +141,7 @@ struct ScriptSourceProvider: ScriptSourceProviding { private func mergeTrackerDataSets(rules: [ContentBlockerRulesManager.Rules]) -> (trackerData: TrackerData, encodedTrackerData: String) { let tdsName = DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName let tdsIndex = contentBlockingManager.currentRules.firstIndex(where: { $0.name == tdsName}) - + var combinedTrackers: [String: KnownTracker] = [:] var combinedEntities: [String: Entity] = [:] var combinedDomains: [String: String] = [:] From 5069df95cb496863e85abd82c36424df8012c23e Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Tue, 23 Apr 2024 16:57:22 -0700 Subject: [PATCH 26/60] remove dead fonts, post-merge cleanup --- DuckDuckGo.xcodeproj/project.pbxproj | 791 ------------------ .../fonts/ProximaNova-Bold-webfont.woff2 | Bin 21776 -> 0 bytes .../fonts/ProximaNova-Reg-webfont.woff2 | Bin 18076 -> 0 bytes 3 files changed, 791 deletions(-) delete mode 100644 DuckDuckGo/ContentBlocker/fonts/ProximaNova-Bold-webfont.woff2 delete mode 100644 DuckDuckGo/ContentBlocker/fonts/ProximaNova-Reg-webfont.woff2 diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 4b773ee0b9..612c3e95ae 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -695,10 +695,8 @@ 3706FCF0293F65D500E42796 /* httpsMobileV2BloomSpec.json in Resources */ = {isa = PBXBuildFile; fileRef = 4B677427255DBEB800025BD8 /* httpsMobileV2BloomSpec.json */; }; 3706FCF1293F65D500E42796 /* TabBarFooter.xib in Resources */ = {isa = PBXBuildFile; fileRef = AA2CB12C2587BB5600AA6FBE /* TabBarFooter.xib */; }; 3706FCF3293F65D500E42796 /* FirePopoverCollectionViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = AAE246F22709EF3B00BEEAEE /* FirePopoverCollectionViewItem.xib */; }; - 3706FCF4293F65D500E42796 /* ProximaNova-Bold-webfont.woff2 in Resources */ = {isa = PBXBuildFile; fileRef = EAA29AE7278D2E43007070CF /* ProximaNova-Bold-webfont.woff2 */; }; 3706FCF5293F65D500E42796 /* dark-shield-dot.json in Resources */ = {isa = PBXBuildFile; fileRef = AA34396E2754D4E900B241FA /* dark-shield-dot.json */; }; 3706FCF6293F65D500E42796 /* trackers-2.json in Resources */ = {isa = PBXBuildFile; fileRef = AA3439742754D55100B241FA /* trackers-2.json */; }; - 3706FCF7293F65D500E42796 /* ProximaNova-Reg-webfont.woff2 in Resources */ = {isa = PBXBuildFile; fileRef = EAA29AE8278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 */; }; 3706FDDA293F661700E42796 /* EmbeddedTrackerDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9833913227AAAEEE00DAF119 /* EmbeddedTrackerDataTests.swift */; }; 3706FDDB293F661700E42796 /* AutofillPreferencesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3776583027F8325B009A6B35 /* AutofillPreferencesTests.swift */; }; 3706FDDC293F661700E42796 /* FileManagerExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B67C6C462654C643006C872E /* FileManagerExtensionTests.swift */; }; @@ -2441,12 +2439,9 @@ EA18D1CA272F0DC8006DC101 /* social_images in Resources */ = {isa = PBXBuildFile; fileRef = EA18D1C9272F0DC8006DC101 /* social_images */; }; EA1E52B52798CF98002EC53C /* ClickToLoadModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1E52B42798CF98002EC53C /* ClickToLoadModelTests.swift */; }; EA8AE76A279FBDB20078943E /* ClickToLoadTDSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */; }; - EAA29AE9278D2E43007070CF /* ProximaNova-Bold-webfont.woff2 in Resources */ = {isa = PBXBuildFile; fileRef = EAA29AE7278D2E43007070CF /* ProximaNova-Bold-webfont.woff2 */; }; - EAA29AEA278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 in Resources */ = {isa = PBXBuildFile; fileRef = EAA29AE8278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 */; }; EAE42800275D47FA00DAC26B /* ClickToLoadModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */; }; EAF52F4F2B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; EAF52F502B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; - EAF52F512B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; EE02D41A2BB4609900DBE6B3 /* UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D4192BB4609900DBE6B3 /* UITests.swift */; }; EE02D41C2BB460A600DBE6B3 /* BrowsingHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D41B2BB460A600DBE6B3 /* BrowsingHistoryTests.swift */; }; EE02D4202BB460C000DBE6B3 /* BrowserServicesKit in Frameworks */ = {isa = PBXBuildFile; productRef = EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */; }; @@ -3935,8 +3930,6 @@ EA18D1C9272F0DC8006DC101 /* social_images */ = {isa = PBXFileReference; lastKnownFileType = folder; path = social_images; sourceTree = ""; }; EA1E52B42798CF98002EC53C /* ClickToLoadModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadModelTests.swift; sourceTree = ""; }; EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadTDSTests.swift; sourceTree = ""; }; - EAA29AE7278D2E43007070CF /* ProximaNova-Bold-webfont.woff2 */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ProximaNova-Bold-webfont.woff2"; sourceTree = ""; }; - EAA29AE8278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ProximaNova-Reg-webfont.woff2"; sourceTree = ""; }; EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClickToLoadModel.swift; sourceTree = ""; }; EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadRulesSplitter.swift; sourceTree = ""; }; EE02D4192BB4609900DBE6B3 /* UITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITests.swift; sourceTree = ""; }; @@ -5107,7 +5100,6 @@ isa = PBXGroup; children = ( B68D21CE2ACBC9E7002DA3C2 /* Mocks */, - EAA29AEB278D2E51007070CF /* fonts */, 026ADE1326C3010C002518EE /* macos-config.json */, 9833913027AAA4B500DAF119 /* trackerData.json */, EAF52F4D2B93AF71003D73EB /* ClickToLoad */, @@ -7952,15 +7944,6 @@ path = Resources; sourceTree = ""; }; - EAA29AEB278D2E51007070CF /* fonts */ = { - isa = PBXGroup; - children = ( - EAA29AE7278D2E43007070CF /* ProximaNova-Bold-webfont.woff2 */, - EAA29AE8278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 */, - ); - path = fonts; - sourceTree = ""; - }; EAF52F4D2B93AF71003D73EB /* ClickToLoad */ = { isa = PBXGroup; children = ( @@ -8729,10 +8712,8 @@ 3706FCF0293F65D500E42796 /* httpsMobileV2BloomSpec.json in Resources */, 3706FCF1293F65D500E42796 /* TabBarFooter.xib in Resources */, 3706FCF3293F65D500E42796 /* FirePopoverCollectionViewItem.xib in Resources */, - 3706FCF4293F65D500E42796 /* ProximaNova-Bold-webfont.woff2 in Resources */, 3706FCF5293F65D500E42796 /* dark-shield-dot.json in Resources */, 3706FCF6293F65D500E42796 /* trackers-2.json in Resources */, - 3706FCF7293F65D500E42796 /* ProximaNova-Reg-webfont.woff2 in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -8911,10 +8892,8 @@ 4B677432255DBEB800025BD8 /* httpsMobileV2BloomSpec.json in Resources */, AA2CB12D2587BB5600AA6FBE /* TabBarFooter.xib in Resources */, AAE246F42709EF3B00BEEAEE /* FirePopoverCollectionViewItem.xib in Resources */, - EAA29AE9278D2E43007070CF /* ProximaNova-Bold-webfont.woff2 in Resources */, AA3439702754D4E900B241FA /* dark-shield-dot.json in Resources */, AA34397A2754D55100B241FA /* trackers-2.json in Resources */, - EAA29AEA278D2E43007070CF /* ProximaNova-Reg-webfont.woff2 in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -10516,776 +10495,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4B9579452AC7AE700062CA31 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4B9579462AC7AE700062CA31 /* FaviconUserScript.swift in Sources */, - 4B9579472AC7AE700062CA31 /* BWResponse.swift in Sources */, - 4B37EE7A2B4CFF7200A89A61 /* DataBrokerProtectionRemoteMessaging.swift in Sources */, - 1E2AE4C72ACB215900684E0A /* NetworkProtectionRemoteMessaging.swift in Sources */, - 4B9579482AC7AE700062CA31 /* LottieAnimationCache.swift in Sources */, - 4B9579492AC7AE700062CA31 /* WaitlistDialogView.swift in Sources */, - 4B95794A2AC7AE700062CA31 /* TabIndex.swift in Sources */, - 4B95794B2AC7AE700062CA31 /* SavePanelAccessoryView.swift in Sources */, - 4B95794C2AC7AE700062CA31 /* TabLazyLoaderDataSource.swift in Sources */, - 4B95794D2AC7AE700062CA31 /* LoginImport.swift in Sources */, - 4B95794E2AC7AE700062CA31 /* JoinWaitlistView.swift in Sources */, - 4B95794F2AC7AE700062CA31 /* LazyLoadable.swift in Sources */, - 4B9579502AC7AE700062CA31 /* ClickToLoadModel.swift in Sources */, - B6F9BDDE2B45B7EE00677B33 /* WebsiteInfo.swift in Sources */, - 4B9579512AC7AE700062CA31 /* KeyedCodingExtension.swift in Sources */, - 31AA6B992B960BA60025014E /* DataBrokerProtectionLoginItemPixels.swift in Sources */, - 4B9579522AC7AE700062CA31 /* PrivacyDashboardTabExtension.swift in Sources */, - 4B9579542AC7AE700062CA31 /* DownloadListStore.swift in Sources */, - 4B9579552AC7AE700062CA31 /* Logging.swift in Sources */, - 4B9579562AC7AE700062CA31 /* CrashReportPromptPresenter.swift in Sources */, - 1DDC84F92B83558F00670238 /* PreferencesPrivateSearchView.swift in Sources */, - B6B4D1CD2B0C8C9200C26286 /* FirefoxCompatibilityPreferences.swift in Sources */, - 9FA173ED2B7B232200EE4E6E /* AddEditBookmarkDialogView.swift in Sources */, - 4B9579572AC7AE700062CA31 /* BWCredential.swift in Sources */, - 4B9579582AC7AE700062CA31 /* PreferencesRootView.swift in Sources */, - 4B9579592AC7AE700062CA31 /* AppStateChangedPublisher.swift in Sources */, - 4B95795A2AC7AE700062CA31 /* BookmarkTableCellView.swift in Sources */, - 4B95795B2AC7AE700062CA31 /* BookmarkManagementSidebarViewController.swift in Sources */, - 4B95795C2AC7AE700062CA31 /* NSStackViewExtension.swift in Sources */, - 4B95795D2AC7AE700062CA31 /* OptionalExtension.swift in Sources */, - 4B95795E2AC7AE700062CA31 /* PasswordManagementLoginItemView.swift in Sources */, - 4B95795F2AC7AE700062CA31 /* UserText.swift in Sources */, - 9F872D9A2B8DA9F800138637 /* Bookmarks+Tab.swift in Sources */, - 4B9579602AC7AE700062CA31 /* WKWebView+Download.swift in Sources */, - 4B9579612AC7AE700062CA31 /* TabShadowConfig.swift in Sources */, - 4B9579622AC7AE700062CA31 /* URLSessionExtension.swift in Sources */, - C13909FD2B861039001626ED /* AutofillActionPresenter.swift in Sources */, - 4B9579632AC7AE700062CA31 /* WKWebsiteDataStoreExtension.swift in Sources */, - 4B9579642AC7AE700062CA31 /* WindowDraggingView.swift in Sources */, - 4B9579652AC7AE700062CA31 /* SecureVaultSorting.swift in Sources */, - 4B9579662AC7AE700062CA31 /* PreferencesSidebarModel.swift in Sources */, - 4B9579672AC7AE700062CA31 /* DuckPlayerURLExtension.swift in Sources */, - C1E961F22B87AA29001760E1 /* AutofillActionBuilder.swift in Sources */, - 4B41EDB72B169887001EEDF4 /* VPNFeedbackFormView.swift in Sources */, - 4B9579682AC7AE700062CA31 /* BWEncryptionOutput.m in Sources */, - 4B9579692AC7AE700062CA31 /* PermissionState.swift in Sources */, - 4B95796A2AC7AE700062CA31 /* FeedbackPresenter.swift in Sources */, - 4B95796B2AC7AE700062CA31 /* NavigationProtectionTabExtension.swift in Sources */, - 4B95796C2AC7AE700062CA31 /* BurnerMode.swift in Sources */, - 4B95796D2AC7AE700062CA31 /* UserAgent.swift in Sources */, - 4B95796E2AC7AE700062CA31 /* LegacyBookmarkStore.swift in Sources */, - 4B95796F2AC7AE700062CA31 /* NSAlert+DataImport.swift in Sources */, - 4B9579702AC7AE700062CA31 /* MainWindow.swift in Sources */, - 9F872DA52B90920F00138637 /* BookmarkFolderInfo.swift in Sources */, - 9FEE986B2B85B869002E44E8 /* BookmarksDialogViewModel.swift in Sources */, - 4B9579712AC7AE700062CA31 /* CrashReportPromptViewController.swift in Sources */, - 4B9579722AC7AE700062CA31 /* BookmarksCleanupErrorHandling.swift in Sources */, - 4B9579732AC7AE700062CA31 /* ContextMenuManager.swift in Sources */, - 4B9579742AC7AE700062CA31 /* GradientView.swift in Sources */, - 4B9579752AC7AE700062CA31 /* PreferencesSidebar.swift in Sources */, - 1D9A4E5C2B43213B00F449E2 /* TabSnapshotExtension.swift in Sources */, - 4B9579762AC7AE700062CA31 /* HoveredLinkTabExtension.swift in Sources */, - 4B9579772AC7AE700062CA31 /* NSPointExtension.swift in Sources */, - 4B9579782AC7AE700062CA31 /* WindowsManager.swift in Sources */, - 4B9579792AC7AE700062CA31 /* BWRequest.swift in Sources */, - 4B95797A2AC7AE700062CA31 /* WKWebViewConfigurationExtensions.swift in Sources */, - 4B95797B2AC7AE700062CA31 /* HomePageDefaultBrowserModel.swift in Sources */, - 9F514F932B7D88AD001832A9 /* AddEditBookmarkFolderDialogView.swift in Sources */, - 4B95797C2AC7AE700062CA31 /* CrashReporter.swift in Sources */, - 4B95797D2AC7AE700062CA31 /* AddressBarTextSelectionNavigation.swift in Sources */, - 1D01A3DA2B88DF8B00FE8150 /* PreferencesSyncView.swift in Sources */, - 4B37EE7D2B4CFF8300A89A61 /* SurveyURLBuilder.swift in Sources */, - 4B95797E2AC7AE700062CA31 /* BadgeNotificationAnimationModel.swift in Sources */, - 4B95797F2AC7AE700062CA31 /* HyperLink.swift in Sources */, - 4B9579802AC7AE700062CA31 /* SyncDataProviders.swift in Sources */, - 4B9579812AC7AE700062CA31 /* PasteboardWriting.swift in Sources */, - 4B9579822AC7AE700062CA31 /* BookmarkOutlineCellView.swift in Sources */, - 4B9579832AC7AE700062CA31 /* UnprotectedDomains.xcdatamodeld in Sources */, - 4B9579842AC7AE700062CA31 /* TabInstrumentation.swift in Sources */, - 4B9579872AC7AE700062CA31 /* ConfigurationManager.swift in Sources */, - 4B9579882AC7AE700062CA31 /* YoutubePlayerUserScript.swift in Sources */, - 4B9579892AC7AE700062CA31 /* PixelParameters.swift in Sources */, - 4B95798B2AC7AE700062CA31 /* FaviconImageCache.swift in Sources */, - 4B95798C2AC7AE700062CA31 /* TabBarViewController.swift in Sources */, - 4B95798D2AC7AE700062CA31 /* BookmarkOutlineViewDataSource.swift in Sources */, - 4B95798E2AC7AE700062CA31 /* DataImportStatusProviding.swift in Sources */, - 3158B14C2B0BF74500AF130C /* DataBrokerProtectionDebugMenu.swift in Sources */, - 4B95798F2AC7AE700062CA31 /* PasswordManagementBitwardenItemView.swift in Sources */, - 4B9579912AC7AE700062CA31 /* NSNotificationName+PasswordManager.swift in Sources */, - 4B9579922AC7AE700062CA31 /* RulesCompilationMonitor.swift in Sources */, - 4B9579932AC7AE700062CA31 /* FBProtectionTabExtension.swift in Sources */, - 4B41EDB82B169889001EEDF4 /* VPNFeedbackFormViewModel.swift in Sources */, - 4B9579942AC7AE700062CA31 /* CrashReportReader.swift in Sources */, - 4B9579952AC7AE700062CA31 /* DataTaskProviding.swift in Sources */, - 4B9579962AC7AE700062CA31 /* FeatureFlag.swift in Sources */, - B6B4D1C82B0B3B5400C26286 /* DataImportReportModel.swift in Sources */, - 4B9579972AC7AE700062CA31 /* FeedbackViewController.swift in Sources */, - B6104E9D2BA9C174008636B2 /* DownloadResumeData.swift in Sources */, - 4B9579982AC7AE700062CA31 /* FaviconSelector.swift in Sources */, - 4B95799A2AC7AE700062CA31 /* PrintingUserScript.swift in Sources */, - 4B95799B2AC7AE700062CA31 /* ConnectBitwardenViewController.swift in Sources */, - 4B95799C2AC7AE700062CA31 /* BWManager.swift in Sources */, - B6BCC5262AFCDABB002C5499 /* DataImportSourceViewModel.swift in Sources */, - 4B95799D2AC7AE700062CA31 /* AppTrackerDataSetProvider.swift in Sources */, - D64A5FFB2AEA5C2B00B6D6E7 /* HomeButtonMenuFactory.swift in Sources */, - 4B95799E2AC7AE700062CA31 /* EncryptionKeyGeneration.swift in Sources */, - 4B95799F2AC7AE700062CA31 /* TabLazyLoader.swift in Sources */, - B690152F2ACBF4DA00AD0BAB /* MenuPreview.swift in Sources */, - 1D01A3D22B88CEC600FE8150 /* PreferencesAccessibilityView.swift in Sources */, - 4B9579A02AC7AE700062CA31 /* InvitedToWaitlistView.swift in Sources */, - 4B9579A22AC7AE700062CA31 /* SaveCredentialsViewController.swift in Sources */, - 4B9579A32AC7AE700062CA31 /* PopUpButton.swift in Sources */, - 4B9579A42AC7AE700062CA31 /* NetworkProtectionInviteDialog.swift in Sources */, - 4B9579A52AC7AE700062CA31 /* SuggestionViewController.swift in Sources */, - 4B9579A82AC7AE700062CA31 /* BWKeyStorage.swift in Sources */, - 4B9579A92AC7AE700062CA31 /* VisitViewModel.swift in Sources */, - 4B9579AA2AC7AE700062CA31 /* AddressBarTextEditor.swift in Sources */, - 3158B15B2B0BF76700AF130C /* DataBrokerProtectionFeatureDisabler.swift in Sources */, - 1D26EBAE2B74BECB0002A93F /* NSImageSendable.swift in Sources */, - 4B9579AB2AC7AE700062CA31 /* Atb.swift in Sources */, - 4B9579AC2AC7AE700062CA31 /* BrowserTabView.swift in Sources */, - 4B9579AD2AC7AE700062CA31 /* DownloadsViewController.swift in Sources */, - 4B9579AE2AC7AE700062CA31 /* DataExtension.swift in Sources */, - 4B9579AF2AC7AE700062CA31 /* ConfigurationStore.swift in Sources */, - 4B9579B02AC7AE700062CA31 /* Feedback.swift in Sources */, - 4B9579B22AC7AE700062CA31 /* FirefoxFaviconsReader.swift in Sources */, - 4B9579B32AC7AE700062CA31 /* CopyHandler.swift in Sources */, - 4B9579B42AC7AE700062CA31 /* ContentBlockingRulesUpdateObserver.swift in Sources */, - 4B9579B52AC7AE700062CA31 /* FirefoxLoginReader.swift in Sources */, - 4B9579B62AC7AE700062CA31 /* AtbParser.swift in Sources */, - 4B9579B72AC7AE700062CA31 /* PreferencesDuckPlayerView.swift in Sources */, - 4B41EDB62B169883001EEDF4 /* VPNFeedbackFormViewController.swift in Sources */, - 4B9579B92AC7AE700062CA31 /* BookmarkSidebarTreeController.swift in Sources */, - 4B9579BA2AC7AE700062CA31 /* HomePageFavoritesModel.swift in Sources */, - 4B9579BB2AC7AE700062CA31 /* SequenceExtensions.swift in Sources */, - 4B9579BC2AC7AE700062CA31 /* WKBackForwardListExtension.swift in Sources */, - 4B9579BD2AC7AE700062CA31 /* ChromiumDataImporter.swift in Sources */, - 4B9579BE2AC7AE700062CA31 /* BackForwardListItemViewModel.swift in Sources */, - 4B9579BF2AC7AE700062CA31 /* BWNotRespondingAlert.swift in Sources */, - 1DDC85052B83903E00670238 /* PreferencesWebTrackingProtectionView.swift in Sources */, - 4B9579C02AC7AE700062CA31 /* DebugUserScript.swift in Sources */, - 1DC669722B6CF0D700AA0645 /* TabSnapshotStore.swift in Sources */, - 4B9579C12AC7AE700062CA31 /* RecentlyClosedTab.swift in Sources */, - 4B9579C22AC7AE700062CA31 /* PDFSearchTextMenuItemHandler.swift in Sources */, - 4B9579C42AC7AE700062CA31 /* HistoryMenu.swift in Sources */, - 4B9579C52AC7AE700062CA31 /* ContentScopeFeatureFlagging.swift in Sources */, - 4B9579C62AC7AE700062CA31 /* OnboardingButtonStyles.swift in Sources */, - 4B9579C72AC7AE700062CA31 /* SaveIdentityPopover.swift in Sources */, - 4B9579C82AC7AE700062CA31 /* AuthenticationAlert.swift in Sources */, - 4B9579C92AC7AE700062CA31 /* SetExtension.swift in Sources */, - 4B9579CA2AC7AE700062CA31 /* YoutubePlayerNavigationHandler.swift in Sources */, - 4B9579CB2AC7AE700062CA31 /* PreferencesAboutView.swift in Sources */, - 4B9579CC2AC7AE700062CA31 /* ContentBlocking.swift in Sources */, - 4B37EE792B4CFF6F00A89A61 /* DataBrokerProtectionRemoteMessage.swift in Sources */, - 4B9579CD2AC7AE700062CA31 /* LocalAuthenticationService.swift in Sources */, - 4B9579CE2AC7AE700062CA31 /* CredentialsCleanupErrorHandling.swift in Sources */, - 4B9579CF2AC7AE700062CA31 /* SafariBookmarksReader.swift in Sources */, - 4B9579D02AC7AE700062CA31 /* HTTPCookie.swift in Sources */, - 1DDD3EC62B84F96B004CBF2B /* CookiePopupProtectionPreferences.swift in Sources */, - 4B9579D12AC7AE700062CA31 /* SafariVersionReader.swift in Sources */, - 4B9579D22AC7AE700062CA31 /* LoginFaviconView.swift in Sources */, - 4B9579D32AC7AE700062CA31 /* FireproofDomainsViewController.swift in Sources */, - 1ED910D72B63BFB300936947 /* IdentityTheftRestorationPagesUserScript.swift in Sources */, - 4B9579D42AC7AE700062CA31 /* URLEventHandler.swift in Sources */, - 3158B15E2B0BF76F00AF130C /* DataBrokerProtectionAppEvents.swift in Sources */, - 4B9579D52AC7AE700062CA31 /* SupportedOsChecker.swift in Sources */, - 4B9579D62AC7AE700062CA31 /* WKWebViewExtension.swift in Sources */, - 4B9579D72AC7AE700062CA31 /* CleanThisHistoryMenuItem.swift in Sources */, - 4B9579D92AC7AE700062CA31 /* DownloadListItem.swift in Sources */, - 4B9579DA2AC7AE700062CA31 /* WaitlistRequest.swift in Sources */, - 4B9579DB2AC7AE700062CA31 /* DownloadsPopover.swift in Sources */, - 37A6A8F92AFCCA59008580A3 /* FaviconsFetcherOnboardingViewController.swift in Sources */, - 4B9579DC2AC7AE700062CA31 /* BookmarksBarMenuFactory.swift in Sources */, - 4B9579DD2AC7AE700062CA31 /* SpacerNode.swift in Sources */, - B62B483C2ADE46FC000DECE5 /* Application.swift in Sources */, - 4B9579DF2AC7AE700062CA31 /* SyncManagementDialogViewController.swift in Sources */, - 4B05265F2B1AEFDB0054955A /* VPNMetadataCollector.swift in Sources */, - 4B9579E02AC7AE700062CA31 /* BookmarkExtension.swift in Sources */, - 4B9579E12AC7AE700062CA31 /* PasswordManagementCreditCardModel.swift in Sources */, - B677FC522B06376B0099EB04 /* ReportFeedbackView.swift in Sources */, - 1D220BFE2B87AACF00F8BBC6 /* PrivacyProtectionStatus.swift in Sources */, - 4B9579E22AC7AE700062CA31 /* NSEventExtension.swift in Sources */, - 1D26EBB22B74DB600002A93F /* TabSnapshotCleanupService.swift in Sources */, - 4B9579E32AC7AE700062CA31 /* Onboarding.swift in Sources */, - 4B9579E42AC7AE700062CA31 /* PopUpWindow.swift in Sources */, - 4B9579E52AC7AE700062CA31 /* Favicons.xcdatamodeld in Sources */, - 4B9579E62AC7AE700062CA31 /* Publisher.asVoid.swift in Sources */, - 9FEE986F2B85BA17002E44E8 /* AddEditBookmarkDialogCoordinatorViewModel.swift in Sources */, - 4B9579E72AC7AE700062CA31 /* Waitlist.swift in Sources */, - 3158B1582B0BF76000AF130C /* DataBrokerProtectionFeatureVisibility.swift in Sources */, - 4B9579E82AC7AE700062CA31 /* NavigationButtonMenuDelegate.swift in Sources */, - 4B9579E92AC7AE700062CA31 /* CrashReport.swift in Sources */, - 4B9579EA2AC7AE700062CA31 /* NSPopoverExtension.swift in Sources */, - 4B9579EB2AC7AE700062CA31 /* NSPathControlView.swift in Sources */, - 4B9579EC2AC7AE700062CA31 /* HTTPSUpgradeTabExtension.swift in Sources */, - 4B9579ED2AC7AE700062CA31 /* AppIconChanger.swift in Sources */, - 4B9579EE2AC7AE700062CA31 /* AppMain.swift in Sources */, - 4B9579EF2AC7AE700062CA31 /* ProductWaitlistRequest.swift in Sources */, - 7BEC20442B0F505F00243D3E /* AddBookmarkPopoverView.swift in Sources */, - 4B9579F02AC7AE700062CA31 /* Bookmark.xcdatamodeld in Sources */, - 4B9579F12AC7AE700062CA31 /* DefaultBrowserPromptView.swift in Sources */, - 4B9579F22AC7AE700062CA31 /* WaitlistActivationDateStore.swift in Sources */, - 4B9579F42AC7AE700062CA31 /* FaviconManager.swift in Sources */, - 4B9579F52AC7AE700062CA31 /* PFMoveApplication.m in Sources */, - B68D21D22ACBCA01002DA3C2 /* ContentBlockerRulesManagerMock.swift in Sources */, - 4B9579F62AC7AE700062CA31 /* ChromiumFaviconsReader.swift in Sources */, - 4B9579F72AC7AE700062CA31 /* SuggestionTableRowView.swift in Sources */, - EEC4A6732B2C90AB00F7C0AA /* VPNLocationPreferenceItem.swift in Sources */, - 4B9579F82AC7AE700062CA31 /* DownloadsPreferences.swift in Sources */, - 4B9579F92AC7AE700062CA31 /* PasswordManagementItemList.swift in Sources */, - 4B9579FA2AC7AE700062CA31 /* Bookmark.swift in Sources */, - 4B9579FB2AC7AE700062CA31 /* ConnectBitwardenViewModel.swift in Sources */, - 4B9579FC2AC7AE700062CA31 /* NSNotificationName+DataImport.swift in Sources */, - 4B9579FD2AC7AE700062CA31 /* StoredPermission.swift in Sources */, - B6CC266A2BAD959500F53F8D /* DownloadProgress.swift in Sources */, - 4B9579FE2AC7AE700062CA31 /* FirePopoverCollectionViewHeader.swift in Sources */, - 4B9579FF2AC7AE700062CA31 /* FireViewController.swift in Sources */, - 4B957A002AC7AE700062CA31 /* OutlineSeparatorViewCell.swift in Sources */, - 4B957A012AC7AE700062CA31 /* SafariDataImporter.swift in Sources */, - 4B957A022AC7AE700062CA31 /* WaitlistViewModel.swift in Sources */, - 4B957A032AC7AE700062CA31 /* LocalBookmarkStore.swift in Sources */, - 4B957A042AC7AE700062CA31 /* BWEncryption.m in Sources */, - 4B957A052AC7AE700062CA31 /* StatisticsLoader.swift in Sources */, - 4B957A072AC7AE700062CA31 /* DataClearingPreferences.swift in Sources */, - 4B957A082AC7AE700062CA31 /* LocalUnprotectedDomains.swift in Sources */, - 4B957A092AC7AE700062CA31 /* InternalUserDeciderStore.swift in Sources */, - 4B957A0A2AC7AE700062CA31 /* NewWindowPolicy.swift in Sources */, - 4B957A0B2AC7AE700062CA31 /* NavigationBarBadgeAnimator.swift in Sources */, - 4B957A0C2AC7AE700062CA31 /* NSTextViewExtension.swift in Sources */, - 4B957A0D2AC7AE700062CA31 /* FutureExtension.swift in Sources */, - 4B957A0E2AC7AE700062CA31 /* UserDialogRequest.swift in Sources */, - 4B957A0F2AC7AE700062CA31 /* DownloadsCellView.swift in Sources */, - 4B957A112AC7AE700062CA31 /* PublishedAfter.swift in Sources */, - 1DDC85012B835BC000670238 /* SearchPreferences.swift in Sources */, - B6B5F58C2B03673B008DB58A /* BrowserImportMoreInfoView.swift in Sources */, - 4B957A122AC7AE700062CA31 /* FirefoxBerkeleyDatabaseReader.swift in Sources */, - 4B957A132AC7AE700062CA31 /* WebViewSnapshotView.swift in Sources */, - 4B957A142AC7AE700062CA31 /* DeviceAuthenticationService.swift in Sources */, - 4B957A152AC7AE700062CA31 /* AppConfigurationURLProvider.swift in Sources */, - 4B957A162AC7AE700062CA31 /* SyncSettingsAdapter.swift in Sources */, - 4B957A172AC7AE700062CA31 /* AutofillPreferences.swift in Sources */, - B6DE57F92B05EA9000CD54B9 /* SheetHostingWindow.swift in Sources */, - 4B957A192AC7AE700062CA31 /* PasswordManagerCoordinator.swift in Sources */, - 4B957A1A2AC7AE700062CA31 /* PasswordManagementIdentityModel.swift in Sources */, - 4B957A1B2AC7AE700062CA31 /* UserDefaultsWrapper.swift in Sources */, - B65C7DFD2B886CF0001E2D5C /* WKPDFHUDViewWrapper.swift in Sources */, - 4B957A1C2AC7AE700062CA31 /* PasswordManagementPopover.swift in Sources */, - 4B957A1D2AC7AE700062CA31 /* BWCommunicator.swift in Sources */, - 4B957A1E2AC7AE700062CA31 /* HomePageRecentlyVisitedModel.swift in Sources */, - 4B957A1F2AC7AE700062CA31 /* NavigationBarPopovers.swift in Sources */, - 4B957A202AC7AE700062CA31 /* CancellableExtension.swift in Sources */, - 4B957A212AC7AE700062CA31 /* PinnedTabsHostingView.swift in Sources */, - 4B957A222AC7AE700062CA31 /* FirefoxBookmarksReader.swift in Sources */, - 9F982F0F2B8224BF00231028 /* AddEditBookmarkFolderDialogViewModel.swift in Sources */, - 4B0526622B1D55320054955A /* VPNFeedbackSender.swift in Sources */, - 4B957A232AC7AE700062CA31 /* DeviceIdleStateDetector.swift in Sources */, - 85D0327D2B8E3D090041D1FB /* HistoryCoordinatorExtension.swift in Sources */, - 4B957A242AC7AE700062CA31 /* FlatButton.swift in Sources */, - 4B957A252AC7AE700062CA31 /* PinnedTabView.swift in Sources */, - 4B957A262AC7AE700062CA31 /* DataEncryption.swift in Sources */, - 4B957A272AC7AE700062CA31 /* PrivacyDashboardPopover.swift in Sources */, - 4B957A282AC7AE700062CA31 /* TestsClosureNavigationResponder.swift in Sources */, - 4B957A292AC7AE700062CA31 /* RootView.swift in Sources */, - 4B37EE7C2B4CFF8000A89A61 /* HomePageRemoteMessagingRequest.swift in Sources */, - 4B957A2A2AC7AE700062CA31 /* AddressBarTextField.swift in Sources */, - 4B957A2B2AC7AE700062CA31 /* FocusRingView.swift in Sources */, - 4B957A2C2AC7AE700062CA31 /* BookmarksBarViewModel.swift in Sources */, - 4B957A2D2AC7AE700062CA31 /* NSPopUpButtonView.swift in Sources */, - 4B957A2E2AC7AE700062CA31 /* BlockMenuItem.swift in Sources */, - 4B957A2F2AC7AE700062CA31 /* ContextualMenu.swift in Sources */, - 9FBD84752BB3E15D00220859 /* InstallationAttributionPixelHandler.swift in Sources */, - 4B957A302AC7AE700062CA31 /* NavigationBarViewController.swift in Sources */, - 4B957A312AC7AE700062CA31 /* MainViewController.swift in Sources */, - 4B957A322AC7AE700062CA31 /* DuckPlayer.swift in Sources */, - F1D43AF02B98D8DF00BAB743 /* MainMenuActions+VanillaBrowser.swift in Sources */, - 4B957A332AC7AE700062CA31 /* Favicon.swift in Sources */, - 1E2AE4CA2ACB21A000684E0A /* NetworkProtectionRemoteMessage.swift in Sources */, - 4B957A342AC7AE700062CA31 /* SuggestionContainerViewModel.swift in Sources */, - 9F56CFAF2B84326C00BB7F11 /* AddEditBookmarkDialogViewModel.swift in Sources */, - 4B957A352AC7AE700062CA31 /* FirePopoverWrapperViewController.swift in Sources */, - 4B957A362AC7AE700062CA31 /* NSPasteboardItemExtension.swift in Sources */, - 4B957A372AC7AE700062CA31 /* AutofillPreferencesModel.swift in Sources */, - 4B957A382AC7AE700062CA31 /* NetworkProtectionDebugUtilities.swift in Sources */, - 4B957A392AC7AE700062CA31 /* NSException+Catch.swift in Sources */, - 4B957A3A2AC7AE700062CA31 /* PasswordManagementNoteModel.swift in Sources */, - 4B957A3B2AC7AE700062CA31 /* CookieNotificationAnimationModel.swift in Sources */, - 4B957A3C2AC7AE700062CA31 /* JoinedWaitlistView.swift in Sources */, - 4B957A3D2AC7AE700062CA31 /* SharingMenu.swift in Sources */, - 4B957A3E2AC7AE700062CA31 /* EnableWaitlistFeatureView.swift in Sources */, - 4B957A3F2AC7AE700062CA31 /* GrammarFeaturesManager.swift in Sources */, - 4B957A402AC7AE700062CA31 /* WaitlistModalViewController.swift in Sources */, - B60293E82BA19ECD0033186B /* NetPPopoverManagerMock.swift in Sources */, - B6BCC53E2AFD15DF002C5499 /* DataImportProfilePicker.swift in Sources */, - 4B957A412AC7AE700062CA31 /* WKMenuItemIdentifier.swift in Sources */, - 4B957A422AC7AE700062CA31 /* SafariFaviconsReader.swift in Sources */, - 4B957A432AC7AE700062CA31 /* NSScreenExtension.swift in Sources */, - 4B957A442AC7AE700062CA31 /* NSBezierPathExtension.swift in Sources */, - 4B957A452AC7AE700062CA31 /* Bundle+VPN.swift in Sources */, - B68D21CA2ACBC971002DA3C2 /* MockPrivacyConfiguration.swift in Sources */, - 4B957A462AC7AE700062CA31 /* WebsiteDataStore.swift in Sources */, - 4B957A472AC7AE700062CA31 /* NetworkProtectionFeatureVisibility.swift in Sources */, - 3778183D2AD6F86D00533759 /* FavoritesDisplayModeSyncHandler.swift in Sources */, - 4B957A482AC7AE700062CA31 /* PermissionContextMenu.swift in Sources */, - 4B957A492AC7AE700062CA31 /* ContextMenuUserScript.swift in Sources */, - 4B957A4A2AC7AE700062CA31 /* NSSavePanelExtension.swift in Sources */, - 4B957A4B2AC7AE700062CA31 /* AppPrivacyConfigurationDataProvider.swift in Sources */, - 4B957A4C2AC7AE700062CA31 /* LinkButton.swift in Sources */, - 4B957A4D2AC7AE700062CA31 /* TemporaryFileHandler.swift in Sources */, - 4B957A4E2AC7AE700062CA31 /* URL+NetworkProtection.swift in Sources */, - 4B957A4F2AC7AE700062CA31 /* PrivacyFeatures.swift in Sources */, - 4B957A512AC7AE700062CA31 /* ViewExtension.swift in Sources */, - 4B957A522AC7AE700062CA31 /* AVCaptureDevice+SwizzledAuthState.swift in Sources */, - 4B957A532AC7AE700062CA31 /* SubscriptionPagesUserScript.swift in Sources */, - 4B957A542AC7AE700062CA31 /* VisitMenuItem.swift in Sources */, - 4B957A552AC7AE700062CA31 /* EncryptionKeyStore.swift in Sources */, - 4B957A562AC7AE700062CA31 /* TabExtensionsBuilder.swift in Sources */, - 9F56CFB32B843F6C00BB7F11 /* BookmarksDialogViewFactory.swift in Sources */, - 1E2AE4C82ACB216B00684E0A /* HoverTrackingArea.swift in Sources */, - 4B957A582AC7AE700062CA31 /* PasswordManagementIdentityItemView.swift in Sources */, - 4B957A592AC7AE700062CA31 /* ProgressExtension.swift in Sources */, - 4B44FEF52B1FEF5A000619D8 /* FocusableTextEditor.swift in Sources */, - 4B957A5A2AC7AE700062CA31 /* CSVParser.swift in Sources */, - 4B957A5B2AC7AE700062CA31 /* PixelDataModel.xcdatamodeld in Sources */, - 4B957A5C2AC7AE700062CA31 /* PrivacyDashboardWebView.swift in Sources */, - B6656E5B2B2ADB1C008798A1 /* RequestFilePermissionView.swift in Sources */, - 4B957A5D2AC7AE700062CA31 /* AppearancePreferences.swift in Sources */, - EAF52F512B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */, - 4B957A5E2AC7AE700062CA31 /* DownloadListCoordinator.swift in Sources */, - 4B957A5F2AC7AE700062CA31 /* AdClickAttributionTabExtension.swift in Sources */, - 7B3618C52ADE77D3000D6154 /* NetworkProtectionNavBarPopoverManager.swift in Sources */, - 4B957A602AC7AE700062CA31 /* NSNotificationName+Debug.swift in Sources */, - 4B957A612AC7AE700062CA31 /* NavigationBarBadgeAnimationView.swift in Sources */, - 4B957A622AC7AE700062CA31 /* AddressBarButton.swift in Sources */, - 4B957A642AC7AE700062CA31 /* FaviconStore.swift in Sources */, - 4B957A652AC7AE700062CA31 /* WaitlistTermsAndConditionsView.swift in Sources */, - B62B48592ADE730D000DECE5 /* FileImportView.swift in Sources */, - 4B957A662AC7AE700062CA31 /* SuggestionListCharacteristics.swift in Sources */, - 4B957A672AC7AE700062CA31 /* TimeIntervalExtension.swift in Sources */, - 4B957A682AC7AE700062CA31 /* NetworkProtectionFeatureDisabler.swift in Sources */, - 7BBA7CEA2BAB03C1007579A3 /* DefaultSubscriptionFeatureAvailability+DefaultInitializer.swift in Sources */, - 4B957A692AC7AE700062CA31 /* BookmarkListViewController.swift in Sources */, - 4B957A6A2AC7AE700062CA31 /* SecureVaultLoginImporter.swift in Sources */, - 4B957A6B2AC7AE700062CA31 /* WKProcessPoolExtension.swift in Sources */, - 4B957A6D2AC7AE700062CA31 /* LoginItemsManager.swift in Sources */, - 4B957A6E2AC7AE700062CA31 /* PixelExperiment.swift in Sources */, - 4B957A6F2AC7AE700062CA31 /* DuckPlayerTabExtension.swift in Sources */, - 4B957A702AC7AE700062CA31 /* RecentlyClosedCoordinator.swift in Sources */, - 4B957A712AC7AE700062CA31 /* URLRequestExtension.swift in Sources */, - B6080BC82B21E78100B418EF /* DataImportErrorView.swift in Sources */, - 4B957A722AC7AE700062CA31 /* FaviconHostReference.swift in Sources */, - 4B957A732AC7AE700062CA31 /* DownloadsTabExtension.swift in Sources */, - 1D220BFA2B86192200F8BBC6 /* PreferencesEmailProtectionView.swift in Sources */, - 4B957A752AC7AE700062CA31 /* ASN1Parser.swift in Sources */, - 4B957A762AC7AE700062CA31 /* FileDownloadManager.swift in Sources */, - 4B957A772AC7AE700062CA31 /* BookmarkImport.swift in Sources */, - 4BF0E5172AD25A2600FFEC9E /* DuckDuckGoUserAgent.swift in Sources */, - C1372EF62BBC5BAD003F8793 /* SecureTextField.swift in Sources */, - 4B957A782AC7AE700062CA31 /* KeySetDictionary.swift in Sources */, - B68D21CB2ACBC9A3002DA3C2 /* ContentBlockingMock.swift in Sources */, - 4B957A792AC7AE700062CA31 /* HistoryTabExtension.swift in Sources */, - 4B957A7A2AC7AE700062CA31 /* FireCoordinator.swift in Sources */, - 4B957A7B2AC7AE700062CA31 /* GeolocationProvider.swift in Sources */, - 4B957A7C2AC7AE700062CA31 /* NSAlert+ActiveDownloadsTermination.swift in Sources */, - B62B48412ADE48DE000DECE5 /* ArrayBuilder.swift in Sources */, - 4B957A7D2AC7AE700062CA31 /* IndexPathExtension.swift in Sources */, - 4B957A7E2AC7AE700062CA31 /* PasswordManagementNoteItemView.swift in Sources */, - B6B4D1D22B0E0DD000C26286 /* DataImportNoDataView.swift in Sources */, - 4B957A7F2AC7AE700062CA31 /* NSApplicationExtension.swift in Sources */, - 4B957A802AC7AE700062CA31 /* NSWindowExtension.swift in Sources */, - 4B957A812AC7AE700062CA31 /* KeychainType+ClientDefault.swift in Sources */, - C13909F12B85FD4E001626ED /* AutofillActionExecutor.swift in Sources */, - 4B41EDA52B1543B9001EEDF4 /* VPNPreferencesModel.swift in Sources */, - 4B957A822AC7AE700062CA31 /* SyncDebugMenu.swift in Sources */, - 4B957A832AC7AE700062CA31 /* AddBookmarkPopover.swift in Sources */, - 4B957A852AC7AE700062CA31 /* QRSharingService.swift in Sources */, - 4B957A862AC7AE700062CA31 /* ProcessExtension.swift in Sources */, - B68412162B694BA10092F66A /* NSObject+performSelector.m in Sources */, - 4B957A872AC7AE700062CA31 /* PermissionAuthorizationQuery.swift in Sources */, - 4B957A882AC7AE700062CA31 /* BadgeAnimationView.swift in Sources */, - 4B957A892AC7AE700062CA31 /* BrowserTabSelectionDelegate.swift in Sources */, - 4B957A8A2AC7AE700062CA31 /* ContinueSetUpView.swift in Sources */, - B69A14F42B4D6FE800B9417D /* AddBookmarkFolderPopoverViewModel.swift in Sources */, - 4B957A8B2AC7AE700062CA31 /* PasswordManagementListSection.swift in Sources */, - 4B957A8C2AC7AE700062CA31 /* FaviconReferenceCache.swift in Sources */, - 4B957A8D2AC7AE700062CA31 /* BookmarkTreeController.swift in Sources */, - EEC4A6602B277F0D00F7C0AA /* VPNLocationViewModel.swift in Sources */, - 4B957A8E2AC7AE700062CA31 /* FirefoxEncryptionKeyReader.swift in Sources */, - 4B957A8F2AC7AE700062CA31 /* EventMapping+NetworkProtectionError.swift in Sources */, - 4B957A902AC7AE700062CA31 /* BookmarkManagementSplitViewController.swift in Sources */, - 4B957A912AC7AE700062CA31 /* CookieManagedNotificationContainerView.swift in Sources */, - 4B957A922AC7AE700062CA31 /* FileManagerExtension.swift in Sources */, - 1DDD3EBE2B84DCB9004CBF2B /* WebTrackingProtectionPreferences.swift in Sources */, - 4B957A932AC7AE700062CA31 /* PermissionModel.swift in Sources */, - 4B957A942AC7AE700062CA31 /* PasteboardFolder.swift in Sources */, - 4B957A952AC7AE700062CA31 /* CookieManagedNotificationView.swift in Sources */, - 9F3344602BBFA77F0040CBEB /* BookmarksBarVisibilityManager.swift in Sources */, - 4B957A962AC7AE700062CA31 /* PermissionType.swift in Sources */, - 4B957A982AC7AE700062CA31 /* RecentlyClosedWindow.swift in Sources */, - 4B957A992AC7AE700062CA31 /* ActionSpeech.swift in Sources */, - 4B957A9B2AC7AE700062CA31 /* ModalSheetCancellable.swift in Sources */, - 4B957A9C2AC7AE700062CA31 /* FireproofDomainsStore.swift in Sources */, - 4B957A9D2AC7AE700062CA31 /* NetworkProtectionSimulateFailureMenu.swift in Sources */, - 4B957A9E2AC7AE700062CA31 /* PrivacyDashboardPermissionHandler.swift in Sources */, - 4B957A9F2AC7AE700062CA31 /* TabCollectionViewModel.swift in Sources */, - 4B520F652BA5573A006405C7 /* WaitlistThankYouView.swift in Sources */, - 4B957AA02AC7AE700062CA31 /* BookmarkManager.swift in Sources */, - 4B957AA12AC7AE700062CA31 /* AboutModel.swift in Sources */, - 4B957AA22AC7AE700062CA31 /* PasswordManagementCreditCardItemView.swift in Sources */, - 3158B1552B0BF75900AF130C /* LoginItem+DataBrokerProtection.swift in Sources */, - 4B957AA32AC7AE700062CA31 /* NSTextFieldExtension.swift in Sources */, - 4B957AA42AC7AE700062CA31 /* BWManagement.swift in Sources */, - 4B957AA52AC7AE700062CA31 /* FireproofDomainsContainer.swift in Sources */, - 4B957AA62AC7AE700062CA31 /* ExternalAppSchemeHandler.swift in Sources */, - 4B957AA72AC7AE700062CA31 /* GeolocationService.swift in Sources */, - 4B957AA82AC7AE700062CA31 /* FireproofingURLExtensions.swift in Sources */, - 4B957AA92AC7AE700062CA31 /* ContentOverlayPopover.swift in Sources */, - 4B957AAA2AC7AE700062CA31 /* TabShadowView.swift in Sources */, - 4B957AAB2AC7AE700062CA31 /* BWMessageIdGenerator.swift in Sources */, - B65E5DB12B74E6AA00480415 /* TrackerNetwork.swift in Sources */, - B6E6B9E52BA1F5F1008AA7E1 /* FilePresenter.swift in Sources */, - 31F2D2022AF026D800BF0144 /* WaitlistTermsAndConditionsActionHandler.swift in Sources */, - 4B957AAC2AC7AE700062CA31 /* EncryptedValueTransformer.swift in Sources */, - 4B957AAD2AC7AE700062CA31 /* Tab+Dialogs.swift in Sources */, - 4B957AAE2AC7AE700062CA31 /* PasteboardBookmark.swift in Sources */, - 4B957AAF2AC7AE700062CA31 /* PinnedTabsManager.swift in Sources */, - 1D01A3D62B88CF7700FE8150 /* AccessibilityPreferences.swift in Sources */, - 4B957AB02AC7AE700062CA31 /* HoverUserScript.swift in Sources */, - 4B957AB12AC7AE700062CA31 /* MainMenuActions.swift in Sources */, - 4B957AB22AC7AE700062CA31 /* WKWebView+SessionState.swift in Sources */, - B6F9BDE62B45CD1900677B33 /* ModalView.swift in Sources */, - 4B957AB32AC7AE700062CA31 /* NetworkProtectionControllerErrorStore.swift in Sources */, - 4B957AB42AC7AE700062CA31 /* DataImport.swift in Sources */, - 4B957AB52AC7AE700062CA31 /* NetworkProtectionDebugMenu.swift in Sources */, - 4B957AB62AC7AE700062CA31 /* FireproofDomains.xcdatamodeld in Sources */, - 3158B14F2B0BF74F00AF130C /* DataBrokerProtectionManager.swift in Sources */, - 4B957AB82AC7AE700062CA31 /* HomePageView.swift in Sources */, - 9FEE98672B846870002E44E8 /* AddEditBookmarkView.swift in Sources */, - 4B957AB92AC7AE700062CA31 /* SerpHeadersNavigationResponder.swift in Sources */, - 4B957ABA2AC7AE700062CA31 /* HomePageContinueSetUpModel.swift in Sources */, - 4B957ABB2AC7AE700062CA31 /* WebKitDownloadTask.swift in Sources */, - 4B957ABC2AC7AE700062CA31 /* ChromiumLoginReader.swift in Sources */, - B6BCC5522AFE4F7D002C5499 /* DataImportTypePicker.swift in Sources */, - 4B957ABD2AC7AE700062CA31 /* NSAlert+PasswordManager.swift in Sources */, - 4B957ABE2AC7AE700062CA31 /* UserContentUpdating.swift in Sources */, - 4B957ABF2AC7AE700062CA31 /* ChromiumPreferences.swift in Sources */, - 4B957AC02AC7AE700062CA31 /* FirePopoverViewController.swift in Sources */, - 4B957AC12AC7AE700062CA31 /* SavePaymentMethodPopover.swift in Sources */, - 4B957AC22AC7AE700062CA31 /* FindInPageViewController.swift in Sources */, - 4B957AC32AC7AE700062CA31 /* Cryptography.swift in Sources */, - 9FBD84542BB3AACB00220859 /* AttributionOriginFileProvider.swift in Sources */, - 4B957AC42AC7AE700062CA31 /* BWVault.swift in Sources */, - 4B957AC52AC7AE700062CA31 /* NSViewExtension.swift in Sources */, - BBDFDC5C2B2B8D7000F62D90 /* DataBrokerProtectionExternalWaitlistPixels.swift in Sources */, - 9FA173E52B7A12B600EE4E6E /* BookmarkDialogFolderManagementView.swift in Sources */, - 4B957AC72AC7AE700062CA31 /* DownloadListViewModel.swift in Sources */, - 4B957AC82AC7AE700062CA31 /* BookmarkManagementDetailViewController.swift in Sources */, - 4B957AC92AC7AE700062CA31 /* CSVImporter.swift in Sources */, - 4B957ACA2AC7AE700062CA31 /* StartupPreferences.swift in Sources */, - 4B957ACB2AC7AE700062CA31 /* UserDefaults+NetworkProtectionWaitlist.swift in Sources */, - 4B957ACC2AC7AE700062CA31 /* MainMenu.swift in Sources */, - 4B957ACE2AC7AE700062CA31 /* BrowserTabViewController.swift in Sources */, - 4B957ACF2AC7AE700062CA31 /* CallToAction.swift in Sources */, - 4B957AD02AC7AE700062CA31 /* MouseOverView.swift in Sources */, - 4B957AD12AC7AE700062CA31 /* EncryptedHistoryStore.swift in Sources */, - 4B957AD22AC7AE700062CA31 /* FirePopoverCollectionViewItem.swift in Sources */, - 4B957AD32AC7AE700062CA31 /* ArrayExtension.swift in Sources */, - 4B957AD42AC7AE700062CA31 /* NetworkProtectionInviteCodeViewModel.swift in Sources */, - 4B957AD52AC7AE700062CA31 /* CrashReportSender.swift in Sources */, - B6BCC5212AFCD9ED002C5499 /* DataImportSourcePicker.swift in Sources */, - 4B957AD62AC7AE700062CA31 /* BookmarkHTMLImporter.swift in Sources */, - 4B957AD72AC7AE700062CA31 /* CustomRoundedCornersShape.swift in Sources */, - 4B957AD82AC7AE700062CA31 /* LocaleExtension.swift in Sources */, - 4B957AD92AC7AE700062CA31 /* SavePaymentMethodViewController.swift in Sources */, - 9FA173E92B7B122E00EE4E6E /* BookmarkDialogStackedContentView.swift in Sources */, - 4B957ADA2AC7AE700062CA31 /* BWStatus.swift in Sources */, - 4B957ADB2AC7AE700062CA31 /* WebKitVersionProvider.swift in Sources */, - B6BCC54D2AFDF24B002C5499 /* TaskWithProgress.swift in Sources */, - 4B957ADC2AC7AE700062CA31 /* NSCoderExtensions.swift in Sources */, - 4B957ADD2AC7AE700062CA31 /* RunningApplicationCheck.swift in Sources */, - 4B957ADE2AC7AE700062CA31 /* StatePersistenceService.swift in Sources */, - 4B957ADF2AC7AE700062CA31 /* WindowManager+StateRestoration.swift in Sources */, - 4B957AE02AC7AE700062CA31 /* TabCollection+NSSecureCoding.swift in Sources */, - 4B957AE12AC7AE700062CA31 /* Instruments.swift in Sources */, - 4B957AE22AC7AE700062CA31 /* ContentBlockerRulesLists.swift in Sources */, - 4B957AE32AC7AE700062CA31 /* NSViewControllerExtension.swift in Sources */, - 4B957AE42AC7AE700062CA31 /* NSAppearanceExtension.swift in Sources */, - 4B957AE52AC7AE700062CA31 /* EmailManagerExtension.swift in Sources */, - 4B957AE62AC7AE700062CA31 /* PermissionManager.swift in Sources */, - 4B957AE72AC7AE700062CA31 /* DefaultBrowserPreferences.swift in Sources */, - 4B957AE82AC7AE700062CA31 /* Permissions.xcdatamodeld in Sources */, - 4B957AE92AC7AE700062CA31 /* JSAlertController.swift in Sources */, - 4B957AEA2AC7AE700062CA31 /* NotificationService.swift in Sources */, - 4B41EDA92B1543C9001EEDF4 /* PreferencesVPNView.swift in Sources */, - 4B957AEB2AC7AE700062CA31 /* SyncPreferences.swift in Sources */, - 4B957AEC2AC7AE700062CA31 /* FaviconNullStore.swift in Sources */, - 4B957AED2AC7AE700062CA31 /* PaddedImageButton.swift in Sources */, - 4B957AEE2AC7AE700062CA31 /* EncryptionKeyStoring.swift in Sources */, - 4B957AEF2AC7AE700062CA31 /* String+Punycode.swift in Sources */, - 4B957AF02AC7AE700062CA31 /* NSException+Catch.m in Sources */, - 4B957AF12AC7AE700062CA31 /* AppStateRestorationManager.swift in Sources */, - 4B957AF22AC7AE700062CA31 /* DailyPixel.swift in Sources */, - 9FDA6C232B79A59D00E099A9 /* BookmarkFavoriteView.swift in Sources */, - 4B957AF32AC7AE700062CA31 /* NavigationHotkeyHandler.swift in Sources */, - B6CC266E2BAD9CD800F53F8D /* FileProgressPresenter.swift in Sources */, - 4B957AF42AC7AE700062CA31 /* ClickToLoadUserScript.swift in Sources */, - 4B957AF52AC7AE700062CA31 /* WindowControllersManager.swift in Sources */, - 4B957AF62AC7AE700062CA31 /* FireAnimationView.swift in Sources */, - 4B957AF72AC7AE700062CA31 /* FaviconUrlReference.swift in Sources */, - 4B957AF92AC7AE700062CA31 /* PasswordManagementItemListModel.swift in Sources */, - 4B957AFA2AC7AE700062CA31 /* SuggestionTableCellView.swift in Sources */, - 4B957AFB2AC7AE700062CA31 /* FireViewModel.swift in Sources */, - 4B957AFC2AC7AE700062CA31 /* SyncCredentialsAdapter.swift in Sources */, - 4B957AFD2AC7AE700062CA31 /* WKUserContentControllerExtension.swift in Sources */, - 4B957AFE2AC7AE700062CA31 /* EditableTextView.swift in Sources */, - 1E559BB32BBCA9F1002B4AF6 /* RedirectNavigationResponder.swift in Sources */, - 4B957AFF2AC7AE700062CA31 /* TabCollection.swift in Sources */, - 4B957B002AC7AE700062CA31 /* MainView.swift in Sources */, - 4B957B012AC7AE700062CA31 /* Tab+Navigation.swift in Sources */, - 4B957B022AC7AE700062CA31 /* EmailUrlExtensions.swift in Sources */, - 4B957B032AC7AE700062CA31 /* PasswordManagementItemModel.swift in Sources */, - 4B957B042AC7AE700062CA31 /* UpdateController.swift in Sources */, - 4B957B052AC7AE700062CA31 /* FindInPageModel.swift in Sources */, - 4B957B062AC7AE700062CA31 /* PseudoFolder.swift in Sources */, - 4B2F565D2B38F93E001214C0 /* NetworkProtectionSubscriptionEventHandler.swift in Sources */, - 4B957B082AC7AE700062CA31 /* PixelDataStore.swift in Sources */, - 4B957B092AC7AE700062CA31 /* WaitlistStorage.swift in Sources */, - 4B957B0A2AC7AE700062CA31 /* Pixel.swift in Sources */, - 4B957B0B2AC7AE700062CA31 /* PixelEvent.swift in Sources */, - 4B957B0C2AC7AE700062CA31 /* TabBarFooter.swift in Sources */, - C168B9AE2B31DC7F001AFAD9 /* AutofillNeverPromptWebsitesManager.swift in Sources */, - 4B957B0D2AC7AE700062CA31 /* JSAlertViewModel.swift in Sources */, - 4B957B0E2AC7AE700062CA31 /* BookmarksBarCollectionViewItem.swift in Sources */, - B69A14FC2B4D705D00B9417D /* BookmarkFolderPicker.swift in Sources */, - 4B957B0F2AC7AE700062CA31 /* FileDownloadError.swift in Sources */, - 4B957B102AC7AE700062CA31 /* MoreOrLessView.swift in Sources */, - 4B957B122AC7AE700062CA31 /* History.xcdatamodeld in Sources */, - 4B957B132AC7AE700062CA31 /* PermissionStore.swift in Sources */, - EEC4A6612B277F1100F7C0AA /* NetworkProtectionVPNCountryLabelsModel.swift in Sources */, - 4B957B142AC7AE700062CA31 /* PrivacyIconViewModel.swift in Sources */, - 4B957B152AC7AE700062CA31 /* ChromiumBookmarksReader.swift in Sources */, - B66CA4212AD910B300447CF0 /* DataImportView.swift in Sources */, - 4B957B162AC7AE700062CA31 /* Downloads.xcdatamodeld in Sources */, - 4B957B172AC7AE700062CA31 /* TabPreviewViewController.swift in Sources */, - 4B957B182AC7AE700062CA31 /* PreferencesDataClearingView.swift in Sources */, - 4B957B182AC7AE700062CA31 /* PreferencesDataClearingView.swift in Sources */, - 4B957B192AC7AE700062CA31 /* NSPasteboardExtension.swift in Sources */, - 4B957B1A2AC7AE700062CA31 /* OnboardingViewModel.swift in Sources */, - F1B33DF42BAD929D001128B3 /* SubscriptionAppStoreRestorer.swift in Sources */, - 4B957B1B2AC7AE700062CA31 /* ScriptSourceProviding.swift in Sources */, - 4B957B1C2AC7AE700062CA31 /* CoreDataBookmarkImporter.swift in Sources */, - 4B957B1D2AC7AE700062CA31 /* SuggestionViewModel.swift in Sources */, - 4B957B1E2AC7AE700062CA31 /* BookmarkManagedObject.swift in Sources */, - 4B957B1F2AC7AE700062CA31 /* CSVLoginExporter.swift in Sources */, - 4B957B202AC7AE700062CA31 /* NSAttributedStringExtension.swift in Sources */, - 4B957B212AC7AE700062CA31 /* AnimationView.swift in Sources */, - 4B957B222AC7AE700062CA31 /* NSRectExtension.swift in Sources */, - 4B957B232AC7AE700062CA31 /* WaitlistRootView.swift in Sources */, - 4B957B242AC7AE700062CA31 /* YoutubeOverlayUserScript.swift in Sources */, - 4B957B252AC7AE700062CA31 /* DictionaryExtension.swift in Sources */, - 4B957B262AC7AE700062CA31 /* Publishers.NestedObjectChanges.swift in Sources */, - 4B957B272AC7AE700062CA31 /* MenuItemSelectors.swift in Sources */, - 4B957B282AC7AE700062CA31 /* FaviconView.swift in Sources */, - 4B957B292AC7AE700062CA31 /* OnboardingFlow.swift in Sources */, - 4B957B2A2AC7AE700062CA31 /* PasswordManagementLoginModel.swift in Sources */, - 4B957B2B2AC7AE700062CA31 /* TabViewModel.swift in Sources */, - 4B957B2C2AC7AE700062CA31 /* TabDragAndDropManager.swift in Sources */, - B677FC572B064A9C0099EB04 /* DataImportViewModel.swift in Sources */, - 4B957B2D2AC7AE700062CA31 /* NSNotificationName+Favicons.swift in Sources */, - 4B957B2E2AC7AE700062CA31 /* PinningManager.swift in Sources */, - 4B957B2F2AC7AE700062CA31 /* SyncMetadataDatabase.swift in Sources */, - 4B957B302AC7AE700062CA31 /* TabCollectionViewModel+NSSecureCoding.swift in Sources */, - 4B957B312AC7AE700062CA31 /* StringExtension.swift in Sources */, - 4B957B322AC7AE700062CA31 /* EmailManagerRequestDelegate.swift in Sources */, - 4B957B332AC7AE700062CA31 /* ApplicationVersionReader.swift in Sources */, - 4B957B342AC7AE700062CA31 /* BookmarksBarViewController.swift in Sources */, - 4B957B352AC7AE700062CA31 /* PreferencesAutofillView.swift in Sources */, - 4B957B362AC7AE700062CA31 /* BurnerHomePageView.swift in Sources */, - 4B957B372AC7AE700062CA31 /* UserText+PasswordManager.swift in Sources */, - 4B957B382AC7AE700062CA31 /* LoadingProgressView.swift in Sources */, - 7BEC20472B0F505F00243D3E /* AddBookmarkFolderPopoverView.swift in Sources */, - 4B957B392AC7AE700062CA31 /* StatisticsStore.swift in Sources */, - EEC4A66B2B2C87D300F7C0AA /* VPNLocationView.swift in Sources */, - 4B957B3A2AC7AE700062CA31 /* BWInstallationService.swift in Sources */, - 4B957B3B2AC7AE700062CA31 /* BookmarksBarPromptPopover.swift in Sources */, - 4B957B3C2AC7AE700062CA31 /* NetworkProtectionInvitePresenter.swift in Sources */, - 4B957B3D2AC7AE700062CA31 /* ColorView.swift in Sources */, - 4B957B3E2AC7AE700062CA31 /* RecentlyClosedCacheItem.swift in Sources */, - 4B957B3F2AC7AE700062CA31 /* PopupBlockedPopover.swift in Sources */, - 4B957B402AC7AE700062CA31 /* SaveCredentialsPopover.swift in Sources */, - 4B957B412AC7AE700062CA31 /* LegacyBookmarksStoreMigration.swift in Sources */, - 4B957B422AC7AE700062CA31 /* QuartzIdleStateProvider.swift in Sources */, - 4B957B432AC7AE700062CA31 /* DuckPlayerPreferences.swift in Sources */, - 4B957B442AC7AE700062CA31 /* DownloadViewModel.swift in Sources */, - 4B957B452AC7AE700062CA31 /* BookmarkHTMLReader.swift in Sources */, - 4B957B462AC7AE700062CA31 /* Tab+NSSecureCoding.swift in Sources */, - 4B957B472AC7AE700062CA31 /* NSNotificationName+EmailManager.swift in Sources */, - B6619EFE2B111CCC00CD9186 /* InstructionsFormatParser.swift in Sources */, - 1DDD3EC22B84F5D5004CBF2B /* PreferencesCookiePopupProtectionView.swift in Sources */, - 4B957B482AC7AE700062CA31 /* MouseOverButton.swift in Sources */, - 4B957B492AC7AE700062CA31 /* FireInfoViewController.swift in Sources */, - 4B957B4A2AC7AE700062CA31 /* LoginItem+NetworkProtection.swift in Sources */, - B6C8CAAA2AD010DD0060E1CD /* YandexDataImporter.swift in Sources */, - 4B957B4B2AC7AE700062CA31 /* PermissionButton.swift in Sources */, - 4B957B4C2AC7AE700062CA31 /* MoreOptionsMenu.swift in Sources */, - 4B957B4D2AC7AE700062CA31 /* PermissionAuthorizationViewController.swift in Sources */, - EE6666712B56EDE4001D898D /* VPNLocationsHostingViewController.swift in Sources */, - 4B957B4E2AC7AE700062CA31 /* BookmarkNode.swift in Sources */, - 4B957B4F2AC7AE700062CA31 /* LongPressButton.swift in Sources */, - 4B957B502AC7AE700062CA31 /* CoreDataStore.swift in Sources */, - 4B957B512AC7AE700062CA31 /* BundleExtension.swift in Sources */, - 4B957B522AC7AE700062CA31 /* NSOpenPanelExtensions.swift in Sources */, - EEC4A66F2B2C894F00F7C0AA /* VPNLocationPreferenceItemModel.swift in Sources */, - 4B957B532AC7AE700062CA31 /* FirePopover.swift in Sources */, - 4B957B552AC7AE700062CA31 /* NetworkProtectionOnboardingMenu.swift in Sources */, - 4B957B562AC7AE700062CA31 /* VariantManager.swift in Sources */, - 4B957B572AC7AE700062CA31 /* ApplicationDockMenu.swift in Sources */, - 4B957B582AC7AE700062CA31 /* SaveIdentityViewController.swift in Sources */, - 4B957B592AC7AE700062CA31 /* AppLauncher.swift in Sources */, - 4B957B5A2AC7AE700062CA31 /* FileStore.swift in Sources */, - 1DB67F2F2B6FEFDB003DF243 /* ViewSnapshotRenderer.swift in Sources */, - 4B957B5B2AC7AE700062CA31 /* PixelArguments.swift in Sources */, - 4B957B5C2AC7AE700062CA31 /* PinnedTabsViewModel.swift in Sources */, - 4B957B5D2AC7AE700062CA31 /* BookmarkList.swift in Sources */, - 4B957B5E2AC7AE700062CA31 /* NEOnDemandRuleExtension.swift in Sources */, - 1DB67F2B2B6FEB19003DF243 /* WebViewSnapshotRenderer.swift in Sources */, - 4B957B5F2AC7AE700062CA31 /* BookmarkTableRowView.swift in Sources */, - 4B957B602AC7AE700062CA31 /* FavoritesView.swift in Sources */, - 3158B1522B0BF75400AF130C /* DataBrokerProtectionLoginItemScheduler.swift in Sources */, - 4B957B612AC7AE700062CA31 /* HomePage.swift in Sources */, - 4B957B622AC7AE700062CA31 /* RoundedSelectionRowView.swift in Sources */, - B6A22B652B1E29D000ECD2BA /* DataImportSummaryViewModel.swift in Sources */, - 9FA173E12B7A0EFE00EE4E6E /* BookmarkDialogButtonsView.swift in Sources */, - 4B957B632AC7AE700062CA31 /* LocalStatisticsStore.swift in Sources */, - 4B957B642AC7AE700062CA31 /* BackForwardListItem.swift in Sources */, - 4B957B672AC7AE700062CA31 /* AtbAndVariantCleanup.swift in Sources */, - 4B957B692AC7AE700062CA31 /* FeedbackWindow.swift in Sources */, - 4B957B6A2AC7AE700062CA31 /* WorkspaceProtocol.swift in Sources */, - 4B957B6B2AC7AE700062CA31 /* RecentlyVisitedView.swift in Sources */, - 4B957B6C2AC7AE700062CA31 /* MouseOverAnimationButton.swift in Sources */, - 4B957B6D2AC7AE700062CA31 /* TabBarScrollView.swift in Sources */, - B6B5F5822B024105008DB58A /* DataImportSummaryView.swift in Sources */, - B684121E2B6A1D880092F66A /* ErrorPageHTMLTemplate.swift in Sources */, - 4B957B6E2AC7AE700062CA31 /* BookmarkListTreeControllerDataSource.swift in Sources */, - 4B957B6F2AC7AE700062CA31 /* AddressBarViewController.swift in Sources */, - 4B957B702AC7AE700062CA31 /* Permissions.swift in Sources */, - 4B957B712AC7AE700062CA31 /* TabPreviewWindowController.swift in Sources */, - 4B957B722AC7AE700062CA31 /* NSSizeExtension.swift in Sources */, - 4B957B732AC7AE700062CA31 /* Fire.swift in Sources */, - 1DDC84FD2B8356CE00670238 /* PreferencesDefaultBrowserView.swift in Sources */, - 4B957B742AC7AE700062CA31 /* SyncBookmarksAdapter.swift in Sources */, - B6ABC5982B4861D4008343B9 /* FocusableTextField.swift in Sources */, - 4B957B752AC7AE700062CA31 /* RandomAccessCollectionExtension.swift in Sources */, - 4B957B762AC7AE700062CA31 /* NSOutlineViewExtensions.swift in Sources */, - 4B957B772AC7AE700062CA31 /* AppDelegate.swift in Sources */, - 4B957B782AC7AE700062CA31 /* ContentOverlayViewController.swift in Sources */, - 4B957B792AC7AE700062CA31 /* ContentBlockingTabExtension.swift in Sources */, - 4B957B7A2AC7AE700062CA31 /* OnboardingViewController.swift in Sources */, - B68412292B6A68C90092F66A /* WKBackForwardListItemExtension.swift in Sources */, - 4B957B7B2AC7AE700062CA31 /* DeviceAuthenticator.swift in Sources */, - 4B957B7C2AC7AE700062CA31 /* NetworkProtectionWaitlistFeatureFlagOverridesMenu.swift in Sources */, - 4B957B7D2AC7AE700062CA31 /* TabBarCollectionView.swift in Sources */, - C1DAF3B72B9A44860059244F /* AutofillPopoverPresenter.swift in Sources */, - 4B957B7E2AC7AE700062CA31 /* NetworkProtection+ConvenienceInitializers.swift in Sources */, - 7BA7CC502AD11F6F0042E5CE /* NetworkProtectionIPCTunnelController.swift in Sources */, - 4B957B7F2AC7AE700062CA31 /* NavigationActionExtension.swift in Sources */, - F1B33DF82BAD970E001128B3 /* SubscriptionErrorReporter.swift in Sources */, - 4B957B802AC7AE700062CA31 /* NSAlertExtension.swift in Sources */, - 4B957B812AC7AE700062CA31 /* ThirdPartyBrowser.swift in Sources */, - 4B957B822AC7AE700062CA31 /* SearchNonexistentDomainNavigationResponder.swift in Sources */, - 4B6B64862BA930420009FF9F /* WaitlistThankYouPromptPresenter.swift in Sources */, - B6B71C5A2B23379600487131 /* NSLayoutConstraintExtension.swift in Sources */, - B65211272B29A43000B30633 /* BookmarkStoreMock.swift in Sources */, - 4B957B832AC7AE700062CA31 /* CircularProgressView.swift in Sources */, - 4B957B842AC7AE700062CA31 /* SuggestionContainer.swift in Sources */, - 4B957B852AC7AE700062CA31 /* FindInPageTabExtension.swift in Sources */, - 4B957B862AC7AE700062CA31 /* HomePageViewController.swift in Sources */, - 4B957B882AC7AE700062CA31 /* OperatingSystemVersionExtension.swift in Sources */, - 4B957B892AC7AE700062CA31 /* ToggleableScrollView.swift in Sources */, - 4B957B8A2AC7AE700062CA31 /* TabCleanupPreparer.swift in Sources */, - 4B37EE7B2B4CFF7C00A89A61 /* HomePageRemoteMessagingStorage.swift in Sources */, - 4B957B8B2AC7AE700062CA31 /* NetworkProtectionOptionKeyExtension.swift in Sources */, - 372A0FEE2B2379310033BF7F /* SyncMetricsEventsHandler.swift in Sources */, - 316850702AF3AD1D009A2828 /* WaitlistViewControllerPresenter.swift in Sources */, - 1E2AE4CB2ACB21C800684E0A /* HardwareModel.swift in Sources */, - 4B957B8C2AC7AE700062CA31 /* UserScripts.swift in Sources */, - 4B957B8D2AC7AE700062CA31 /* NSWorkspaceExtension.swift in Sources */, - 4B957B8E2AC7AE700062CA31 /* AutofillTabExtension.swift in Sources */, - 4B957B8F2AC7AE700062CA31 /* Assertions.swift in Sources */, - 4B0EF7282B5780AB009D6481 /* AppVersionExtension.swift in Sources */, - 4B957B902AC7AE700062CA31 /* BookmarkViewModel.swift in Sources */, - 4B957B912AC7AE700062CA31 /* DaxSpeech.swift in Sources */, - BB5789732B2CC0300009DFE2 /* DataBrokerProtectionSubscriptionEventHandler.swift in Sources */, - 4B957B922AC7AE700062CA31 /* DuckURLSchemeHandler.swift in Sources */, - 4B957B932AC7AE700062CA31 /* FirePopoverViewModel.swift in Sources */, - 4B957B942AC7AE700062CA31 /* BWCommand.swift in Sources */, - 4B957B952AC7AE700062CA31 /* NSColorExtension.swift in Sources */, - 4B957B972AC7AE700062CA31 /* AddressBarButtonsViewController.swift in Sources */, - 4B957B982AC7AE700062CA31 /* BWError.swift in Sources */, - 4B957B9A2AC7AE700062CA31 /* PixelDataRecord.swift in Sources */, - 4B957B9B2AC7AE700062CA31 /* PageObserverUserScript.swift in Sources */, - 4B957B9C2AC7AE700062CA31 /* SecureVaultErrorReporter.swift in Sources */, - 4B68DDFF2ACBA14100FB0973 /* FileLineError.swift in Sources */, - 4B957B9D2AC7AE700062CA31 /* NSImageExtensions.swift in Sources */, - 4B957B9E2AC7AE700062CA31 /* WaitlistKeychainStorage.swift in Sources */, - B69A14F82B4D701F00B9417D /* AddBookmarkPopoverViewModel.swift in Sources */, - 4B957B9F2AC7AE700062CA31 /* PasswordManagementViewController.swift in Sources */, - 4B957BA02AC7AE700062CA31 /* ImportedBookmarks.swift in Sources */, - 4B957BA12AC7AE700062CA31 /* UserDefaults+NetworkProtectionShared.swift in Sources */, - 4B957BA22AC7AE700062CA31 /* NavigationActionPolicyExtension.swift in Sources */, - 4B957BA32AC7AE700062CA31 /* CIImageExtension.swift in Sources */, - 9F56CFAB2B82DC4300BB7F11 /* AddEditBookmarkFolderView.swift in Sources */, - 9FA173DC2B79BD8A00EE4E6E /* BookmarkDialogContainerView.swift in Sources */, - 4B957BA42AC7AE700062CA31 /* NSMenuExtension.swift in Sources */, - 4B957BA52AC7AE700062CA31 /* MainWindowController.swift in Sources */, - 4B957BA62AC7AE700062CA31 /* Tab.swift in Sources */, - 4B957BA72AC7AE700062CA31 /* ConnectBitwardenView.swift in Sources */, - 4B957BA82AC7AE700062CA31 /* DispatchQueueExtensions.swift in Sources */, - 4B957BA92AC7AE700062CA31 /* BookmarksBarAppearance.swift in Sources */, - 31C9ADE82AF0564500CEF57D /* WaitlistFeatureSetupHandler.swift in Sources */, - 3158B1472B0BF72E00AF130C /* DBPHomeViewController.swift in Sources */, - 4B957BAA2AC7AE700062CA31 /* PermissionAuthorizationPopover.swift in Sources */, - 4B957BAB2AC7AE700062CA31 /* PopoverMessageViewController.swift in Sources */, - 4B957BAC2AC7AE700062CA31 /* WebView.swift in Sources */, - 4B957BAD2AC7AE700062CA31 /* ShadowView.swift in Sources */, - 4B957BAE2AC7AE700062CA31 /* FeedbackSender.swift in Sources */, - 4B957BAF2AC7AE700062CA31 /* TabExtensions.swift in Sources */, - 4B957BB02AC7AE700062CA31 /* TabBarViewItem.swift in Sources */, - 4B957BB12AC7AE700062CA31 /* NSWindow+Toast.swift in Sources */, - 4B0526652B1D55D80054955A /* VPNFeedbackCategory.swift in Sources */, - 4B957BB22AC7AE700062CA31 /* AutoconsentUserScript.swift in Sources */, - 4B957BB32AC7AE700062CA31 /* BookmarksExporter.swift in Sources */, - 4B957BB42AC7AE700062CA31 /* NetworkProtectionAppEvents.swift in Sources */, - 4B957BB52AC7AE700062CA31 /* FirefoxDataImporter.swift in Sources */, - 4B957BB62AC7AE700062CA31 /* PreferencesGeneralView.swift in Sources */, - 4B957BB72AC7AE700062CA31 /* PinnedTabsView.swift in Sources */, - 4B957BB92AC7AE700062CA31 /* SyncErrorHandler.swift in Sources */, - 4BF0E50A2AD2551A00FFEC9E /* NetworkProtectionPixelEvent.swift in Sources */, - 4B957BBA2AC7AE700062CA31 /* URLExtension.swift in Sources */, - 4B957BBB2AC7AE700062CA31 /* Tab+UIDelegate.swift in Sources */, - 4B957BBD2AC7AE700062CA31 /* NSStoryboardExtension.swift in Sources */, - 4B957BBE2AC7AE700062CA31 /* PreferencesViewController.swift in Sources */, - 4B957BBF2AC7AE700062CA31 /* FireproofDomains.swift in Sources */, - 4B957BC02AC7AE700062CA31 /* Database.swift in Sources */, - 4B957BC12AC7AE700062CA31 /* HorizontallyCenteredLayout.swift in Sources */, - 4B957BC22AC7AE700062CA31 /* BookmarksOutlineView.swift in Sources */, - 4B957BC32AC7AE700062CA31 /* CountryList.swift in Sources */, - 4B957BC42AC7AE700062CA31 /* PreferencesSection.swift in Sources */, - 4B957BC52AC7AE700062CA31 /* NetworkProtectionNavBarButtonModel.swift in Sources */, - 4B957BC62AC7AE700062CA31 /* AutoconsentManagement.swift in Sources */, - 4B957BC72AC7AE700062CA31 /* UserText+NetworkProtection.swift in Sources */, - 4B957BC82AC7AE700062CA31 /* WebViewContainerView.swift in Sources */, - 4B957BC92AC7AE700062CA31 /* BookmarkStore.swift in Sources */, - 4B957BCA2AC7AE700062CA31 /* PrivacyDashboardViewController.swift in Sources */, - 37A6A8F42AFCC988008580A3 /* FaviconsFetcherOnboarding.swift in Sources */, - 4B957BCB2AC7AE700062CA31 /* PreferencesAppearanceView.swift in Sources */, - 4B957BCC2AC7AE700062CA31 /* NSMenuItemExtension.swift in Sources */, - 4B957BCD2AC7AE700062CA31 /* ContiguousBytesExtension.swift in Sources */, - 7B7FCD112BA33B2700C04FBE /* UserDefaults+vpnLegacyUser.swift in Sources */, - 4B957BCE2AC7AE700062CA31 /* AdjacentItemEnumerator.swift in Sources */, - 4B957BCF2AC7AE700062CA31 /* BookmarkDatabase.swift in Sources */, - 4B957BD02AC7AE700062CA31 /* ChromiumKeychainPrompt.swift in Sources */, - 4B957BD12AC7AE700062CA31 /* WKProcessPool+GeolocationProvider.swift in Sources */, - 4B957BD22AC7AE700062CA31 /* RecentlyClosedMenu.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 565E46D92B2725DC0013AC2A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; diff --git a/DuckDuckGo/ContentBlocker/fonts/ProximaNova-Bold-webfont.woff2 b/DuckDuckGo/ContentBlocker/fonts/ProximaNova-Bold-webfont.woff2 deleted file mode 100644 index d88ee9b097302d947b633f601e93637876a071a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21776 zcmV)AK*YayPew8T0RR91096nG6951J0MRG_092*`0RR9100000000000000000000 z0000Pfe1fFMpR848aNxp1{{fE24Db#VhBtLgk=#33WBB#f`u&$gIWLqHUcCAhb{yl z1&Tlig>MXkUmKylC(zsWf^gda(61lXjulVFExfyBgQ8NBGaC`Z#sOnHJ}vwI|F22M z5v_7t1^oL2tth0Bg>DpzT?Nfr)x@sF?#8KugOvn{p0_YrsEf3UERO?(Wd(}f^Cw+? zkcaW<@jE9$yYt7C%RwBLy*4<(@J)G>gSqiTgJw?%W$8>ok>sYi;3)ax7dWVv`InI; zZ5c)v2cN?$PXs-JRuB11ngyCRvt_riqtAW4Bt{fquxvuHMPTDHMzV79{yc5-{eO2H zARtj9;#oynXrseIXRTV9%?8T~)|K#3zXtkt|K0^yxCj*)55SH9T!aEt1Tqr|RM3F7 zl~r^D;5Mny-qEfnFaA7$28x_7DhPt$^Zx3 zt<78+M0n!e|0fL==G(|u@Iei-Va?_+&j04LBttUQmzqTe$x7;J-JO67OAtqwz^!l_ zL@)#vT7LIE?GFEs+_T$XwK(#`18MOCT=9Zs4;2{Zz0uug4Pw7VK)CSx3Po*$wgw%-C$xxs0I{x8)`~N%bdnK#1 zt7^Gv>}PxW+u5Bht^5MuKOsCY6o&mE5F8r#|4&z08iMwb8b~`t8kC00M45vqfA`n# zr6h8+L0-m~Y7g-L*XdU)MIjGsmMH)4(Gs8jbG6lMQEsv;Bf{F z1OCn@uq@eQ>nk|qWPvI6=gBZEAyy1UO;xd7$57PO!b88z+536W)k-8XgF4~TG)3VM zit*&%=GtRJshd?y+#M5hUe3hn*(|&6|70=JI@Aofb)UKKyCh) zsb%_p_YC+OT;39t<*uxWR0oZ2up8hErU7u!Gjua+upsZm11;bQpFZhFJ3W?VaBbo!=vIY@E2FMS20kzaXY# ztkmZ>x6l9Ia$o7UHxUt$uml;x5OT`zTlTa1()!)(EIOd5fT2VZmG{2x7~8**u73As z;S-DmuF%y>4iEq~0FnUSvANRWbksKhIditH98{ZnJL^Ed%~@Fsuk-rKy8&8b0RTWS zHXii6kCmB2OyjtMnaB5PB@8h$_vO#Z;l24F2{ny zN9USkkuO51kY?oLgO`5IK?qM@Wn)0NqSW#sGMoA~VzH;KZ*)}bjM8!!V#;oDIMxn8#RzA;@EaR?J?BoXCy3F)t^zi~A{FE3Te( zZvyLs1Ypq|g#sQ$7@z7vcG?x)o`(ch4}lS6TqLMPM048&j3N>V5|MC6B-|GX4;caJ z=;}^}O>xhHWw0j=9w?UZ4rK*jr?rUivdAsBXLi>;KcmW*gT*c(bCO&qh&mxS#ad!2 zlDc9-kU8nO{yc_wq49`Fu--wLs^70NL`9Pkg#FF2WrM9%L#Z!4X%;(vz-awl(cg^} z5lU;Wnh9&f?iLYGe{bU{8=9=@Fxf;3gxDH^oB{OEUBBz=YXXL6d?Cn;c=HB3Ry^rQJj9)ZAzOWSspUVb(1dMi3`IQNvxo3aI12TqG)YmG4t&^@77)`xIYf(_OHwK(@=Rtb zETB>%Yn2qj(rD!A;TfX$qlmkEX4IFv@5_{jpk%}Ii^~fZYK00(v2Y#x3bSq&!M-B| zmAvs@8nKzEG-2HO6W($@zL&n62cU|<11dZBr7Xf40V~TFn6(w$P3b)Q8Y)S5Icbs$ zMld3RJ}K}C+@L~yHC1k@vbwzW!&V57Rl}V^%#y>>;b0DSgCd*2J6kT^l0N%VA4!0N zUaTdu_~`Orz*Itdq5+QsseImSjZ-{2jOU@f{^@?ZQ&3;;s&pm!&}Zd18Kdyf_+)e( zsv~tMvP}s~MCm7LU5jg)LThk{L*{~Pd6GWG>A6Hw#X84DgWbYPw!&BbLV7Y(Md1b( zct97m9a!m-g(Vq!pQa-%<5VIBDiCUF=+tztJ0z8nWQN{wEy!GICPv$>sQ2}gCLN-d zC~NU|EHCU?UqI3+IjQtaUxl!5QaccTq$23k*RdO^BXD4Z7-_gFI3-(+fOqcSEDvfh zm2eJ;fJGrhBk6GIQ4CmOVR2~jumo&o97(v6c}c;OiZ6{oI&Whk(-NCu4s2dx^DV-) zn7|U)@m&DRM=w4&7+zxV`0yqoq#zPa%tRuZ5<`XImkfW5M8T9ohqHjLW2Ydg?nHg% zNTQaRp?h-R6OMNr9l;7|kSm{20XbV5l`3Oa&Zr5qri_{~Yc5U;DlMtC;-@u@He$8q zuN^ZxBPSodsr7xE3^PW6w3n!b3Ki$e+cIkythJHRHo|NNqdgS%Q#-`p5&n)sjxjpU z*y-(tn@r584`ULI579*H<0~3+DNp7AAtFQt0z;~sE7S1|Gn%AveUyPJ_!dhrbz5O@ z*Nr>N$jdd3gr;PMax`CH){MlNC@Gr0h#T~aP^%DZs$bucYF{b^Q+WApp~+=lXCcO5 zoC1a9r6X+;XoiHygI1NPVFe3;2xj^!&^3sAz04cG%#_r8 z{y>VYjO!ebA5lVhjg09U3)d-tHe)Sn2PeD?Sn%A3j+9773drR2Z=dIxhs>3M6)x;1 zR43p=mo1{sOliKa5luPgX&V|BwhN^RMCEi)qjajOj`S5-g}ihMtLr;ZCCkD6^*uu} z%^q1ZQRvIW)IQ55-P~)r;Q{l!-+6QWaL!H_#gWv}lFVkrMAq351EYi8kosEZM#sFk1s1~CUQ7e;7AUFb0nyJY~smV09 z@@a(A3Z%3=T3eZvi$)ra5W%zsrEe>loJOi{l%!Nw|ePlM8S zQ!PnNWNOz&7KWMRhzwTbAcaJ4XBNfNg*st@RK7H7X zC$8ARnL8EB&zo{D+x_XuF9cm83lC|OgdG)h?2Kf{ID9>D?Aftt)HxjzoeC7|{tq5r z(p>vGd13a=%c*n`5>+fXLhgyJk)t8GuzZ99BpXU&l;YvBEajR&q`egd4I2(zyx_q{ z09VY|A)9LrL0FsEIvWwT^0pna7jlTeVaO2z$4&wkjvih_cxZwt;XOnI#N;Fdg0X~B zG2aMtcG(I;Ak0Y?P~tk2382hrDC=5Tzbg95c{=Ju!k)-D6Ix&85JV;E4V1Y8WsNIC zp`>jfheiO604ah%x5HTFv=j>3g&He%LUBv-rkau8x6o26t+mlsJ9fSO$=_XTo%J@@ zXshk^I^?h;j=?IB0Ai)UIKY#rm??I!+gskJ38a~uobt_PJ&`3Kgp_pBJxg~O8y<^z z!6m3th95KrFPcDjW8@Ih>Atmd*c+aW;?SkerxKF6A_T3MyZc)rQ_OQEX6a!`UW|n* zk^fv5H~)?n+iDT6(^lyK<5_>RhZLkmhpt#_NsO4x8Fy!^UDqCr+y#uljOPZH`j~u~ zkak4pV0Wj?kuU-?Ow=IBHLDXW$Yumw5q#v-2a;g_NU(n<+`kg(-?HI`qY-EXRYN#W zP!h8&g#w{a5Ir3VtqD#9KsZ30$RLLp1H*I^)g^!VD+0}75z{b*LcwX^#^3;J8%*0! zvSo1qfhNGnBP8UP(|Gv22@5fal$U2{udku@h<59qw8jIO;6`2v=ymMH60~_OsSEvT z_2yWqdmB`-%YD_?_68Gbrdr*<^#3(cxGmhOK5q+1x+IZ&0;X7{wcDE2X@U(tId`72YzI);iVEv4>_YnxDG*8Ap{x&4B zDKA@Lj7cMSs?pW0d*zN+^1XXI&Y7b!a*VTbptAZbG?TXhV`Bpow=p9f8H>T-Fg=ZQ zEc8JlO&THEj)G!gpk<(Cu-LqtflxCHL+W_e%QzeujK*|r#=A7mSr>Nx5Mbbng~J9o~u_1@%7N3wP9Wxc0;gSERz=5e%UxVrx{x}LOjZNI?W zNvwS?9xun&AGYRt`>6F;?^vMphd}DyBUJ0M*3T_(zt|LkUMXyyD9F+{qfnwoGh8Ay z8g+(6p=1hEX-kD#wW`1xjwG&EQ9W3dZcrG_GEuQ(PoD-3_=(~Ols#k7Dz}Lye`D)V zCA2)^IF#B4cSybO$E4i0+|B<(Wwp)inQ~V=K~;1c5vJzV z9KmC6jbB^~yE{=%JtPEGA+JN>7-*t)LsuwUQn5mLcAURF=*nAB#mXvIL@6{|StWt$ zK)uq6SLE4-$GnXC=p%5pN7_z!T}ya2;}V~h>6<4YSc%snTjUk&SubH>At)9xE^9F0 zO5mbdl_M%F_M(uTsm=kIBW??SwKa>=sGf-PYo}FJ@UNzS@ zw|DmsZTI-}{PG$<|H3RMgfkL_#$a)H0+B>^p}4xaQ)wP_h9{Hd#pZbX`1<*Cd3-?t zU{qmosa(<2-qz81wX3K1hra&7fuZ5iv1{WK*Jq|@=Kyi`kcdB0T4SP~B}L{i7;^)< zgX$9i0MKw2*1Q>7DFOg+oO@U??CaS_Z``!+jWWefY$2 zlc!9bG;6#ceJMLHC@fuR@U*9%4ihxSq1g#rheqDKGK~dV| zxCM(20%fA#ffB7JHNacYbP&ASRo|LT*;!N(x8M-%XRz-Zea90B)4>GNc0#n~!cv%{ z>DY2@jMpI{45G|JTw;k#o$1ST)QjjTFBgqR6bBtA9Z?&%&aIQ9#rgDrG5Agu9-&a; zg2px;g0eE$a1`}2>h;O@8%q_Xp9-8bt$9=WM$=p98g%0c9RwJmMa@YP-ozC(;|!DQ z8k*(-TDX9+9o#G{El(PA4Ap=uvmx9Ce6}I_=lSeqiH$JPnAgpE0hN>_qM(hD+pMs2 zkptb4u&VV%c0p-$1og7Mu~BxNXNt5K!wF+e95g9)JWl{_)SN?_2Q4FRb|^@^z0i0l z3rW@mEue6z$c-h7kg*u>m9_%IB|^*r5B!PBn~Iy!oj=iQZmDzhpskPMqC%s8pQk2S z8-fobkt88RM><3uv7%y?-5!C8Gc>NL=8j@nso-P0}$3sJ9h zJsaAIHzRbEzIUKg>_^Kvrxu)|1}Jp5bhM@jtvDCd5JBh5XUIWIN+h9D5P2dJh?WE( zkmo>kRsd+qba9zaJExaGb8Wwh1iJX3RhfJ%6iSQC|{s5d~J54naPq$CD(9m7LQI}$K3uo@zGNEJJJeBX;Axk55Zk)BXy5@GuoMDs@W+wQ`j!Y2|Kc0hhA86qX>8JDBO9F+??@%k-_SQ_$p2G`UZMWnDxg#oVWa3lzMx`+wbs6J!J~1mqG9Motv1r0(5?!qes4V)m$EYY zGJFqSa#F;ti1iLOO^+zo25^5vHdZVK8qugeiJ7-b1dHNVYSu1w7F}feoKj=>k`(-+ z2BT*Zauhpb}$r#fku8s_gFtl@Er-*w$f9G7Hl@TP?1 zY;@0ooHEZC?HTZ^Xx0X0RKD5MH&h2%Os>`Z(hj2KwYD3gkmYGv}Y*1Tzjxqt_~1uEHn~=BWdE1e1?qCtQ)L9=5tJO!jPfWc@t(N zOy*Iu**HzlGgzF(#tydKRX6+fH`>Lu z^!bBCwi~9Jc||J6&^Lxme}@?KhE{1kbdrCkljg`d91y=RT)Q_6-wQ3R%^Zh@p}&U< zp*d&Aj^N0Xp=Ln;6bE3l8lWN1{2HEUQu}03Tj@`-Nmvl z>*%DpOs%`KyV#&6VAbsJO%hs4F+@FvnlC;POi|1{>U2XVX-V>{U8NvP>|ijz3^O$_ z9;_%n59;{i7#18DnrNzqW|gHaq_5dxR8Hbg*wGOed|1djh8P!ZEZ5e^>dd3qH|tRn z(+?g|8=Rw~2x+I#>*CC1b7KfXFo6Lt5a`Cvqp<)Y1~t_kD=>@U61BjfOh~>kF21gB z1bz8SFdS-zF?++f9Ey;r*UraTEGd`R82%zZ!%myVT$bsiIga3ygE&KnE~bk}mGQ`% z!eXx&zj{UO;K2pGiuM>&odCc!U`V5U)S#Jr@QOVWRSd>sUN@cI@Ow?ag*aN;E|n+* z9#(MjXj)9Sl0t01>Tt0D4bdFA~M^rfo8# zm7`4-qiGF8s({8>s{?OkKdZKh6uUW=vRNieTav%YZ8_fap4@^T7YuMW#aHTJ$i}@9 z)=Lop(jgMXQTd|5S3OLQ4TS1o*ri6^rbb3hBZ5QEiwhG{>O@c)i~9=JJUXTJT879J z)c<7LOoazSBk`>-MFt>e>?xVEQRpjGOA5ZIX`#{LPTogW$#pP9(c@x@DQ1g=2}Ys! zS*Imt?p%rbb8}$lNq(V93drP^7E8nygrEmd7#(fgr;2NKoH+9ADV$~bKKBTxrxg`Z zjUZHG{s6{Pneh9E8`+x;R7E2PesK^-rSYW%s(!+~=zRqd8iHVQ!yd*fqxX0hGFkFm zr0|tRbQXcT;zWk}Q+gM(f>;DyvX^k_B6(ycs+T{ZFe#SM7IL{ZXQ&wuN8KAy@<8?a zYgmR_G1!qUn_S4G6f=rGZWvQy;(l>>H7q!NN^fbGD-ke{DB_WLk9}%r=_PdzmsX1P z9a`&I%{64)^47(SKr2{%?m(@^qiOB ztNBCW6_|3DndpXs)V4dR{w4PTfbF-=A%_g7pbiEksI}lvn{ddx zArx=`OrkW{Y-Udt4jx}ZUVId6Ji79sy&&V3B{zoBgAg2-)aPOBb|Ldi$kE>ItqYwx zce>rl*?POR-JHz2B9rC0%&3lvw}B@yV*q1|i45JM_~R(l8WuaS*b?;I>4$seLI(HG z>DF00LbRv?$RI-u>Fm7mNQfig*`43*FW-&MSh3{Dl4rM!;y7k4YFxKkx$@-J=eFJq zPo6!P`q#L$@8wlJ>w^EZp-$0|lWjDuilh$uP@#I&hpTrx9tDdkD}y>^-!viKYwmM3DoxAzC)>P&`r#8VMI@=@o(;MDL$E?gm5hAiwtKy_VZ zl5FOvX%(#R#x@|$I+)S}!~1I6hfA`L>3WOMYPaOl@H!c=rr4;qSnnSjpDG=x^LPr- zDNn7Dtq8q#%e<*$B>Of3Z+EpT^yNzG5u*~3+V1o}a-|=?)yKUVCqJx40sadv9dOSc zlseKcuLYA8l4szN(AqbF@)u49|W_@+`eVhtLqa?w5La zsfC=nM}3(497p-UW2;BpwjNgkXM*4^Gzc{rVq8t|n~K>Zf3=}_?30k?h2 z$D#b@u)}!MD#n{u>Ye_JkS$yhe=PljdW3mBrm-?SYnWTQonVN@i58-&+f7GrOduMp z{p@$lQkWs45k0Fz%7*QEkR&Y{j$hd?=*@py#!GTH0@`nr506voml>=e_Q#xL-$ACh z!_3>5FE-ekJ2e;hWjG!`kM-a%JYL?52GEG(v|FZl=AqW6a`f5n%+J8QDb&N`R-JIL-T_G|61eo zZtkZAAc8pwX-U!!fcLMz{O#1_!gZ4~`&)mvq{Ce`)Lhl+WQ{d2;{cOx4`n(r&Q$F2 zJRzH1R9u-`lvU16U#Xj!9;d1n8Keu5qUogle`fLYWD;7ma$R)vq?~&dnZo%k;_{(#VT-VFsFBI7 z!20vht`Q=hNPLrr7y80|qlZswI?@wKM#}^b3X#8K7nVBxLb6Pj3^AukH z81}PtS(SM1X`*x)_qia_Y}tD>D{qP_E>$H-Z~gt}qE0;`EeuQYPf500$Q9^ZaY_xt z5J_PeL@H@lY)5bZ4uG+Y|M=^fG0>=(8+}@Msp@rb@sGKkhcSA$U;yCywY*=iUax0I zTnGd+vwZzlgf&$#y5JGCt3hLM`QBseKFO*>H9e|!)@`x>{M!KWq2f|1TWsB$pYZp z=NF5Sy45TLB0s71dZuNnX;ovAuTNPmebg*KFltsy_bKyDs%}U%%d~92o|JN>|0Av1 zt5Lfc5$pv|14X%1aH1kAy~*ZK0^OW;)(}iPOE-rSP8u7(r5KY=K~8b?=@eUHhG$Sn zrf0&Q`!%s zrQ0+>t_91K@RyRgEzHjMl2wbMUc*W+(Oe%Ij|efQ;H`{;z_ii|a!b zw&z$DJ40lbFK;hsK~cY>u;g&F)1;p}_nDT6SUO-TiY5z9->XrdClEw`RmBoFoAS(6 zkIl2|XUux8Xm_VlmXZ>So$+3QUX70SlsYfEtb4Xbn)C8OUIHhVqJ1jjdB{h`5vwu- zJroE|G0I_lhFAg04<;xV~%7FXiZHq&qAC@xz9y9B@YW(z9ns1<6ra)@&-~qiXyQ*u_%@&DJlSe6e8R|du?w>wP?n^m>(bn;l89;vIe4~hu`dE zzxke`2cs>#z9h|4bF24;%wB`ozu;OA$eq_5E?u)HUw!c3_s`<<&m+@+y!~klzTrb% z+HNzGZ_5#FUx~{vc^C@cb?*kA)cxblGp)?L4>`7!E^f%ghi|zbb|%>MP6s=pwu=w0 z@8Zh$2Q7}o9E{P+8J?A%HNLQpBBTi9ielE#KNy+*d+>pM+IeDNrJ=kbZS{UY#WU+o z3km+_hv;TvAB5B!gr&FHtTPq{uvIpx(H!>FRC+3GWmnH=tY(~+b zO@}XCBH)kPgzudk-xpSM2R}T9z4VrCX{<@(pSzkU09%ZMDn zixQn0e7v3N#fkm6NZ*%hP_`(9=_wBJf?^DPXt(tT=L6!F+aoip@q_kuJ>iBqQ#X36 zRWXVeRvQ-B=i%Pg=LIjjN)|5|QE#``{osp-{I|Rh7TmmWoro zk-95Q?z;FBkyGXjqdVT`#u0k`=U%@i{WRVDfJ*+E63Pp8MV{U)@pL)mq;;T_r?o^k zf%TlnoMhQ9p89w&{JW(NVF4^Kfn~&k=jlOBEMzTxbu~?WG7A&%K0C0LH5BXsXlJ>e zZqqtlt>vn>&Wh3p7_$gRHlG~BKKbXE;gcixpODTlSN~i*B5#{10UU3+i(2nT7YvJ^k|J%W*Z2^1kxZ05!$?+n0&c;`^=_Q`&u89!_|{72V+!kc7dFHoGf?mS(C^kj z2J5Bsfe!9n^`x+Z#OnIYtm?+ZJeRPpD;M48gG$yxMhNtqcc0G8bL!n--9fZhUs4{t&ohNd8@2j0r`^+BS1d@{Yg(MX_? zPz6+BDS5{p#Opf|Txnatt-isfKE&QwOGw|bTZaqvOEgOb z%)*ZaghUkiX)&!x6X6lXm*w)?>S8jH;fjpJe!H?)TrYEu!W~hB;x0E7HOv+@wsgoR zfGmMOlTD1r*eHnTcV#Ir-j_8resJ@Yg_EYT%a-U#4bfpKuMVGCUdO9~j+EqrwpV#= zxXh$%U%HY6`Gj&)V5k94abr^}5pYCxYFGcR{Gro9DAk*;j%Efpdn~kQH?bb{f@&3_Pc&j!u$0sGGi&Fk z77=&WE~s_MAogxf{<6uDEJ?q_p2WbWR`{9tnN%j>NKAW4pCoH?xQgdw?<&kQ1*moQ z0jN$LgGWt^U6{C}%ASf;tP6whKWs$ipK^o9Ae{*(Ue%Mgn=FZN4}+&p)6BLkK>7s1 zF&D_XOD1I9WgQ04J~K!wvR^};u90O~=-cMc__5`0s_S*B;) zXD>mXL5w?IXlW71$t}H3a8CoGE;s>3j(H{szGdaDQ9j5wgz$@91vdh%lXEHH)Ipp7 zWK|yNO)ZQx`K8*+in@4wb3+QYrnatDUd>2rX=Y@|E9x%S$dm9*4Qa&c%RS`S;wwq1 zMRjp8#dRr3#dUF)sh6uYSJ?8f?P24?4a1H5jrZH`w?xF{ndbN9A6V1>yek{7MYeVi zu>9ye1We-(@&H=nOd*?1(#(2_sH1&1auRZA+DnwN%)hP%rkyvxO=BDxZso4rO;pCK1t)g70HaV>(teC}5 zPvglm-Q9+U!1ZWdut8?vtIp0>ftjJ!1@BLfJFoxyX?QB8;7xpnGpT4^S#xP&xsaTR zOn8%6bba{W|BCi(@&fWByo>Q}bg-Kv$~M3vgqV^L)Q1Q>!*s9-CdsDIWRHCBeBnf( z71qwygm@lKf)jL1ZE&{fP9KP2?}=eV(R+l5Fxv%y3~RMk8FXZTmCsK8J_6>9kAC|) zlDHHTvy?dU_1oykw{NK7nn$aOn$^`B#pR zL^C!;8%tYvJ;;#t$#iyCd&V_2$Hug@JZo-vAkqn`}Fmk;D(%v!&5&rVIACH&e#;EeJ()5 zyWGsVbUOrz3bwrHXTkCqymFk(^e_cmdRSp49F9+1Qufb^p5$OsSRmyP5ttgnjGU0x z#{7Vfjy(=~PXXy5b5R7JzDNG(}kfRTS=Kuu<%S{_T^WC*T{=L{yajG5f1Pyy9(PP}Djopb@4=Iz~;B!pgQ zaW8@GZ7*dt*pIUQ=$E3tX}pY7L=Gss@!DDkQEbn#&Z5!jX{LVD2rY-`-<|QK2wNRG z0;67>T1C{c^+3_8L(9JP^A?^D9cwei&xewDjKHQIk|jWkUC-XXI{_NoC;NLT z;Iur5@S{s}y`z9Of40*QeOqp|G zjxai(#whJWVaKPy3hZS@wKz*nzZ|)1^VPVFVz!$_M*^NE(5$_mY+H_V`wvFPgZoCO zg>-k52PfF+nQTt#V?@F^e}tDLut5rtNwSG)h^a|I$_emimg9D_nQU8zX#RS0W24~p z(Pu&NEPR(@UbB}Gn6HKbO=$&phhe=IP(Lz$P|LKugRewABZB{v<~K=)NAD@82la=v zVf*rl=MO1L! z;JjX}SXW<9KSr#lr)Ll&)H|xf+t(>=&PM!ntZg$V| zvN^bkny|me-8_0iee5h#{2byZ)^`?0_(^fgyX3*o57EO9W*gHp>br1t*`NXGgP$Kq zfmz3l9R?hL)9e8B5-$+h?)!=sDFp7n%B%9NxStYyBPBUx;eKMd?*VmdKXI@pGbYs6 znv!*=|LdE_(KGm@0*2SssW`JQ*u=9WnyWWuB8 z+$VFHV@`I)JeBR!Q1|zV%~it==E!g;)QI-wJGN@`2KNuw1;stHkqpzqjBE5(R_)!! zeR0~P5}-5Z-pyK>vo$ozv2(JOrXB`7>CQrecY8V)#(VvOd>L&X7Es-Q4+t4TBuU9x z-r+rkar|B{*ERPPAhXMf+R4efvtzXhn>frXN*81Dz(2(G;L&%90pBH#q&*496kWr{ z%hkp*qj5}bSt#PrMacyM2UEIm@+`>?!#0Hl#Yoc%4(r(xx&jjSX0oNS^AGgFj>boi z-_0{y=cFqQNwv0W6qvaNRBotti6UP7eR`^}Uc;fasN^xx{C4NsfB)aaGGlbSg6WP0 zsfMKHFpqG@;> zv4;qTlE?$(3r+2zRYF;4jmj>leB9jS=*;xk*A!QfTXFay+W^bC%y)^;Ym1Ayi!Eby1i`JzxKl7J~>tH5A_G)S-JnRvJczsnbnEslSO6{ zfVBerw{YfO(tSTXdY~JG{Jg;gcvVe5+F@`p@h?BLSIg3Ni&^z{HKOI~QWKi}H#cGN z;&AE_<@0X~5@ni=sKX{^J~2c2?8{{ry@<)_CjKNR)T`pB?^H*vHess6Jb7+1z8rEe zuAPK=Oh|Cg2Kf`5(NBJLLi-ULO)}i)&n#*Y#}+kbWfV2Uip{QVc!tkU>X7U)JW~WL zfp|p|l>6f_#E{X{icsVEb_5Jj=8_+hE&gy z>Vd{^xfs_7k*zv#3G2^AD^vKtV~c&v{Y0ZPGtB?vOi6z^hfiucQ9Z2G4Bv}Ii+rqz zW6qVguP{+FS1i22!-zR>fAPo=fV)3!{kd35s0iN>YeZt}%A{B;I&AYI4JQ+K2f)cQ;fY>Hy6sgO%+nRkE{*x{$4e z#n;9iL=1iSgOg?E1* z0Yc0ulxdm?0#_EPTjvPR>${6pP z4kzxMV=3d(@?=}+1KbOrT>3CrX(T-cFAjyKZcX|^Q1s#nPmH@2vJ zB80~#@v$7qD5}GTF|*9_qN4p6-@oPOT_5J}C5OtI-J2Mr3?vPMy_4~An-G%qRUhZ2 zZQp8b5WDGKwcwG~oJq522mOx&PyQf%;y7j$dfKq`S8lpUQyIAoiCzsLg}= z^_!e|>e@#|W4!v`^`)$+LyQ4(qkaZj)xbNf;@;WieMct@HBL{O3iZYrG&;yF%Qg^C z5rSsGujePryGYk*FX6L74;)@I-pv9}!j1Doa2mZMj&zZ$T;pCe#fWa#65)hk?Ws4&#^b}@D7KE z@5{>e-Mu^L`P|d>AhdJ0zc`A zA++}ge}ec*w;`DCk?!wLqSamCT&mPn{uZGk(ZFmItA?;z(g&pFViUTCzex!!3^vMS&WrkC^nMZuKUJgGzjDy$hDx!7ndF3kWYxrm)Etm@Hoe zZ+Rg({2JP9qHJKP_k`8m@^#_4r-~7^QhDg-oRvWpqmDL5?2M_bdJ^Wwuf0x}5=K(1 zAetD)JBWRHf+VcV8%$U#9DEcsKnmeg5S;t-Jiar2c*8sj1@X^xL zzS64Z#Drq|>qrfZs-N#jOJWz%2BMpIP47^E8)V8N)ug*w^tmYk0w9NPO&J8dTY;>~ zXwwTK!g4V4SJ5jI1yvXMI(j5eRo9<#|wSV+_;|~O<7^^8pRKwYG4TxB~s#4RpUO;FKQf094B4m>FC=t9o zFEK?pYpRQa5eUhoi`6ISTGQVOaLXikT>%fW){;nPWN z<9}II>G31}=qpACZsKZV%AX|S z;=6DD-}4(T&pmy6HCg9>25n#U&Hp%mnF*J^Ka=Ty{qnPReGjUrc@1g4`uUwk^ozxO zarjvy6&=joPxy`RT$k&+*Dt}FFU?P-@G(SJ-Tp(;0 zxF7AB0>GVw)B;fy7~9;-URV^n10KiZN{x1EV4ZFN4{?n>Zk$oH8yH{&bgJs=RolqZ z@>_#%3zj;ICWP&X8k$>5662=$lJptUpKn1uE)V>gvTuxO(8R?h6k&=IN+^)XvLDd3pf zEa8cIC@V8;1~7Ujd1_N(M(-M!h-{luU&nw6Vb?g~o;V`boT&3HLiBj#n= zJrmK*FNVveSXu%HzDf)~jE6*GQsRnL+xikCLK|zH?|x=fLj^t|!$dk&)7lk@wacEE z1kV<|EC_9d?~5ia7-_?e&w%cP``AlZNCft?zDC`&b;8P?+@`O9(P4+--azNd5EG%$ ziM6p~PjVDD7-=tVO3tt5Qh=JO^K-@w8!ND>z(g>CX4B4>Ir0ebls%S_-9W7ZE)CG= zEW2zyW=*1vM*qZ9)X|*ntE0yca>MX8sb08k4pRkxw$L5y`a1h6?B?fZe{0ho0@(SE zq~UG9^9Du~kVVw|7sV*klkqog>{kA|TPRUV`C)>-UyXv;l=<{sNBE`;9iRJ;4bZ zjz`4GpaaW{^-;kc&5U;++@oM}6`naYzD-&tCK-ejL#A3OdeyI?u?UHS1O!Q;URDBj zm2O>yjuF-$LGUr2fQc(HRb99H_OHJ!ClU!O7|`nfCc`iMo&Wyz6Q!OpN_?l=Y|fvc zugl?ws#6Aiy|)!*omBdHrp+90BMn;*;Dn4Sjfnw-!i0d76h=BFD%wWbD+YSK?vog1_OwLmNY@1Y+cU z#}S_d#O7?N%bZ9|UU_wml_DLN_ian(C>yUR$GL3QPs~8gV%qy@#efSC7^H>C4RPIH z*Agr=;mkNjS<;O$^>o}u#mzCbtO8A7JiaPx>E%!gdn2GDG34pNq6|zwg5*rO8aSINx`6uBgs*{&%gx@$F1wF>@SQ| z+jZB%wqpvS2#I{ckVs^~kC=WljEi;$Kx$J&v{5b+3{bl)hs8Rn2*n&liaOQGU?}j0 zOhqj`K-><<6|%4xqwR3zg%&I{D0WM-ad)ONUl9X_i)2W($^#-soA_c_Cb~5ak}N?8 zyH1b0@G_&;dY+_qnDDK9HtJq+@05PQr>6q_UO+VQli=B0hr`D~7I;&8| zr%K>DJPc(6+B6Qn0`8O}4Et##2R(VS-(~qi-sM20dKJfDAif|Pu%a?IMTfI8a%D~+ z7xq-BiOsVwXiREbO;vL1tyrmGh&3D(5!&o9DVO$2G=v9Y1T;q+Au9JiHylGFhA&Am5)>_SLvjO}sO zTUa|v>%!A%NOVaygu~!9eMtLROjGV$vik#o(Yh&dP3W}slrqvuTP@CPVQDJyh-ohd zHTQUmmbV^T5?lA3rfJeU-s}Am3Y-mx-@X10>zgzdHC3KX98jq6)o! z+vBkp2nA4b78{Vf#>BiV9qhJLRke^|OO>MH7A_!VE5L1&Tpt6s9rIW4oAGg3mm{h8`_EQxEFg} zmGF{m&V8$n>w=RB&Tm2FmW^vB&?v5~4x@{bKx)Mj z!-@1=w`n15-=w~H*9}l8Z$w=j86S3;(ZdY<5RWguCAUur8==avUc1uI?=s_CH5-pfd&o$oJWZyYCU|ueL)RmtVa#YOwZM1 zdjf~SCs4>63d)+2l=QBE(llgVe0NiqsY6Hg{m9(5p2{xN=LWO>_$j)d?lsPqIC^N% z*&p9LZS5ZPxQKAB(zM$dYq9~=6e{a}ePh5Iu>EJ1dUwk*i-@}Y^fIn)jPdLe#d+oP z!_Va{Zg|<1l~wP55o7f8j(9m9opkdXKDQ2+52C~#+YmL)%}>!;ToDuzEP$oxdDb{6 zt?ijFiboeEqp!p;9!BGCq;T1LJ1*w=!?gu^6{8YIz`8gbW$NbX1MiE2Fq+|@B8C14 z)(bN@vpeqGq5%)k3wH0RMqm_i?m0gJqnwD^6T%^}O^`)9kd396qO)p9NvKZ1rX5_X zLN?9}5NMMShikWi^Fm8PS4)l1YPZVZus_HDub6OeW_3jOBVVkKfL3=R5bR0r{j!3N z;uLUr!I=kVw_hC|T`fb!YdrLB!@Bk{bbS2zPhVj+3#7fmhE2}84Y|q-c@2#O2$80L z*nq8|x5Pc5c*i*A6lul2_duy6#M{2w_ptz}vuMA*PI*j1XhLAMdT~ zpItn^@<@Krx3WsJoLP9o)Ri?U1PJf(Yj+T!P zxv6?d)ay`JE@Gf07#(U?rWj{cheJK2=Ee*XLM4O>kh+j6`6*ESjhbil#l{N=hO2QY znbbMbQ%;fNnRB`E+#m&!6*4=hZc|b}eY}tm0@nl;0&QRB{wLdlHEP0yfL#AX(G)h# z9ZN^a8uV=&Si|Iq8Fd`pb-`Js0phF?a20a43&-$^?U-oS9YN$4H$oOIr>v!p)x@YQ zcF1zqaRG2y<(~C|Its#AgD!NNF7j&C{z~N8Rgl|8W@yU6ns;A*TT;1 zSpdR92mubTN>eKqS_-I`qt&dt@|v9ivB2Gu4%ctk)l9dp%NFRXB=#G$7iAm*v%#olgSD6nK8N>2fCU00qWlXDju? z-H5}NU9SDo8ox%UH6FSlu_>Z<0N~vwMHu4;M#a59Xp$84ryCNK?z;8B_IeZ5v=NQ4 zDXA!%^%80@z}(n_#m1|T&TsOgwkS%qyhA`u13SyOD<6A&7y(*l;AJ55cB= zohqd#+-fmV9+mZc1Ph!v!wv==?V!VydMqmK(@y*H{RvDbPRdx0K}BRNGpIJEIk-%y zfhqmuq!AL9fW6&Os%pxhUXMZU7YGf#gM4o#GUC6Wr%qQWJsIH zA1gqcM21Liq$zzen>en@b=0p_no-}78pLP;!D5%t6`fJTT!ev)ZugW}j&_2VXs{Bw zK#F)TU~fE(I!}~96S_w$)o{<(TfNz?B}GO#+jWnCUSB1pNLcp5y%2lUfoN!UtowHf z0eTW65$m7j-!D-o1A)@vOcw7<)mSt0f-U*<7qKMO43PuygvDs)KvtTW+TjO~e{}w&9SH zSa%UtMl4HAHG9McLIK6T2cN2Qy2n1{2jmNGnQcp z2XAtBS`d>v3-2b`(3lv82m1@9F)1F4LJlDaE_wsl@C}N-@I`B4noX0RRgxglcs(^U zKbWpxBlvL>B(DDUtvTH7KDunNzOdqZ!)r1UIC@_b=ih9#lOul#{#s$j_)55?R3 z==db^+hyU~=kAwB7MsPw-p)J$B@S5p+s=OBP)6j5TEF%8be?RB@4ZV;&sAuv6#lSc zvhbzwy~G{MP6<76tE_*aG* z{sVxgkNYRLPd|Pe(SKRS_YSuwhn&m(Yci2WweV25(v$E0<4mdV{Tou~r3lz%Dc`ke zYMMKhy}2i7>fVy#)y5j$+k{uejS7i&>KtvXv@KV!kkvyVY2g0lZos#=d0L=%54e47 z6#n7qx@wqr>k9j=?|^52ns{rh*r&c$fWP{UJl4#!_kjIa6${^^RiC`&|3UQt7FyYq zFAwsR$`kc`n;!SoK)voic@kYhzE-aASd|Vv5MQIKP2rV~E}AufwtX%Du;YcqjVP{L zY}C{zsDT!)Cn~>vVwYJj&alVz0bpZi8^~AmEUZzwDd>D(9$2%WQR7846&vm0iuh(U z**m=c&st}f1H@KM3G#ssScDp4Dwn-ck7GF{=1-0yS)t4eMTlyNT85*CyNvjg%kZf1 zViBWVqFY8xt%rcLT=zZ4nLtl4@%P}lt;NPDc1&z>f!9Swv2FB{X0Ke7N{?7(l>dj~ zEz^}Ka6-!IWg6x5GL3S&VCW?>%&;?GmPLPh4B>O466iULCgmtiDiwj&C}Y3v+Qta9UO-F7g1I*c!Yf79Px(Blw7zJ zl0+G~PQbl6;<~jm=qH@UzR+bPvCNXGpTYA@y=RlWCQvM!5qc|1NMsU`58sceX!>f+ z#$d7AAC6aIELn0sXBHKXc4045Ps+WtOHO@9UZ0q(tjW}20`&lZcfcghtMw>98bd^w z$`7BUJ1eK%<7?blj(N!0RXKGyjpUg*%2gplr5kr|KjY~1VP0s;3*sz+cp@Z-SfJHJ zX_St*u{#ZBgdGT7KM|Kza>D&nO}GYxCRHfVg{-{13&)WA{hgt&GPP=?3genEK)^;i z=9ztZlB)_nsjIyj$oEu0ylN7)0Z~`g#EJW+ecb?^MTc~F4=J$O{s9bewI)tk2N+*4 zXnz)pkhvUHpt78vh9>cwdKOa5t2WMrsyzCMMb^D}XH3KKlW(_|vzZ*#BTpu?SU=yO zPRlpnb82)p*;WXnmO+%K?dK{Xt)9T^@M^NeV2$u#4SK;O)iCiK6iMcYtFpuPAr23D z-rWa^3>CJZS+YGVfs^FZjff3XL3bH%Pcu&IvHsCCvyFhhS?r_7tZ|!Y8{6=_i<*Op zx*MLTl7x*B^zfc$2e%uAQ!q^)n9GPl%dUuRyYirCs`(4_ie1=2*;MO{9axGLU@}9r z@}AL!u3feS;xN9vio97xK}Bz7T=UfyUj-V*EVZn^N+^TzaKNAV+4kJ zhl*15Y&)9~GXmPfPr%T_ZL~D;?zyEz>6)zRjSaBSoEhM&-f^5fS|MuIL}BbhAe*$r z0pAHZv9k%)u{c)cxb)6QqYIqr8cBLdq(xGIVEyz$NWnB*->|)RX|w~Mh$Z#;7;{;m zmBV=kNhzu^b72u_OGqnyXbwME>elc{6F;wo7pIV7~ywDT5mbjgM zc?W80D4fZVHnqO+fNty8SCbntQoC;_1Cq6?3P1xnHa)8C1Pj-cLV11cQtRWUwtcD} zRjWS8j11zM1;U%DwJvHXaN3v@ujthf>-6{)P_!;v+@ZZNE?W#+J#EtsSbwQ5`X}+w zc0-byZh|Z5m2u2LaJaalzD9(={rfrcZJVgy%zS!y1(`R`Di?7~nbtXSqSnchd*Znq z;Ezh60k>>tgoQYXn3y22EUOGU9PNmf((`CD!yl*ZvUU};2$j*++JgIkpo~vh@An#p zVeI-M{1y9jV*eFa+U7+bQ=(oO<)U(ZEJJuV#BAZBdk5|M1j$iax;7R3DK)k7n(ukZ z8`pt)@Bl|$hVYbxN|A@acpWWIfnaTd5)9JZqdRvcqlZy_oaQ8=M;{+e20VQ^8ArPY zyz|O@N>)|S$MRdKLs{&4)twjnPW7WkH;3iL7+lO0Eo~1Uxr13d41w@^P?~DjwYLf7 z<(zZGMT?H^B&A0Mu#l4L8w&B%Celc|TNTu78rgGn-QNGxVT(rKXEPPUA9d~v^z05$ z6`}kGregs>H1T!LZT@J=pZO0MqMW_|wL|Mwjq(vz2pa|ffB^g6zheRW@z7e}tsDaU zqu%6(Y;VI4C3tM(uj|;-X<45H)hnsJ0OGnRba7V8Y_Ht>{GdF~RBT929<)!pRPom= z2ISwYEsvtkveae~b)2d0sep%Dt2IO2l6zKqfi+(1uMPi-ww$=nlH2tf{%wUub^}g3;v#URz$62>Mk2;?>lVG;ja0x z-NMgfwO7+jrMpT8gW5=8H8lTo0t1k1S;}p2`v(<+x&t|%qBfj^OASsI*rDs$dd`6g zaDP$N;`+=QHfRjzBhk&;MNzqxP~J+lKJ`$590{;!npZW=Laf+rq&p#~q{M}tws%=< zr>j2WFum;`-WLNZ0>S_yD;|*GUaqsoFCPe5S(Yv~ zbY)Nsb_SsTqb!)gA$J;f_uo+DQ3p3nmZx<$3=ViM8H++sil8hTk&~<M(Vpu^~_i(!p%?dN{=d~%`4wlC71bxJ|B zKauzJ?}KTt*TpZTg0}fHsmG$)VnOW@An#KEkH}0YF1m)?@~tA2iOVE-0w8DujHn{* z0zM=ZxR4N@LJ1>PNCaPtC6dS^iINia5{od-O0<|XOKi%VEphPkyyV5VNqJsJRiQvc zyNQs2;tVkWBt*$1VQeiWLcD5;6lkAB>E(;W!o(Vh)-vu%Z2Ighaj0^$UPrRUDet=_ssPOlHe&daF|jex)}28guk}vtI%L#he^^saCH8MiGY|I)LJX zj$YOE9S-Ri1F+ajR)D==+aG|5mY#u8vienbX^&((q*@b`vdA<=Z!jkR?iw@MG{iK< zo;wm@M%PX!#4xL=$|t%@hz<=lQrTi<7_VM0fvv;3>4epLNWoxfC2E@Nmes0M>-Nm* zb*gn_1U@bsFIIvciUYr+ANzBBaT%l6&r?;7Zk=+89*lvfwTX$zzmr>zJ|FGcy6TQb zZJahfHX$Jnwo|o2qY&o8)U0ltz$#R#sdLv`4t59^CTW>AcurkoFKtNe2TTtA-5>ZX zUq)dE?H8WrdY@V?*ukeX)?GzWSPYw|BMIP}X~`=L;R8xu6HXHaa=#?O8h2o^BVSP95u{Qmt1SSFYf{IBV+4ex7#$ zVEo?xDcEYyZvjd~AQDkPl)fI7&P?R;YUC4?%}tkrD5ubU#LLf@njZ~+i~xax1Pc)= zOt=V$sli4Z7;mOgj<_EOV1YHh`RcnR);r~d4La&%k_u;3 zI_b0v&N}D3SM091=#q^(`)IQ3uDYhm8}E!(qgt(cbs8+<&{Y>sF5Pw0Lr<^u(noK7 z_1Di%iw!iuAcMX2-fnK2>~YhrIEZ+Nj|9jY2^A?;qEwl36)M?mi|uweYO8II8EI|! zu-}1D>C3oK>!(J4ncjJK?=Dq_NxQMYM0ej?t$&5G#le|+HQ8@5f+F7}%ynaP4Sa)d z^i6)OALqyW34Wq)_A+M-`qaQJJ^Wrp2Uk_+oY9)aS;>7~H1)YSYgTNv&|2ghebZkZ zyHn5b4;ruFxhP({38M+?2ESB~dIz|7PJuho`QI^H=(u~-*&N)BIoverC^jcyw9WS!_ZzUp&hI7{UGICEK zMxLGP+Apm~Wdtco-sgte8p74hP+O;XK3GsXA2TSQPlhy}&xN!*KWfo*$4;Z$!ksJt DVo^e4 diff --git a/DuckDuckGo/ContentBlocker/fonts/ProximaNova-Reg-webfont.woff2 b/DuckDuckGo/ContentBlocker/fonts/ProximaNova-Reg-webfont.woff2 deleted file mode 100644 index 7c75b9edc25c6a0566346908d6e7e1e0cbc5c310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18076 zcmV(_K-9l?Pew8T0RR9107jeu5&!@I0LCBy07f$a0RR9100000000000000000000 z0000#Mn+Uk92zhi$t)a<6b4`bgJK9Q34~=42nvFXbb;+03xiky0X7081BWUEAO(qU z2Ze47fioL6vlrO5jADMbL+pv&d8R1J8Et43wR^LwKKuXwgym!mVbx(%O?y8}Y{4RB zCQ5M1fvhwdk}43ZS3=4zjhe`ro$9zlDbxugzSjpBH*FXeJ+NabxS>NcgF5?HvMfMb78x*hz{%xu^ngAM z%i3jXhw+a?DZr<6a~SrHgP0~oTw_4{i0EIRrkFwi$LzphmD7qJ0ymsf_8!vHW{i?M7h*5W1U@0&)Px zfBt^n^CQAiH{eQ&D6!d0_lRW+e^Xzh^uUpT0s!#;-_o*rQc!4xR*rLKTD!K(nPW5b z?yoOxKwt^;F(Cf=IV+nkwhKof5rt%S=!x3bOnh^>vs36h@6x8{As{$bJZoK}v`7QvSo_<0EfEV5^Y(+Fc11JJeJYuzIYb-~t_Zi}I zU!iya1rUIWR|vT}>79#NcmQlm*UO8AaRregp8e4&(D}FEfxZ2|X~hP%4;R8JGM>v6 zp-0sS%ut70T$ta~3@|pqmQwQU6EEz?sDaZZO}8{Wq!GTD!2w}T)5vj%>CDMHSO~b~ zQGt~OqhF5zlV+wccG}~ZdPuoASYzSw+QiS#*8eEC+#YuuancN>jK2@FQHIN-5nfKS z#AW|AQ-nZn8>rhHbGL?~PWP#{2Ey0W%r&T;Bx?QT023Ckj}g`!+hP0)XYnv>u=kOT zg^^d1Dh`}%mS%ktD5=;_0u%uR`wR^UWW=?Hlspk;t;;mS4b|rIVUgi5PHb~Xu_mYOK3+|}@Sq4Mn5 zu51@jyq|VOWMOWdGK#Cjjs?19oQK4TUMLJzX#s77%NC5+!6F4-e+4R*`8XcQ5p($} zI_`@EuIv4;7cV>sJlXI5cy!86Ltv((By00TM){zHx~<<7rz5M3X8KxZKK4x#zMb)^ z)j2jkEL$ZorT1ur(4~aNvB?-lRH98HR_7E`d*J|O+O617yxPx2xg|-Ii>34b4ovItRWO*R2x)tK81v%3d>a!6`anft6xMCiP#ka{( zTNB90ydzo@)faTy=~Xv5Zo;T*PJUg=L~LGpXAW55NQK==yluYGgDYnlWQU{CDq^^; zr%P>)6kj12Vhuy6QrENO@+{5cF(|ucujjKV$X!{o#sK0Jk((nln8>P#tIdTU*DP1x z2OmrbJJEk3-?-0SkNJFExVR?wvY3t1N_P~~K;q=->w1YY0^^0Sq01*~W2t1>8cBF! zfh%rP?E!1!>JG!?M1azKYCkkz+{!o6kSA3%#LB!e;fjrPEB#?-a8j60<=D+zsUbrG zTk9;veGu7b;3DUM^CcL~4-2Zq_op6Flde??pz*=uKA|{$|4LEj8e238OWakNCm}aE zi6Q8Cbb(Tl-?Rb$#taXGdf_hdJN9|!XC;i*g$IY(Cs9Yx-n(a$6G@LI#ri3CCU9|3 zoArdTP^^ngK0`-q&GZG{?0p;Q^!3%g-81QW7y4dKETSJ@bvr+1i`zG`Y{?2KQwx2! z97E@|L_X6ho(SPq1#x)qBc*80W`fbmpVZ)WAWqpv<2NSD-6GVbn~WlRx=w$sev>a2 zHqp;h)7m{Pc0f-HT7a}i2>PT!%sXR^Vgam{6qnq5U9A4Vb#Q{KQ9NOJCG{FkI)<-a zU?Q-vvU3u7)bR0ZBzxIHfngyLQR=%zC6Zty7J6U4RGD%WDphH~Q^D&!py*{)0OCHY zB)WONT3>cRuZn=c8Th>3TquSFgj|@g{2Gctp^8Q|4XPD>!F@6dR4ApRjf1^1028Og)@!5kb(CLkuc4!5pqIxe2SoTwSu6+y zky!^$vJrzQFuGHSjg^C4kW-BJD0&+!koEY&^nSMb)s*6c$|9ho4UKXigu#FdPj(GO zAix?p%{x;Hpd7)YLK33f_kNFcAt5q*imebU`- zG{|vx-}$^pOm)NK<{J0D`F~F7ca~?k;6EaY!#`B!KPxhx8Pg^p_p@;FTonBm&Ch`F zXPqL#8gU$Vk~1h0Q)aq)?G~kS-u-6x`6v`55`$wwj1d4NZbXK`Q_;UnYj4CK>B^?8 z&9Qtb|0-5ZRbH#=#(J&(Xs%Y)CbsT&eY+|!X?@;z4hSHH1n!wR7A{P>c^Lvh@H%wn z7k*=yT%Y=0x=wDN`c}G5?tJR|)Q|Dbd?}-8K4bLWo+XSmmi=kCyV2mR)S^{1j+Kp_ zXRL#<3eBc`AQm1-9XrTS$vAo#0!6>DCZ>r8ExHvb)Eip#4rkD$w{$fVmob4+FTix| z59eU?f`gY#QC?E-FucerilzoG&etRu=5fOqh#v1%3&RhJE7-Uf4KQ@tTw7P7b^5i) z>kKTlP1trg+Y8nPgKd+wP1QabyEAmEb`8%P=(nRB7cd*5WGOm$kgj-o-i{y>p-b>Uiijoa-gRjBgpi!5`s&7;~OX1_JZ{G|tu|z}-aN z49G12+; zaqRl#kpIu0_J0QeTFjXSGX7Ms7jrQ8U^&IV=#l=t|Mly=p{xGm-;W@x)1M+T8yksOZ$c?Lfq$p3ml?JpYC{>ssR{r;ThWApM03X6(M zZ~&e_B$bjWR2rSZWU)D19=}W=1Vv(r6q3mmuu`SgXmxtTU^JO6R-4`7bh$lVA9T3S zeSt)_+^9F(txj*yAC4yD>1?rDuD6@x;dCZ5MI?K6)U=BKHaT95ULaWtfN~XGr%j*+ zP_2IX?XJw7c;n4?uD-Fru7gshtp8DQ17gN>~U;2BwY z^jJ}WY}FBN{@7Wol|}gcVJ=1z3PuvuUhaMLUNGKHW~SdiLhOw=dhckVCfWHo(cte0 zM|2>2r7C|g1IVJ1jN1>#U|Msf6RI#47MPfyS&S*P!kaAn3E4W<#=YgS47T7_q#;`) z#GAAx7*yH=OUQ}U<7uP)B738^Q*RkIJ9gH;#OBEM|Bol9?mHYU%x_ z3WmAWWvmaS@p}G=&A1Mt_BNkYBG4rXLrH{lSaUk!yhC3)M-A z?qL_Xwa5sE)(B(&ZzF>N2Gw)iiMYeH`%~E2t8{C``yZk@b9eArs z<$ie18KzYcfmk1KR@lWNXMrcd`T$SoMkFRM340=6wwn*>Gr%?^NU-w)!p>5xTfm2) zFOjkG)&O!d8I+2`-vfR)$j_Fe`(e(b=})a&-)6`x07#^Gu#QukJCUzUAm}aSwXu*h z^etsJj%YC&dt9j$Qt6ofm}wlRX_U0*$oZ88n@NjpQs#H-Ck1QhHe0mQuMhtP?^aN8 zIZJNjk|3=X>vLJr*nNn_&?w52YN+(zliC|gymIA9ayYT<2VM907C6} zt();)luHuy^%loZI1D-ht-Lsle;yP>btn0lnwME6v8Xh9cXh7i+M>qQ<>iTz(W*{K zr4%(4oeXS{_9enOvrS@F&vt$`}Yo*)yfhLQNNPnk`8Q z2iX8X4;SU%cZYsKLCLS@unb;72} z$U_vT$P(_|>THM%q_Nts>N5$ow=rh5FZ9DNce7$mR=e*0JFB&ZN7<0(yv=5h9_-n* z#mqn&x>=dYI=&=UuByq+2=s3raH*u0HJ-DPi|H{sNvU}f_+^`kDfcqnu}e?*BkFLx z#>bb(|9$mob3XsHaW<~3wb#xn{M>*B4W!9TovB7q^kQAB$r%i0icRiB2M@x&{h%-d z2ll#p$^#g=Wxq+(0VZ#%pnvgZ^=31o>p8`9|7LjIyB2V*UeY$A1b!p=eZ$9c_6zX- zRW|_R2q%{jouf*9*Y=O#lYE@)v{0EmTbWvq?0ii^)!FTL5hbUIwW2BTD=B4E{s!zY^OXR)N>{Y1DmWd2A=CV~;o+0Eeo9!)j+IuCdZwRlEqda@9!P$xq zJ#x#vKB2AFn0mF(26dTIWI0k#$I`E#(Jt3*_85IIoGnl><)irubYu@xKI?Ax95Tpc zJefAid&q!%pMg>g7T1wvi;&+V$KhP#)x&y14~r$K5*#>R?whay&acHgjA_%Rv0?-M ztAJO=#x82c1xmIqEd^A1@9!8XCh_zL1Vz%@d6z^Sqj5zaKTS$>{a(?-&l74Uv zVjzP|?BAefX1l9&gCXW~o?6vPHsIDnuffp#J3W=1^|&sNvwyWrblg9=pjPe)KH> zZ_#xK%7+b|>}Zk}r(~^`?{w)6{G5mhb=&DRG6W4ET&eH__A?`}q&f#{oT-+|t%Vl<9eTP_~?ufayQdfc7*d>b$ zWT{d@e)@iCvXOu3`D@t_ZIsxVWqpCpNc6{cuY7s_m;IB6qR*SO5WL|-0p0A zDmtTIo{G;Vr}dd(;T3_oH=X;Ns?pe3n<`VNc z+E!ONGjDfE^~V2AIAf>PmU)*u%QO~gYZe>cVC1*+1LYr+vAHssfh+6YbxM&L=u?}+ zM()BU8qy^8*nt!40PEiE-LiDq|~8kf882k%;N!!~~8k6BVSlQ)&jz(c;X zNY)CEL3^$@{>x!Aa^-MzzR^_D!3H>7eLJ*LVTRAjP%YB$4m&|d(6!PlvzI$rOv96i zE$73g<6GoTVp!K(m$2kibG5e1r~Zhgot92Cru;{^E-%#oNX(E5`wuBtoO1i%O(||K z)-CFrzr%H_x1jh`lW%*FDF;AWc4sr;M4d)p+AoO1lK!}t6brzRs4%W-)=OH9t(3h| zs^#iR5lk5{l~=Xe-px)UrIja-KGAcnhdbCXAym?@(6N{d$gf<~b#jidL9jy3Gq%Lg z^$9>YEwZUfPFZ_&%SP#Xg&k|t-Rx zYUc)_F3W1bX$|~?0{1&8@EH{NB2yp&D+5QVXzsc9Nx&~=*UIJb+OcXiTBlqMC@-r} z^G@`6mm3FP*c6`q(`v)1)T+A0bO|jbP#$wSa74lQ8r_|eJnr`XhKWc-*ubBcT zwBqz_Fy%KH_O@(SGdu!Y6-k$>Ce{Obp;}zmn^baoi+)DHUpVsa(&!5LJAWvFCHd@! zpRRQI#vA<3#b3<_Xxqh}90{)*dIO=5BLU5f@wIJtJ?Ivb_LY74B1yjhLD}4CU;4by z#iQp!LSERM;n~BVv)h*2gbS(vJ^z56@y@1?aS4i_9s%y^xj@t|*h;-P}! zeKa}w#I)-ATj8H-IVbrWR~yaao~-`32E0}Ga|7qZkUvqkaQx0{YHh>&qgGt(jFAnf zn)|c$yZ0zvd8($MeVU`%**+KULH*A>@7>8)VjxFMP=;!&XIiVR8)hc|RPg%fgFzzZ zsW){qxWZz*p!8}V`d`TEl0r5YB(*u#TO1q-i6OAC1SB$3fCsK=^GFAW8Ha{%9Gb1yrG9<7tB7Bdt=p-?>fV(=sxbmS8YMS^UQgU>sKEi~2Aa}P1NAAi5T`Y^SEeDyWL}_oNH;NoTY}YuDkN*pEs8ib3O=Cf)taRH*H~L`oeL%^21d^ZvJ#` zS_GelqEoLtW<9?0e*7<4FZE3K2618O9P1I_yOazW7Qky+{H!P7_h9Zx!hfs5w4}*v z9DWNaHb*iprmj29hQ$E z_^SGRDo3|~4%t@)UCz-nyO%+VdtgY{=&1_h3?*D0kJThZq$uyycf3TlTo1Cj7M6_p$z!d})+UJJy4gMuA1T?EV0zRYMxU?#)UC481ACP1nX*}qXyAC1;zij); zVG+6t#O5ZkQO6S+)MDGeH!6k{k}uACEDIZbfz@rH;W{$xVr*IDvo%RH+gTzb-=r#N zl*G^4Qc=cnFQ_fIFI`e43NqLpRJ$=|hI~M+My554i8gzgzT5Yp+pD)zZDm5izHVyKq#$kAuJ6g;b3E#A z=2{AQ9rJG#SpecRHdmEs_S?M1agF2?4Pty^H$U>igUu~5H-wMc~w3$@X< zO_vX-(?B|N#c3*L@7>Ik!*ne*7V2juA4y5oDTnXH%psnCZzv6lLOb)iw*6H5Nq!XS z73x{)nJcNYv<#G$-*&R?RN0x=si^oGb+Ff3WdSK%HB@{TgW7X`C{8#dYrAnwD5VrGmu z+j%IdKw@<)+O}g!-}qbWI(F?`&Rw0!}4Yq@N9Sxw*P>pKU_^fGyBg0TF~>?t!96dHSvxQ^xo@bJ>80M67I;=}AE2s7J~?{fVqgD-^IQAm{jEKNb@g3? z?fp#k$Vr9o9lOH*nNI;7+&)P_K2E-QxqnAsk+A5G@=|tTx45;I;VOC1{b>jDhw{eJ z{$?DEWOrsG?>^*Cav8mMBRO;GZlnt#o=jQx6nR$B5_W}gxm&XqSSpgacxUKu90-3v zihAql3Sbzm?a?ofe`)h3%l{}Z_rtt=Dcm#T(pj^SQiaZE>Cj*ga*Uet}q3 zTF$uusKHg<=L~Wc_53l*{c~n&>?VIuHvM?4@0wYwXX|g`$f06hPv(4QjA86z9V{kb zFN-q_$w-DcA15K{mzVoDnH?yZrk$%~6R~fZlFKosJhqOlZ*N$<>wLCW@u%X24$-ky zQ-+YuPH*L@ZBx$8$d;wOeRD=*%{u1(po~Sk=M9H)<{xtm;)ZY%m}~&&xHxPZNQZl5 z8=E)P_=`ArbIy%9!JkD_Op{+^zSdPR>zMZu?N+?gmt`OsB$A|cZd=EP%Y9qYK`6W! zILBD_tH)rx&6&K$Nr~$`5Y8o{1PRImD%O4#zcYpY1&uFcGuWvY)PoyXMZ`g6Kraq4 zg=Uh7MmO?7tWwjAgfxf}W^h5jC}>p52q2qkJ8VB}qk`-(JOW4a4FPvsZ&Pz?w~z5w4u6QfMmU=Qrbd$Y!yS_dIU&)HI?vvQ){m$z&Aw0 z$6*-{33^()RX6t_AqddmH2)W90UTr`{7}_3P+q-gpgyr{nskgCwjCkK<*nhKwd(b} z`2!{@WqPkKb_~?!D-?PmzxjjxIr$z!z7O>6gm>Bq%RXD&hG+k(7dAOTK*SC84{umZNwc#nl(3FpKV{1m&=;JbfQeK#RnkmuF-L0sq#Mx#6D zitMQw$rrL^I4XPgR24XzHFvr}NSM|~PTz-q$Wc0l^ED@Ptw^ z-Qu?jcv7i+jF=|S1CS}OdF#C1ofd*NXB^s zd{6iuhz${T<^%Y2dLlMI^@AyB1fMSaGdW9)&N~m3iRa&{uA%jDL7^C3xNWV)C0Fbz ze25A;Y7d1jB$60H3Yj4w5$OWad!uCLB+osgv;c3zXV1K5n0aV8Y7%hxKjaU)lpWv% zx=7u(w*UBo5KS>YLiT}W#bSNQ)MA*?f*#l1Ujz!lj@64ZQG@4vL@Xo~39<@rF#TNZ zG}VROhuV^z8U-NL78{D4bE(yJ>Pmm7sIB|i;i~L{>CAN}0Q21sy<(kfgUq{uqOa6c zrrefzoJ*Dy(v&$z;*t;H@CVDME8`33-@9x}GIoc*D>zfMq+gDt9y(jt;l_QtVTDVmr-^8>Y2td~Gcs%t1l-SRqWrtrdew?YGpp5Y(Nrwn_(jh~kdb_T zL2~hdbuNNb5GxgDK=K4M_3}``|puuZAxJ0HXJiSz0>aIQ?T=@B~P$`<6 zTCMy|9XWH8_3`eSA(#c$sp^9uwSGaBB0Uq6js^C*i{K3Fv3H@qWwLq%X*=t!Ycd(@ z8$D+SCg2xBxujkWao&dEpWupeldN3K%Kv=PWF~41i8rLP1ysJrUz%#i>sU)ZNbx59R_#`Ow?59R;C_l6A<8zF zBXIq9CZdeSb%7vOtyv;)Qf_c6+JcS!4T*Krq(huiLzoQ7tGby@gH>gqK6f`BqI39q z6?tBjlLOIR^8A?g2{KUWJ4yJVCQuPL$2fn&)V4f#%nmpXc@W=TKT*Y$!w?HBev4s1jS8<-b zPYZRBE+xoR?lVtV`eI@4m1+ygT&r8pPj8{@+wgJkIhoBMqEl~DWA82){wbe6bZCi5HvX2Vgdf5y`ofx_F#V1Ms$ae?`oqYP zKKkDRsj5br@H)v!SD3>5Py3k)V^}Rms{AV%O&b^bzv$~3lpwhdh!|9GVf}k2N{A0o zW85tc%=9=?RW}k&aTp zip#`g;i$B%x)Yu44(h`(E_Y_AiBwJjA&)~PrfXKXj1!nbN7X$*HLQJQhs+8hwe{-yD0TS~+00k&2N}fF3XY$(PFc^nwm83O}cU`Z*J>aOD?$h^-s8KTo+>?NXh?J0BhgquQuv;KT05QOpcDmyG-)Pf1!(bOzr1?Dj)S5(2k)vNmnvkvv>aoYE29)x^%5hXbODZ0AgcomyBe_9XId*pdv$xHZLfn9<|osOh{-dM;*>y zg+m7gTkp=LNZXz)n;@XXfb?#=4U!{)?j)2D4!V*nx$JNNrWp&^sw3IV)K$?ea^j=a zQ|Crh*a4u|4JFSrzpNSH8pDop?YOaavhBzbML{wxwby1BHm)*+FnK+RD7c69Sg(w#> z&M!!D-e>heDEAY=ZP9OGYd}{@7*y5Q%Sz0kt2_lENJ!Usw;Oo|>jf<0m54PrC0RxF z>}-ngK|LcJwqSTsB%+GN@f1WWxo2@UqQD+4lvF>Secm#5VoRX8)bj*1FJjLO6Wn80 zQkdEmtew%EyU|2+8%-t>9; z{@Z{5uZXaJ3hh@Ve81hMi+x3Z)Ay8`zj}>*`td?$CM$JsWvt{;%@R^`{PnlDwVnMm zQ~!&zyU-skd~Cnf^DkVw_WJlcc4_=Qu0+~=5+IyWif~*i)uF8z! zadM6jfC>RIWvjPai#nJ&kczdMRkT{lVESQBm=@W$9-U2k-;j%HdNwtw9xO#<1QHw( z5Gqd6muS|{P~hBZ{Hq#QKw(h<5WmP1n*GMzDT~*`hagXe+b(dV_V+EJBOn))u}Rc7 z1g_y^A^}vrbmcL1b6ICTVdz{>w=Hi|39BeQ6P~xDwEZld+T1WMr%^6P5}8}B2@6WZ z6h2t8*V4J^@f_VDTpZPT4{9_?o3Y~swyvC^L6_$G_SQ3m{G<)8P=uzbLmiM#@Xdy# zvI*c_@OT+{soSD=RZt8gtd;A)X|jonI#(k6l28)g5`u4tNo!gXWoHYApDVPq1kE{3G1bBD;lQ0)?1H$jcU#%mKXWrJk(XHiE9YN7**cnz||s<{@* ziKJnmqY5`}tEysNIAhQ%>ShDUs8|UJYhp<_!cY@7?gP!?Nuhqnzx)3VZ?!=t@f%xe zdJPQntngJ+-7()EhD&AMmo@A|#XcyUd2JShp)Q@te$bj#HccW3P72hXH#KYNhLu2+ zn`^O{^_=;J&4IlxVUYUhzfB*IWf2RMf ziM~>@D!;<*A7T4j^41r@e+HMbCL!>i{Pz3)mFb$IbMN;5AzZ0y)8x8qXT$&kGa31W zp@cS>D4ogce%i!$fCMiV>24^I$$}2#0C*G10xqZV?cGkA|U< z{@q7*D9NNsg3B$iVGfW^Sc|lfy;cVHaD$<1yQ2R|J6qg1*&=rypG%!o4no;RKy(Vi z4cW0pqk6%RiPJx{s!~!Ul^w?ZXhxE3H~{c9j6<^awUmLa@YJi&SnP#LrtYG#m?-1G zs!_58idn}sWFP#+0E-U7ux*LYnZiO4fl8V^rH3-Xn@SsEoGG62D2V3qpw2`&EKNNf zt8>no?VJXX%r7|>L-HAMu+_@D#~|+#LXuml^M%+8a2!CM3H7TWcmov$V8OCJ4ZO!L zorB4{K{?9%p1kieNeQ#!>RY=UW}w3WU}Klh*bxw%0jWi6e0R7rUFKQ{DRz2F$V=yR zu$G&DD}#DuJ#*ZvYZk*WfVgrX0~JIQ?s-+kq7%f|2pAs=!VgGNvFxE3UkJlegt7YC zk+g|Q^#WMFW9?jyveO2YHC+L9H6^*5TwCqDh94K#s07%9QqM+z~O5XLhXc15f2z!cyKeUvi+KZz$I@G zkn=IzCG68a9uuC{=mZsrnw*${a!*1Kmpfu0zIK8FKKtYm_TiVKL&b1mdRX^}Mdn77 zDj2NLvUaG6%F#s|g!yGB{`Se%miA~1-887YuOWNX5puw{#&ZtajNmfAv zqhZe!pd}_8_$Bk=SAP6WSx%CSe*Siue2IP8>`rR?3YOr_R|sVK@h$rUfNz->Wdms* z0Qx5gKD2gjCJVJD@M)+dDW;+uS-~yYb{f`@5ikWS7)i82a&HPig~bkQkY_y_63f9v zMW+t7U^~8#)4U)BO-U8wwq~un2un~ERcbU+5)EKcN2vJ?E{3x$tJpfHm6 z{-n3B{A8^wy561;HFXfTXro9a8l_gLDW7*FtiUwG5^RhTIMmbeIe^Q=vc5hRMt%xH zN5sKNJZ`~~7Sb;zP?fc)1BWXs>YkFCYkAZYy|2lENY=Y-o_I-eF9-vW$s>`oXmY!N zE$okAGUN!CoCywW%(WIgZn#Oj`@`-*S!{GC;M1_MBLMCmW7Wx`mR6Y0W-j%@qu^Od zUpoL#htqp=aGCs2E zNMI*`$EepQ3#&!$`EY1t@6gjSBwb3s*RzY8qCZOa9hq^>y3DLn^=D zQUZV5dOltRRbEo1*MtZiUQ&g$rMm&82FdO>KLL}!OgRfFsLWIxq+Vuhx@o@DvMJ)_ zO;o0gJ=@zk-Gmtf8$VF+#E4KpUNw*>znezGo?$k=)m0^|xzQkF-GbSs-UB+V9hmQW zY3)D%+|U+4fXRErD@1|UCGKaRKR;}GyhwZAXAzouV1d`=lZ4CT=b@?}{0sf#{@b}* z@NoBBP&@377uy`CeB4rlOI^HV_0u({Lu^st7#8kS|6?%=HkRuBDZs`xag#FbtI|B9 zN>Na#GUZp0ClF#tMNd@nM63Oo$8Yr(#a^{BO(h!X&&BuBN{+ z+rNtk%Iw>0hho0i2{Tz~AIvby3+)9iFbDW{$X-MKx}7FWQWgd~@nmloEHbQCoo z#K5JenApZ`0q0HB(o9nCj$@asT#2TqfITQBr`R?rOh*lNQ0sfcC~WI#t#PCrb+AQs z6v0ybIjH#{r-ag2P$R35!6l^WZ4y{^vgA8(wp@2IOlnwtN=&mXlp2A^7$h_( z2q2Fvb0A};l5!@)5ushI!B~Y;$U??MfC$etdgh7}(Cx7GSb;e15$aMz!V!dKQ%tJM z7K78_fsFZyEi?vHkMo<}D=IKCz_g&m@eGMgq8Wa@Brh&^*oFaUiIJpUv5B?vbCLWK zz}qJp0X3_@;xhh~Ok~0glGnsK-ecQ&au`UQEtv5oAhHV+2Ib<%q>dg3W@*i#S(bH) z$0Z<+^HZ-1jQ|~t4Az5AyHa+@rnAnG9OoS$YYc${(&M-#I5i|XD>tQl6)P^s`-nsP zyi~D8mmnWw)DYph!Q_!%5r+Xk`KZNq0a*L!-^q~2QRK8MkU%>@2xI8VvoSO-%lg#L zW}*A$ni=VOiQwman`Aq_G)rA)Tk_2C;7qv@Y41Si+`H@fIKHZ2JcA7#Grg91A?rF7 zDzQ)vgJ#S2U&~ic;f}q-gYDzBM)~ocI=cU}Pyge;2n8!Cylvx&wS%vqyd^p*LrMG!Is`5=Z}J*V_76Y6Dvl8$_gNiTs(D-JerMgvA& zI1yB*DE)EJbGdGfj;zX?(6L5tf^*;$wwwB%Q)Dr&PjbaG|-r4MJH*En`YM%%95~QTCn+B__t4=WDY$0bV$G>T~ z3%&;eex0adCz5n%TMz}B^~i0?er{*>a{ zp^+$$F4;TQ5yn{Xgss~lnK3BtQhe(onQ$l_e-64^95bV`xT1Nj^NbQP@jGpCZ!BK! z&~vDd9&-8oSk5dCy4R-*h7xLgl=1TuqAStAP?#IDwiR!NDb0N+A}EC&&!WQ=`?`4v zts6Sa=|JiF*Da^YkKWQm#IHMQp-U+Ij0zp1LzD&V>ed zaPMfR0T$2Vg}A&yz5XCSdgOX?m+^Mz(ps+Z!=s4?mT}Bs;os^h-LiV5(WLF2D8G010|ps&cC3MK<3b zqwd7?j@j7Lz&nHCwU6SxAk&NU*{ryU`*6I9)~?FEd=*vF`~0Ks55Zo2WPktgCZFZw zyz7i`Tsb?O*S!&Y^xmql#2 z6t7p$ySSpwKG6`H>z$jF9+D1D^5noCJe3SfpRYE1gS8B-B$768G@fFsThk<&uySLNyU)nGW~*&P4_|yi>8Q&)CNsJdowHtlSb-#a z8OwO_bKoYkxCi0YQ}Db#=hL;l_#mrv?7!9LTU$)DV8WL8MLc^hq|j5?M!ziELh4bO zit8@8XkVlhCU8gGLWe7*FbOBb83}`)O2jdMgwzh2ikx$kUN|Fdb=lEfr!JIa`?gs# zG$p|&1XK%(x*JXOB{M1e$7$m#KAaX6sBmMkYaKFT86sWV?2IiAnNC@p5j{rfxf-lK z#Wi%QYR=`Q=%`2#H{)M>CW(~eTRV}lvM0uNcWDZG!&x?udVa@1A)FIPLAjQqRKT;k zQ%jemXjYjze<{~4^XR@{WWwM^afu~Q1Fm9{n>%u}@+Pd^#yRupQPFTDTQ&+u;rn)^ z#)`w^kbGaCjM6pIb+&)G``DA(wq`h~Hl>;88L`uaqfGbRG2u3?&BgujrT*9hE@9+l z#ITcGXVx29Z6tTDP`9z~)f9-gU1-sk%uZ{n9hp)0fm3*W7T|S5#AD0gw-y2Sm)_7= zN^}ZMdJj)aBm^b#!q<7wLT3`&WC8}GakRAFWOlLIhxS}?zrw;ZNG6l0j*ul-)s*bH zUP|(OK_<0aNVZQ%zw?R|vdOgl9eLz&(Jl4Y+bQzt+FCsJS3Ggx=~t3ICmpa{eXz#& zc!$7cV3lP*e0UzJ9e0BgMpxW*nF_*$@!-O)pZBU;)hrT&3k_Ib(ynqqy))0Uaepi| z#VoVb9cNL=LV9pgc2d!5T8t~;(4K6@*B)Zk0_fT42**;p8!SSke7-BHSGnU= zw$H~kx|;M>D9Ew|N}ihDtr2s|kK{;v`YDdg$$?%$qfFtAT&09P>VR^!3SKuZQ&;jT zha7V#xNI~{*&rP8Em?VjhxT*+iuontxa$O%_ywXuU9PAAty zw8_S@{DY2TV|0ODAQP59pd{}!b4;rY1_<$f`iBQ(?0NngQpAd;MD{u{RHI_EtpNPDZu=1om#TpMG4xAre<#5atc>c%iu8#9FK)cBGVG(Ns z0Nw;J`gA3{ogAFcpd-^MFR@0-HOoSX**m!ViWxt?preb4JXjBnY*SRlphP$@YgaFV z00OPPYS9h7Pp%iR#s29Ei@{5V)?h@_hh=~9g!BGR=UA@Cw;iJ}-afMYshvTxnMKoWjo|NTUlOnu2$ z7S%M%Ee8&aXrs^8nvE}zSwLj;tuj)Et$7jnoTB_fVxi|VT zcvbh;R)0R#+waNa7gc!;_+u`Ia`%IbeSXBEcWfbj(EYGxdQBsH8K=|fx6{ji^n}Mt z=e05JQ?+Ln;FqzvA$FFwY2u%fdi>R@zrG)*=YAXZ)fbqzp?Q!0Z|~(ztRkFUTuy?FMc9Q;Ir$8sDin8du2{;!XKjv}^NoqZ=t$~%(V5*b!=Z!Oa4Lp8A4wG=f$lRk^)zh zI!_PP0q!Y(1ysqW_7yJQqlwRG{1f9XCGn7XRgZhX*zZKzS!AaG^M=Zl(@TH2FXUwC zKa~ohmMiW~-u~e6Z`gNonqYV6$7*;OLdr#%n&nl271;@x%>x+ft@pG6DEEk{JljGEkUff*m*lQJEVuA3 zxcg}?-HbTvp$2jTepC9u*At9=3gjOH$aBOD z?e+)1R&V+|MPRoL2z&;Y;BIK^UMw|#UnHm-ixhEtk>l}mkw?Q`l+i}IC?L^RlnZyM zp)9*U6xGC~8yax4MV-p?77aAj`?ZYZwHJppC3QX&3Eq_=McrKFRJgOq1w5Q3&iBj_mDXcg}fK!E>j5Id>(5k$aSGHI@X*)qFcY*FJZnIXt^e3KOOlhi>Jb>q%_pS~HNkvUVOGnSZ$i&RT%Er#Y$wlPm;pM~l<;ayMUx7kJiUkCPghfQf#3dw^NJ-zl z&Lgi@qgEXukcgOs6huZ&0j8w7XBX1`KV1)DU}R!uVP#|I;N;@w;cYt3+h~*f9rA_E zcG>QvYg|Y`R-X;_CnpN*Oo^=?^|MicqRtHH3D*I> zSG1O+h~72gXm18??T Date: Tue, 23 Apr 2024 23:20:37 -0700 Subject: [PATCH 27/60] TEMP disable CTL assertions while testing Looking into why this started throwing assertions during integration AddressBarTests, after last rebase --- DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index aa27075113..b21675103e 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -76,14 +76,14 @@ extension FBProtectionTabExtension { do { try userContentController.enableGlobalContentRuleList(withIdentifier: ContentBlockerRulesLists.Constants.clickToLoadRulesListName) } catch { - assertionFailure("Missing FB List") +// FIXME assertionFailure("Missing FB List") return false } } else { do { try userContentController.disableGlobalContentRuleList(withIdentifier: ContentBlockerRulesLists.Constants.clickToLoadRulesListName) } catch { - assertionFailure("Missing FB List") +// FIXME assertionFailure("Missing FB List") return false } } From 7c3f672521bf1b8c83420967ba8980811c3fca09 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Wed, 24 Apr 2024 14:20:55 -0700 Subject: [PATCH 28/60] address @MainActor warnings, remove debug spam --- .../ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift | 6 ++++-- DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift index bad654c075..ea14580cec 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift @@ -26,7 +26,6 @@ protocol ClickToLoadUserScriptDelegate: AnyObject { } final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { - weak var broker: UserScriptMessageBroker? weak var webView: WKWebView? @@ -73,6 +72,7 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { } } + @MainActor private func handleGetClickToLoadState(params: Any, message: UserScriptMessage) -> Encodable? { webView = message.messageWebView return [ @@ -81,6 +81,7 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { ] } + @MainActor private func handleUnblockClickToLoadContent(params: Any, message: UserScriptMessage) -> Encodable? { struct UnblockMessage: Decodable { let action: String @@ -95,13 +96,14 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { return delegate.clickToLoadUserScriptAllowFB() } + @MainActor private func handleDebugFlagsMock(params: Any, message: UserScriptMessage) -> Encodable? { // breakage flags not supported on Mac yet return nil } + @MainActor public func displayClickToLoadPlaceholders() { - print("displayClickToLoadPlaceholders for url \(String(describing: webView?.url)) for broker \(broker)") if let webView = webView { broker?.push(method: "displayClickToLoadPlaceholders", params: ["ruleAction": ["block"]], for: self, into: webView) } diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index b21675103e..3e7ce72e2b 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -46,8 +46,8 @@ final class FBProtectionTabExtension { }.store(in: &cancellables) } + @MainActor public func trackerDetected() { - print("FB tracker blocked") self.clickToLoadUserScript?.displayClickToLoadPlaceholders() } } From 1bc59eda0dd64550d77afbee80fb41fe489c90eb Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Wed, 24 Apr 2024 14:30:16 -0700 Subject: [PATCH 29/60] lint nit --- UnitTests/ContentBlocker/ClickToLoadTDSTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift index ed5358aab9..43d319ffa2 100644 --- a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift +++ b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift @@ -37,7 +37,7 @@ class ClickToLoadTDSTests: XCTestCase { let ctlRules = ruleSets.first(where: { $0.name == tdsName}) let ctlFallback = ctlRules?.fallbackTrackerData let tds = ctlFallback?.tds - + let builder = ContentBlockerRulesBuilder(trackerData: tds!) let rules = builder.buildRules(withExceptions: [], From 841de53bbe1d998e83d2c0fd18091fa2d5c8627d Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Wed, 24 Apr 2024 15:57:27 -0700 Subject: [PATCH 30/60] try special casing NavigationType.backForward for CTL --- DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index 3e7ce72e2b..7ac478b628 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -113,6 +113,11 @@ extension FBProtectionTabExtension: ClickToLoadUserScriptDelegate { extension FBProtectionTabExtension: NavigationResponder { func decidePolicy(for navigationAction: NavigationAction, preferences: inout NavigationPreferences) async -> NavigationActionPolicy? { + if navigationAction.navigationType == NavigationType.backForward(distance: -1) + || navigationAction.navigationType == NavigationType.backForward(distance: 1) { + return .next + } + if navigationAction.navigationType == NavigationType.other && navigationAction.isUserInitiated == false { return .next } From 838d6f8c62f427c574c46f29a3bed39984d56553 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Tue, 30 Apr 2024 16:22:20 -0700 Subject: [PATCH 31/60] remove MD5 func --- DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift | 8 -------- 1 file changed, 8 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift b/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift index c76a9a5147..6c74927226 100644 --- a/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift +++ b/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift @@ -27,14 +27,6 @@ final class ContentBlockerRulesLists: DefaultContentBlockerRulesListsSource { static let clickToLoadRulesListName = "ClickToLoad" } - func MD5(data: Data) -> String { - let digest = Insecure.MD5.hash(data: data) - - return digest.map { - String(format: "%02hhx", $0) - }.joined() - } - private let adClickAttribution: AdClickAttributing init(trackerDataManager: TrackerDataManager, adClickAttribution: AdClickAttributing) { From abdb4f03611e1e00f13c53fd5e30663842b89aa1 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Tue, 30 Apr 2024 16:54:09 -0700 Subject: [PATCH 32/60] move FB entity string to const in FBProtectionTabExtension --- DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift | 2 +- DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift index a84a423c9a..58164b1397 100644 --- a/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift @@ -139,7 +139,7 @@ extension ContentBlockingTabExtension: ContentBlockerRulesUserScriptDelegate { func contentBlockerRulesUserScript(_ script: ContentBlockerRulesUserScript, detectedTracker tracker: DetectedRequest) { trackersSubject.send(DetectedTracker(request: tracker, type: .tracker)) - if tracker.state == BlockingState.blocked && tracker.ownerName == "Facebook, Inc." { + if tracker.state == BlockingState.blocked && tracker.ownerName == fbBlockingEnabledProvider.fbEntity { fbBlockingEnabledProvider.trackerDetected() } } diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index 7ac478b628..34f4695c21 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -30,6 +30,8 @@ final class FBProtectionTabExtension { private var cancellables = Set() + let fbEntity = "Facebook, Inc." + var fbBlockingEnabled = true init(privacyConfigurationManager: PrivacyConfigurationManaging, @@ -129,6 +131,7 @@ extension FBProtectionTabExtension: NavigationResponder { protocol FbBlockingEnabledProvider { var fbBlockingEnabled: Bool { get } + var fbEntity: String { get } func trackerDetected() } From 1999c4a9a64a6df095abf49fb066e08e20f31a01 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Tue, 30 Apr 2024 17:11:21 -0700 Subject: [PATCH 33/60] update splitter logic per PR review, fix test --- .../ClickToLoad/ClickToLoadRulesSplitter.swift | 11 +++++------ UnitTests/ContentBlocker/ClickToLoadTDSTests.swift | 12 +++++++----- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift index 036a0aada7..12a2b55162 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift @@ -36,16 +36,15 @@ struct ClickToLoadRulesSplitter { func split() -> (withoutBlockCTL: ContentBlockerRulesList, withBlockCTL: ContentBlockerRulesList)? { let splitTDS = rulesList.trackerData != nil ? split(trackerData: rulesList.trackerData!) : nil - let splitFallbackTDS = split(trackerData: rulesList.fallbackTrackerData) - if splitTDS != nil || splitFallbackTDS != nil { + if splitTDS != nil { return ( ContentBlockerRulesList(name: rulesList.name, - trackerData: splitTDS?.withoutBlockCTL ?? rulesList.trackerData, - fallbackTrackerData: splitFallbackTDS?.withoutBlockCTL ?? rulesList.fallbackTrackerData), + trackerData: splitTDS?.withoutBlockCTL, + fallbackTrackerData: split(trackerData: rulesList.fallbackTrackerData)!.withoutBlockCTL), ContentBlockerRulesList(name: ContentBlockerRulesLists.Constants.clickToLoadRulesListName, - trackerData: splitTDS?.withBlockCTL ?? rulesList.trackerData, - fallbackTrackerData: splitFallbackTDS?.withBlockCTL ?? rulesList.fallbackTrackerData) + trackerData: splitTDS?.withBlockCTL, + fallbackTrackerData: split(trackerData: rulesList.fallbackTrackerData)!.withBlockCTL) ) } return nil diff --git a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift index 43d319ffa2..7965f83e36 100644 --- a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift +++ b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift @@ -25,8 +25,10 @@ class ClickToLoadTDSTests: XCTestCase { func testEnsureClickToLoadTDSCompiles() throws { - let trackerManager = TrackerDataManager(etag: nil, - data: nil, + let trackerData = AppTrackerDataSetProvider().embeddedData + let etag = AppTrackerDataSetProvider().embeddedDataEtag + let trackerManager = TrackerDataManager(etag: etag, + data: trackerData, embeddedDataProvider: AppTrackerDataSetProvider()) let mockAdAttributing = MockAttributing() @@ -35,10 +37,10 @@ class ClickToLoadTDSTests: XCTestCase { let tdsName = ContentBlockerRulesLists.Constants.clickToLoadRulesListName let ctlRules = ruleSets.first(where: { $0.name == tdsName}) - let ctlFallback = ctlRules?.fallbackTrackerData - let tds = ctlFallback?.tds + let ctlTrackerData = ctlRules?.trackerData + let ctlTds = ctlTrackerData?.tds - let builder = ContentBlockerRulesBuilder(trackerData: tds!) + let builder = ContentBlockerRulesBuilder(trackerData: ctlTds!) let rules = builder.buildRules(withExceptions: [], andTemporaryUnprotectedDomains: [], From 3ca418b301b79d02d5019b72e23f605567c3f123 Mon Sep 17 00:00:00 2001 From: Lucas Adamski Date: Wed, 1 May 2024 16:23:55 -0700 Subject: [PATCH 34/60] Update CTL rule splitting logic with alternate path (#2733) Task/Issue URL: https://app.asana.com/0/72649045549333/1205105078450227/f Tech Design URL: CC: **Description**: **Steps to test this PR**: 1. --- ###### Internal references: [Pull Request Review Checklist](https://app.asana.com/0/1202500774821704/1203764234894239/f) [Software Engineering Expectations](https://app.asana.com/0/59792373528535/199064865822552) [Technical Design Template](https://app.asana.com/0/59792373528535/184709971311943) [Pull Request Documentation](https://app.asana.com/0/1202500774821704/1204012835277482/f) --- .../ClickToLoadRulesSplitter.swift | 100 +++++++++++++++--- 1 file changed, 87 insertions(+), 13 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift index 12a2b55162..501f527e07 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift @@ -51,12 +51,10 @@ struct ClickToLoadRulesSplitter { } private func split(trackerData: TrackerDataManager.DataSet) -> (withoutBlockCTL: TrackerDataManager.DataSet, withBlockCTL: TrackerDataManager.DataSet)? { - let trackersWithBlockCTL = filterTrackersWithCTLAction(trackerData.tds.trackers) - - if !trackersWithBlockCTL.isEmpty { - let trackersWithoutBlockCTL = filterTrackersWithoutCTLAction(trackerData.tds.trackers) - let trackerDataWithoutBlockCTL = makeTrackerData(using: trackersWithoutBlockCTL, originalTDS: trackerData.tds) - let trackerDataWithBlockCTL = makeTrackerData(using: trackersWithBlockCTL, originalTDS: trackerData.tds) + let (mainTrackers, ctlTrackers) = processCTLActions(trackerData.tds.trackers) + if !ctlTrackers.isEmpty { + let trackerDataWithoutBlockCTL = makeTrackerData(using: mainTrackers, originalTDS: trackerData.tds) + let trackerDataWithBlockCTL = makeTrackerData(using: ctlTrackers, originalTDS: trackerData.tds) return ( (tds: trackerDataWithoutBlockCTL, etag: Constants.tdsRuleListPrefix + trackerData.etag), @@ -75,16 +73,92 @@ struct ClickToLoadRulesSplitter { cnames: originalTDS.cnames) } - private func filterTrackersWithoutCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { - trackers.filter { (_, tracker) in tracker.containsCTLActions == false } - } + private func processCTLActions(_ trackers: [String: KnownTracker]) -> (mainTrackers: [String: KnownTracker], ctlTrackers: [String: KnownTracker]) { + var mainTDSTrackers: [String: KnownTracker] = [:] + var ctlTrackers: [String: KnownTracker] = [:] + + for (key, tracker) in trackers { + if let rules = tracker.rules as [KnownTracker.Rule]? { + var normalRules: [KnownTracker.Rule] = [] + var ctlRules: [KnownTracker.Rule] = [] + + for ruleIndex in rules.indices.reversed() { + if let action = rules[ruleIndex].action, action == .blockCtlFB { + ctlRules.insert(rules[ruleIndex], at: 0) + } else { + normalRules.insert(rules[ruleIndex], at: 0) + } + } - private func filterTrackersWithCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { - return Dictionary(uniqueKeysWithValues: trackers.filter { (_, tracker) in - return tracker.containsCTLActions == true - }) + if !ctlRules.isEmpty { + // if we found some CTL rules, split out into its own list + let mainTracker = KnownTracker(domain: tracker.domain, + defaultAction: tracker.defaultAction, + owner: tracker.owner, + prevalence: tracker.prevalence, + subdomains: tracker.subdomains, + categories: tracker.categories, + rules: normalRules) + let ctlTracker = KnownTracker(domain: tracker.domain, + defaultAction: tracker.defaultAction, + owner: tracker.owner, + prevalence: tracker.prevalence, + subdomains: tracker.subdomains, + categories: tracker.categories, + rules: ctlRules) + mainTDSTrackers[key] = mainTracker + ctlTrackers[key] = ctlTracker + } else { + // copy tracker as-is + mainTDSTrackers[key] = tracker + } + } + } + + return (mainTDSTrackers, ctlTrackers) } +// private func filterTrackersWithoutCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { +// trackers.filter { (_, tracker) in tracker.containsCTLActions == false } +// } +// +// private func filterTrackersWithCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { +// return Dictionary(uniqueKeysWithValues: trackers.filter { (_, tracker) in +// return tracker.containsCTLActions == true +// }.map { (trackerKey, trackerValue) in +// // Modify the tracker here +// if let rules = trackerValue.rules as [KnownTracker.Rule]? { +// let updatedRules = rules.map { (ruleValue) in +// var action = ruleValue.action +// if action == .blockCtlFB { +// if ruleValue.surrogate != nil { +// action = nil +// } else { +// action = .block +// } +// } +// let newRule = KnownTracker.Rule(rule: ruleValue.rule, +// surrogate: ruleValue.surrogate, +// action: action, +// options: ruleValue.options, +// exceptions: ruleValue.exceptions) +// return newRule +// } +// let updatedTracker = KnownTracker(domain: trackerValue.domain, +// defaultAction: trackerValue.defaultAction, +// owner: trackerValue.owner, +// prevalence: trackerValue.prevalence, +// subdomains: trackerValue.subdomains, +// categories: trackerValue.categories, +// rules: updatedRules) +// +// return (trackerKey, updatedTracker) +// } +// +// return (trackerKey, trackerValue) +// }) +// } + private func extractDomains(from entities: [String: Entity]) -> [String: String] { var domains = [String: String]() for entity in entities { From 95a798c973c954c0bb4cac290b9b3d93aa89009b Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Wed, 1 May 2024 20:09:54 -0700 Subject: [PATCH 35/60] update rule combining logic per last rule splitting update --- .../ClickToLoadRulesSplitter.swift | 100 +++++------------- .../ScriptSourceProviding.swift | 20 ++-- 2 files changed, 39 insertions(+), 81 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift index 501f527e07..3aeda2ec45 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift @@ -78,87 +78,47 @@ struct ClickToLoadRulesSplitter { var ctlTrackers: [String: KnownTracker] = [:] for (key, tracker) in trackers { - if let rules = tracker.rules as [KnownTracker.Rule]? { - var normalRules: [KnownTracker.Rule] = [] - var ctlRules: [KnownTracker.Rule] = [] - - for ruleIndex in rules.indices.reversed() { - if let action = rules[ruleIndex].action, action == .blockCtlFB { - ctlRules.insert(rules[ruleIndex], at: 0) - } else { - normalRules.insert(rules[ruleIndex], at: 0) + if tracker.containsCTLActions { + // if we found some CTL rules, split out into its own list + if let rules = tracker.rules as [KnownTracker.Rule]? { + var normalRules: [KnownTracker.Rule] = [] + var ctlRules: [KnownTracker.Rule] = [] + + for ruleIndex in rules.indices.reversed() { + if let action = rules[ruleIndex].action, action == .blockCtlFB { + ctlRules.insert(rules[ruleIndex], at: 0) + } else { + ctlRules.insert(rules[ruleIndex], at: 0) + normalRules.insert(rules[ruleIndex], at: 0) + } } - } - if !ctlRules.isEmpty { - // if we found some CTL rules, split out into its own list let mainTracker = KnownTracker(domain: tracker.domain, - defaultAction: tracker.defaultAction, - owner: tracker.owner, - prevalence: tracker.prevalence, - subdomains: tracker.subdomains, - categories: tracker.categories, - rules: normalRules) + defaultAction: tracker.defaultAction, + owner: tracker.owner, + prevalence: tracker.prevalence, + subdomains: tracker.subdomains, + categories: tracker.categories, + rules: normalRules) let ctlTracker = KnownTracker(domain: tracker.domain, - defaultAction: tracker.defaultAction, - owner: tracker.owner, - prevalence: tracker.prevalence, - subdomains: tracker.subdomains, - categories: tracker.categories, - rules: ctlRules) + defaultAction: tracker.defaultAction, + owner: tracker.owner, + prevalence: tracker.prevalence, + subdomains: tracker.subdomains, + categories: tracker.categories, + rules: ctlRules) mainTDSTrackers[key] = mainTracker ctlTrackers[key] = ctlTracker - } else { - // copy tracker as-is - mainTDSTrackers[key] = tracker } + } else { + // copy tracker as-is + mainTDSTrackers[key] = tracker } } return (mainTDSTrackers, ctlTrackers) } -// private func filterTrackersWithoutCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { -// trackers.filter { (_, tracker) in tracker.containsCTLActions == false } -// } -// -// private func filterTrackersWithCTLAction(_ trackers: [String: KnownTracker]) -> [String: KnownTracker] { -// return Dictionary(uniqueKeysWithValues: trackers.filter { (_, tracker) in -// return tracker.containsCTLActions == true -// }.map { (trackerKey, trackerValue) in -// // Modify the tracker here -// if let rules = trackerValue.rules as [KnownTracker.Rule]? { -// let updatedRules = rules.map { (ruleValue) in -// var action = ruleValue.action -// if action == .blockCtlFB { -// if ruleValue.surrogate != nil { -// action = nil -// } else { -// action = .block -// } -// } -// let newRule = KnownTracker.Rule(rule: ruleValue.rule, -// surrogate: ruleValue.surrogate, -// action: action, -// options: ruleValue.options, -// exceptions: ruleValue.exceptions) -// return newRule -// } -// let updatedTracker = KnownTracker(domain: trackerValue.domain, -// defaultAction: trackerValue.defaultAction, -// owner: trackerValue.owner, -// prevalence: trackerValue.prevalence, -// subdomains: trackerValue.subdomains, -// categories: trackerValue.categories, -// rules: updatedRules) -// -// return (trackerKey, updatedTracker) -// } -// -// return (trackerKey, trackerValue) -// }) -// } - private func extractDomains(from entities: [String: Entity]) -> [String: String] { var domains = [String: String]() for entity in entities { @@ -184,10 +144,6 @@ private extension TrackerData { private extension KnownTracker { var containsCTLActions: Bool { - if let defaultAction = defaultAction, defaultAction == .blockCtlFB { - return true - } - if let rules = rules { for rule in rules { if let action = rule.action, action == .blockCtlFB { diff --git a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift index 72a553da3f..6679192c14 100644 --- a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift +++ b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift @@ -139,26 +139,28 @@ struct ScriptSourceProvider: ScriptSourceProviding { } private func mergeTrackerDataSets(rules: [ContentBlockerRulesManager.Rules]) -> (trackerData: TrackerData, encodedTrackerData: String) { - let tdsName = DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName - let tdsIndex = contentBlockingManager.currentRules.firstIndex(where: { $0.name == tdsName}) - var combinedTrackers: [String: KnownTracker] = [:] var combinedEntities: [String: Entity] = [:] var combinedDomains: [String: String] = [:] var cnames: [TrackerData.CnameDomain: TrackerData.TrackerDomain]? = [:] - if tdsIndex != nil { - cnames = rules[tdsIndex!].trackerData.cnames - rules.forEach { ruleSet in - ruleSet.trackerData.trackers.forEach { key, value in + let setsToCombine = [ DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName, ContentBlockerRulesLists.Constants.clickToLoadRulesListName ] + + setsToCombine.forEach { setName in + if let ruleSetIndex = contentBlockingManager.currentRules.firstIndex(where: { $0.name == setName }) { + rules[ruleSetIndex].trackerData.trackers.forEach { key, value in combinedTrackers[key] = value } - ruleSet.trackerData.entities.forEach { key, value in + rules[ruleSetIndex].trackerData.entities.forEach { key, value in combinedEntities[key] = value } - ruleSet.trackerData.domains.forEach { key, value in + rules[ruleSetIndex].trackerData.domains.forEach { key, value in combinedDomains[key] = value } + if setName == DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName { + // just copy the cnames from the main TDS + cnames = rules[ruleSetIndex].trackerData.cnames + } } } From 1856498fcd06800812ed0ea4e12a9fd131e54881 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Mon, 20 May 2024 19:29:10 -0700 Subject: [PATCH 36/60] remove dead ClickToLoadModel code --- .../ClickToLoad/ClickToLoadModel.swift | 56 ------------------- .../ClickToLoadModelTests.swift | 45 --------------- 2 files changed, 101 deletions(-) delete mode 100644 DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadModel.swift delete mode 100644 UnitTests/ContentBlocker/ClickToLoadModelTests.swift diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadModel.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadModel.swift deleted file mode 100644 index 5d51eed550..0000000000 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadModel.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// ClickToLoadModel.swift -// -// Copyright © 2021 DuckDuckGo. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - -struct ClickToLoadModel { - - // DELETE ME! - private static func loadFile(name: String) -> String? { - let pathPrefix = "social_images/" - let fileArgs = name.split(separator: ".") - let fileName = String(fileArgs[0]) - let fileExt = String(fileArgs[1]) - - let filePath = pathPrefix + fileName - - let imgURL = Bundle.main.url( - forResource: filePath, - withExtension: fileExt - ) - if imgURL == nil { - return nil - } - guard let base64String = try? Data(contentsOf: imgURL!).base64EncodedString() else { return nil } - let image = "data:image/" + (fileExt == "svg" ? "svg+xml" : fileExt) + ";base64," + base64String - return image - } - - static let getImage: [String: String] = { - return [ - "dax.png": Self.loadFile(name: "dax.png")!, - "loading_light.svg": Self.loadFile(name: "loading_light.svg")!, - "loading_dark.svg": Self.loadFile(name: "loading_dark.svg")!, - "blocked_facebook_logo.svg": Self.loadFile(name: "blocked_facebook_logo.svg")!, - "blocked_group.svg": Self.loadFile(name: "blocked_group.svg")!, - "blocked_page.svg": Self.loadFile(name: "blocked_page.svg")!, - "blocked_post.svg": Self.loadFile(name: "blocked_post.svg")!, - "blocked_video.svg": Self.loadFile(name: "blocked_video.svg")! - ] - }() -} diff --git a/UnitTests/ContentBlocker/ClickToLoadModelTests.swift b/UnitTests/ContentBlocker/ClickToLoadModelTests.swift deleted file mode 100644 index 4e938e8800..0000000000 --- a/UnitTests/ContentBlocker/ClickToLoadModelTests.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// ClickToLoadModelTests.swift -// -// Copyright © 2021 DuckDuckGo. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import XCTest -import TrackerRadarKit -import BrowserServicesKit -@testable import DuckDuckGo_Privacy_Browser - -class ClickToLoadModelTests: XCTestCase { - - func testClickToLoadModelInagesArePresent() { - - let nmodelImages = ClickToLoadModel.getImage - let expectedImages = [ - "dax.png", - "loading_light.svg", - "loading_dark.svg", - "blocked_facebook_logo.svg", - "blocked_group.svg", - "blocked_page.svg", - "blocked_post.svg", - "blocked_video.svg" - ] - - for (image) in expectedImages { - XCTAssertNotNil(nmodelImages[image], "Error: missing ClickToLoadModel image: " + image) - } - } - -} From 4a05050501b0d87a5d606c78bdb622aa61fe4d20 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Mon, 20 May 2024 20:01:49 -0700 Subject: [PATCH 37/60] Update ClickToLoadRulesSplitter.swift --- .../ClickToLoadRulesSplitter.swift | 108 +++++++++--------- 1 file changed, 52 insertions(+), 56 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift index 3aeda2ec45..19750695cc 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift @@ -35,33 +35,29 @@ struct ClickToLoadRulesSplitter { } func split() -> (withoutBlockCTL: ContentBlockerRulesList, withBlockCTL: ContentBlockerRulesList)? { - let splitTDS = rulesList.trackerData != nil ? split(trackerData: rulesList.trackerData!) : nil - - if splitTDS != nil { - return ( - ContentBlockerRulesList(name: rulesList.name, - trackerData: splitTDS?.withoutBlockCTL, - fallbackTrackerData: split(trackerData: rulesList.fallbackTrackerData)!.withoutBlockCTL), - ContentBlockerRulesList(name: ContentBlockerRulesLists.Constants.clickToLoadRulesListName, - trackerData: splitTDS?.withBlockCTL, - fallbackTrackerData: split(trackerData: rulesList.fallbackTrackerData)!.withBlockCTL) - ) - } - return nil + guard let trackerData = rulesList.trackerData, let splitTDS = split(trackerData: trackerData) else { return nil } + + return ( + ContentBlockerRulesList(name: rulesList.name, + trackerData: splitTDS.withoutBlockCTL, + fallbackTrackerData: split(trackerData: rulesList.fallbackTrackerData)!.withoutBlockCTL), + ContentBlockerRulesList(name: ContentBlockerRulesLists.Constants.clickToLoadRulesListName, + trackerData: splitTDS.withBlockCTL, + fallbackTrackerData: split(trackerData: rulesList.fallbackTrackerData)!.withBlockCTL) + ) } private func split(trackerData: TrackerDataManager.DataSet) -> (withoutBlockCTL: TrackerDataManager.DataSet, withBlockCTL: TrackerDataManager.DataSet)? { let (mainTrackers, ctlTrackers) = processCTLActions(trackerData.tds.trackers) - if !ctlTrackers.isEmpty { - let trackerDataWithoutBlockCTL = makeTrackerData(using: mainTrackers, originalTDS: trackerData.tds) - let trackerDataWithBlockCTL = makeTrackerData(using: ctlTrackers, originalTDS: trackerData.tds) - - return ( - (tds: trackerDataWithoutBlockCTL, etag: Constants.tdsRuleListPrefix + trackerData.etag), - (tds: trackerDataWithBlockCTL, etag: Constants.clickToLoadRuleListPrefix + trackerData.etag) - ) - } - return nil + guard !ctlTrackers.isEmpty else { return nil } + + let trackerDataWithoutBlockCTL = makeTrackerData(using: mainTrackers, originalTDS: trackerData.tds) + let trackerDataWithBlockCTL = makeTrackerData(using: ctlTrackers, originalTDS: trackerData.tds) + + return ( + (tds: trackerDataWithoutBlockCTL, etag: Constants.tdsRuleListPrefix + trackerData.etag), + (tds: trackerDataWithBlockCTL, etag: Constants.clickToLoadRuleListPrefix + trackerData.etag) + ) } private func makeTrackerData(using trackers: [String: KnownTracker], originalTDS: TrackerData) -> TrackerData { @@ -78,41 +74,41 @@ struct ClickToLoadRulesSplitter { var ctlTrackers: [String: KnownTracker] = [:] for (key, tracker) in trackers { - if tracker.containsCTLActions { - // if we found some CTL rules, split out into its own list - if let rules = tracker.rules as [KnownTracker.Rule]? { - var normalRules: [KnownTracker.Rule] = [] - var ctlRules: [KnownTracker.Rule] = [] - - for ruleIndex in rules.indices.reversed() { - if let action = rules[ruleIndex].action, action == .blockCtlFB { - ctlRules.insert(rules[ruleIndex], at: 0) - } else { - ctlRules.insert(rules[ruleIndex], at: 0) - normalRules.insert(rules[ruleIndex], at: 0) - } - } + guard tracker.containsCTLActions, let rules = tracker.rules else { + mainTDSTrackers[key] = tracker + continue + } - let mainTracker = KnownTracker(domain: tracker.domain, - defaultAction: tracker.defaultAction, - owner: tracker.owner, - prevalence: tracker.prevalence, - subdomains: tracker.subdomains, - categories: tracker.categories, - rules: normalRules) - let ctlTracker = KnownTracker(domain: tracker.domain, - defaultAction: tracker.defaultAction, - owner: tracker.owner, - prevalence: tracker.prevalence, - subdomains: tracker.subdomains, - categories: tracker.categories, - rules: ctlRules) - mainTDSTrackers[key] = mainTracker - ctlTrackers[key] = ctlTracker + // if we found some CTL rules, split out into its own list + if let rules = tracker.rules as [KnownTracker.Rule]? { + var mainRules: [KnownTracker.Rule] = [] + var ctlRules: [KnownTracker.Rule] = [] + + for rule in rules.reversed() { + if let action = rule.action, action == .blockCtlFB { + ctlRules.insert(rule, at: 0) + } else { + ctlRules.insert(rule, at: 0) + mainRules.insert(rule, at: 0) + } } - } else { - // copy tracker as-is - mainTDSTrackers[key] = tracker + + let mainTracker = KnownTracker(domain: tracker.domain, + defaultAction: tracker.defaultAction, + owner: tracker.owner, + prevalence: tracker.prevalence, + subdomains: tracker.subdomains, + categories: tracker.categories, + rules: mainRules) + let ctlTracker = KnownTracker(domain: tracker.domain, + defaultAction: tracker.defaultAction, + owner: tracker.owner, + prevalence: tracker.prevalence, + subdomains: tracker.subdomains, + categories: tracker.categories, + rules: ctlRules) + mainTDSTrackers[key] = mainTracker + ctlTrackers[key] = ctlTracker } } From 0072d094e4f0d29a8d1bd630203ab2c40da1eea5 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Mon, 20 May 2024 20:19:44 -0700 Subject: [PATCH 38/60] code review nits --- .../Tab/TabExtensions/ContentBlockingTabExtension.swift | 2 +- .../Tab/TabExtensions/FBProtectionTabExtension.swift | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift index 58164b1397..7ab4f5ddc6 100644 --- a/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/ContentBlockingTabExtension.swift @@ -157,7 +157,7 @@ extension ContentBlockingTabExtension: SurrogatesUserScriptDelegate { } func surrogatesUserScriptShouldProcessCTLTrackers(_ script: SurrogatesUserScript) -> Bool { - return fbBlockingEnabledProvider.fbBlockingEnabled + fbBlockingEnabledProvider.fbBlockingEnabled } func surrogatesUserScript(_ script: SurrogatesUserScript, detectedTracker tracker: DetectedRequest, withSurrogate host: String) { diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index 34f4695c21..6d4826b14c 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -50,7 +50,7 @@ final class FBProtectionTabExtension { @MainActor public func trackerDetected() { - self.clickToLoadUserScript?.displayClickToLoadPlaceholders() + clickToLoadUserScript?.displayClickToLoadPlaceholders() } } @@ -61,11 +61,11 @@ extension FBProtectionTabExtension { let privacyConfiguration = privacyConfigurationManager.privacyConfig let featureEnabled = privacyConfiguration.isFeature(.clickToLoad, enabledForDomain: url.host) - enableFBProtection(enable: featureEnabled) + setFBProtection(enable: featureEnabled) } @discardableResult - private func enableFBProtection(enable: Bool) -> Bool { + private func setFBProtection(enable: Bool) -> Bool { if #unavailable(OSX 11) { // disable CTL for Catalina and earlier return false } @@ -103,7 +103,7 @@ extension FBProtectionTabExtension: ClickToLoadUserScriptDelegate { return true } - if enableFBProtection(enable: false) { + if setFBProtection(enable: false) { return true } else { return false From d19a19f8160ab3384d69997f04335b68edc98114 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Mon, 20 May 2024 22:10:12 -0700 Subject: [PATCH 39/60] cleanup FIXME --- DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index 6d4826b14c..c17e647970 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -78,14 +78,12 @@ extension FBProtectionTabExtension { do { try userContentController.enableGlobalContentRuleList(withIdentifier: ContentBlockerRulesLists.Constants.clickToLoadRulesListName) } catch { -// FIXME assertionFailure("Missing FB List") return false } } else { do { try userContentController.disableGlobalContentRuleList(withIdentifier: ContentBlockerRulesLists.Constants.clickToLoadRulesListName) } catch { -// FIXME assertionFailure("Missing FB List") return false } } From 223b434ae5b73211b873109c04d9fa69e24ffef8 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Mon, 20 May 2024 22:57:07 -0700 Subject: [PATCH 40/60] update to BSK WIP branch --- DuckDuckGo.xcodeproj/project.pbxproj | 4 +-- .../xcshareddata/swiftpm/Package.resolved | 29 +++++++------------ 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index a441853db4..c233e7f174 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -12897,8 +12897,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; requirement = { - kind = exactVersion; - version = 145.3.2; + branch = "la/clicktoload-redux"; + kind = branch; }; }; 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = { diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 4c9f1a616b..44b4081e2d 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -32,8 +32,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { - "revision" : "1c692ce52ffd74edd1d1180e038a14a0cf1dd736", - "version" : "145.3.2" + "branch" : "la/clicktoload-redux", + "revision" : "9ec881380f8d8421e4d7f8e3791b43108a213a3a" } }, { @@ -41,8 +41,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/content-scope-scripts", "state" : { - "revision" : "bb8e7e62104ed6506c7bfd3ef7aa4aca3686ed4f", - "version" : "5.15.0" + "revision" : "1bb3bc5eb565735051f342a87b5405d4374876c7", + "version" : "5.12.0" } }, { @@ -50,8 +50,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/duckduckgo-autofill.git", "state" : { - "revision" : "10aeff1ec7f533d1705233a9b14f9393a699b1c0", - "version" : "11.0.2" + "revision" : "6053999d6af384a716ab0ce7205dbab5d70ed1b3", + "version" : "11.0.1" } }, { @@ -63,15 +63,6 @@ "version" : "2.3.0" } }, - { - "identity" : "gzipswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/1024jp/GzipSwift.git", - "state" : { - "revision" : "731037f6cc2be2ec01562f6597c1d0aa3fe6fd05", - "version" : "6.0.1" - } - }, { "identity" : "lottie-spm", "kind" : "remoteSourceControl", @@ -104,8 +95,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/privacy-dashboard", "state" : { - "revision" : "25b8903191a40b21b09525085fe325ae3386092e", - "version" : "3.6.0" + "revision" : "14b13d0c3db38f471ce4ba1ecb502ee1986c84d7", + "version" : "3.5.0" } }, { @@ -176,8 +167,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/TrackerRadarKit", "state" : { - "revision" : "6c84fd19139414fc0edbf9673ade06e532a564f0", - "version" : "2.0.0" + "revision" : "2a79006fccde6483f47f9d508b11f153f24da30d", + "version" : "2.1.0" } }, { From cb42dd6ce819d1ecdf37a57b6827fbd9d67485d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20=C5=81yp?= Date: Tue, 21 May 2024 12:58:34 +0200 Subject: [PATCH 41/60] Update proj file and BSK ref --- DuckDuckGo.xcodeproj/project.pbxproj | 12 --------- .../xcshareddata/swiftpm/Package.resolved | 27 ++++++++++++------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index c233e7f174..3b0280ea8e 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -233,7 +233,6 @@ 3706FA80293F65D500E42796 /* TabLazyLoaderDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37534CA2281132CB002621E7 /* TabLazyLoaderDataSource.swift */; }; 3706FA81293F65D500E42796 /* LoginImport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B723DF426B0002B00E14D75 /* LoginImport.swift */; }; 3706FA83293F65D500E42796 /* LazyLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37534C9F28113101002621E7 /* LazyLoadable.swift */; }; - 3706FA84293F65D500E42796 /* ClickToLoadModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */; }; 3706FA85293F65D500E42796 /* KeyedCodingExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0230C0A2272080090018F728 /* KeyedCodingExtension.swift */; }; 3706FA87293F65D500E42796 /* DownloadListStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C0B22F26E61D630031CB7F /* DownloadListStore.swift */; }; 3706FA88293F65D500E42796 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85799C1725DEBB3F0007EC87 /* Logging.swift */; }; @@ -809,7 +808,6 @@ 3706FE3A293F661700E42796 /* MockVariantManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B69B504A2726CA2900758A2B /* MockVariantManager.swift */; }; 3706FE3C293F661700E42796 /* FireproofDomainsStoreMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6BBF1712744CE36004F850E /* FireproofDomainsStoreMock.swift */; }; 3706FE3D293F661700E42796 /* DataEncryptionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BA1A6D8258C0CB300F6F690 /* DataEncryptionTests.swift */; }; - 3706FE3E293F661700E42796 /* ClickToLoadModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1E52B42798CF98002EC53C /* ClickToLoadModelTests.swift */; }; 3706FE3F293F661700E42796 /* FileStoreMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6A5A27D25B9403E00AA7ADA /* FileStoreMock.swift */; }; 3706FE40293F661700E42796 /* BWResponseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D3B1AC329378953006F4388 /* BWResponseTests.swift */; }; 3706FE41293F661700E42796 /* DownloadListCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B693955E26F1C17F0015B914 /* DownloadListCoordinatorTests.swift */; }; @@ -2516,9 +2514,7 @@ D64A5FF92AEA5C2B00B6D6E7 /* HomeButtonMenuFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64A5FF72AEA5C2B00B6D6E7 /* HomeButtonMenuFactory.swift */; }; EA0BA3A9272217E6002A0B6C /* ClickToLoadUserScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */; }; EA18D1CA272F0DC8006DC101 /* social_images in Resources */ = {isa = PBXBuildFile; fileRef = EA18D1C9272F0DC8006DC101 /* social_images */; }; - EA1E52B52798CF98002EC53C /* ClickToLoadModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1E52B42798CF98002EC53C /* ClickToLoadModelTests.swift */; }; EA8AE76A279FBDB20078943E /* ClickToLoadTDSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */; }; - EAE42800275D47FA00DAC26B /* ClickToLoadModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */; }; EAF52F4F2B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; EAF52F502B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; EE02D41A2BB4609900DBE6B3 /* UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D4192BB4609900DBE6B3 /* UITests.swift */; }; @@ -4045,9 +4041,7 @@ D64A5FF72AEA5C2B00B6D6E7 /* HomeButtonMenuFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeButtonMenuFactory.swift; sourceTree = ""; }; EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClickToLoadUserScript.swift; sourceTree = ""; }; EA18D1C9272F0DC8006DC101 /* social_images */ = {isa = PBXFileReference; lastKnownFileType = folder; path = social_images; sourceTree = ""; }; - EA1E52B42798CF98002EC53C /* ClickToLoadModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadModelTests.swift; sourceTree = ""; }; EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadTDSTests.swift; sourceTree = ""; }; - EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClickToLoadModel.swift; sourceTree = ""; }; EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadRulesSplitter.swift; sourceTree = ""; }; EE02D4192BB4609900DBE6B3 /* UITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITests.swift; sourceTree = ""; }; EE02D41B2BB460A600DBE6B3 /* BrowsingHistoryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrowsingHistoryTests.swift; sourceTree = ""; }; @@ -5404,7 +5398,6 @@ children = ( 98EB5D0F27516A4800681FE6 /* AppPrivacyConfigurationTests.swift */, 9833913227AAAEEE00DAF119 /* EmbeddedTrackerDataTests.swift */, - EA1E52B42798CF98002EC53C /* ClickToLoadModelTests.swift */, EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */, B610F2E527AA388100FCEBE9 /* ContentBlockingUpdatingTests.swift */, B6AE39F029373AF200C37AA4 /* EmptyAttributionRulesProver.swift */, @@ -8159,7 +8152,6 @@ EAF52F4D2B93AF71003D73EB /* ClickToLoad */ = { isa = PBXGroup; children = ( - EAE427FF275D47FA00DAC26B /* ClickToLoadModel.swift */, EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */, EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */, ); @@ -9492,7 +9484,6 @@ 4BF97AD72B43C53D00EB4240 /* NetworkProtectionIPCTunnelController.swift in Sources */, EEC4A66E2B2C894F00F7C0AA /* VPNLocationPreferenceItemModel.swift in Sources */, 3706FA83293F65D500E42796 /* LazyLoadable.swift in Sources */, - 3706FA84293F65D500E42796 /* ClickToLoadModel.swift in Sources */, 3706FA85293F65D500E42796 /* KeyedCodingExtension.swift in Sources */, 3706FA87293F65D500E42796 /* DownloadListStore.swift in Sources */, 37197EAB2942443D00394917 /* WebViewContainerView.swift in Sources */, @@ -10416,7 +10407,6 @@ 3706FE3A293F661700E42796 /* MockVariantManager.swift in Sources */, 3706FE3C293F661700E42796 /* FireproofDomainsStoreMock.swift in Sources */, 3706FE3D293F661700E42796 /* DataEncryptionTests.swift in Sources */, - 3706FE3E293F661700E42796 /* ClickToLoadModelTests.swift in Sources */, C17CA7B32B9B5317008EC3C1 /* MockAutofillPopoverPresenter.swift in Sources */, 3706FE3F293F661700E42796 /* FileStoreMock.swift in Sources */, B6619F042B17123200CD9186 /* DataImportViewModelTests.swift in Sources */, @@ -10858,7 +10848,6 @@ 4B9DB03E2A983B24000927DB /* JoinWaitlistView.swift in Sources */, 1ED910D52B63BFB300936947 /* IdentityTheftRestorationPagesUserScript.swift in Sources */, 37534CA028113101002621E7 /* LazyLoadable.swift in Sources */, - EAE42800275D47FA00DAC26B /* ClickToLoadModel.swift in Sources */, 0230C0A3272080090018F728 /* KeyedCodingExtension.swift in Sources */, 31AA6B972B960B870025014E /* DataBrokerProtectionLoginItemPixels.swift in Sources */, B6BF5D852946FFDA006742B1 /* PrivacyDashboardTabExtension.swift in Sources */, @@ -11802,7 +11791,6 @@ 4BA1A6D9258C0CB300F6F690 /* DataEncryptionTests.swift in Sources */, B6AA64732994B43300D99CD6 /* FutureExtensionTests.swift in Sources */, B603975329C1FFAE00902A34 /* ExpectedNavigationExtension.swift in Sources */, - EA1E52B52798CF98002EC53C /* ClickToLoadModelTests.swift in Sources */, 56BA1E802BAB2E43001CF69F /* ErrorPageTabExtensionTest.swift in Sources */, B603975029C1FF5F00902A34 /* TestsURLExtension.swift in Sources */, B6A5A27E25B9403E00AA7ADA /* FileStoreMock.swift in Sources */, diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 44b4081e2d..24f149493c 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { "branch" : "la/clicktoload-redux", - "revision" : "9ec881380f8d8421e4d7f8e3791b43108a213a3a" + "revision" : "1a4a2b86804812d2286bfbfb4f692d18c5e19f19" } }, { @@ -41,8 +41,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/content-scope-scripts", "state" : { - "revision" : "1bb3bc5eb565735051f342a87b5405d4374876c7", - "version" : "5.12.0" + "revision" : "bb8e7e62104ed6506c7bfd3ef7aa4aca3686ed4f", + "version" : "5.15.0" } }, { @@ -50,8 +50,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/duckduckgo-autofill.git", "state" : { - "revision" : "6053999d6af384a716ab0ce7205dbab5d70ed1b3", - "version" : "11.0.1" + "revision" : "10aeff1ec7f533d1705233a9b14f9393a699b1c0", + "version" : "11.0.2" } }, { @@ -63,6 +63,15 @@ "version" : "2.3.0" } }, + { + "identity" : "gzipswift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/1024jp/GzipSwift.git", + "state" : { + "revision" : "731037f6cc2be2ec01562f6597c1d0aa3fe6fd05", + "version" : "6.0.1" + } + }, { "identity" : "lottie-spm", "kind" : "remoteSourceControl", @@ -95,8 +104,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/privacy-dashboard", "state" : { - "revision" : "14b13d0c3db38f471ce4ba1ecb502ee1986c84d7", - "version" : "3.5.0" + "revision" : "25b8903191a40b21b09525085fe325ae3386092e", + "version" : "3.6.0" } }, { @@ -167,8 +176,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/TrackerRadarKit", "state" : { - "revision" : "2a79006fccde6483f47f9d508b11f153f24da30d", - "version" : "2.1.0" + "revision" : "c01e6a59d000356b58ec77053e0a99d538be56a5", + "version" : "2.1.1" } }, { From 098696e8270574d96b3f82a65b2067cb919bca63 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Wed, 22 May 2024 08:27:21 -0700 Subject: [PATCH 42/60] remove unused var --- .../ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift index 19750695cc..72a7d710b2 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift @@ -74,7 +74,7 @@ struct ClickToLoadRulesSplitter { var ctlTrackers: [String: KnownTracker] = [:] for (key, tracker) in trackers { - guard tracker.containsCTLActions, let rules = tracker.rules else { + guard tracker.containsCTLActions else { mainTDSTrackers[key] = tracker continue } From b01f13e08d2284e19562d9ed8a0334d5405306e7 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Wed, 22 May 2024 17:13:52 -0700 Subject: [PATCH 43/60] update CTL action to blockCTLFB --- .../xcshareddata/swiftpm/Package.resolved | 6 +++--- .../ClickToLoad/ClickToLoadRulesSplitter.swift | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 24f149493c..a92beeb3b4 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,7 +33,7 @@ "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { "branch" : "la/clicktoload-redux", - "revision" : "1a4a2b86804812d2286bfbfb4f692d18c5e19f19" + "revision" : "134d01bda3fae9ff68064489ff0381c7bc9679bc" } }, { @@ -176,8 +176,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/TrackerRadarKit", "state" : { - "revision" : "c01e6a59d000356b58ec77053e0a99d538be56a5", - "version" : "2.1.1" + "branch" : "la/blockCTLFB", + "revision" : "af2ade8afe86cc55b292b22a58ca6bc022927baf" } }, { diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift index 72a7d710b2..8a11413672 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift @@ -85,7 +85,7 @@ struct ClickToLoadRulesSplitter { var ctlRules: [KnownTracker.Rule] = [] for rule in rules.reversed() { - if let action = rule.action, action == .blockCtlFB { + if let action = rule.action, action == .blockCTLFB { ctlRules.insert(rule, at: 0) } else { ctlRules.insert(rule, at: 0) @@ -142,7 +142,7 @@ private extension KnownTracker { var containsCTLActions: Bool { if let rules = rules { for rule in rules { - if let action = rule.action, action == .blockCtlFB { + if let action = rule.action, action == .blockCTLFB { return true } } From 084d24df0785dc9aaf43c8a43fb26680b3f7a63f Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Wed, 22 May 2024 17:14:13 -0700 Subject: [PATCH 44/60] add CTL test for rules splitting --- .../ContentBlocker/ClickToLoadTDSTests.swift | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift index 7965f83e36..b0264f3675 100644 --- a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift +++ b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift @@ -21,6 +21,23 @@ import TrackerRadarKit import BrowserServicesKit @testable import DuckDuckGo_Privacy_Browser +private extension KnownTracker { + + var countCTLActions: Int { + var count = 0 + + if let rules = rules { + for rule in rules { + if let action = rule.action, action == .blockCTLFB { + count += 1 + } + } + } + return count + } + +} + class ClickToLoadTDSTests: XCTestCase { func testEnsureClickToLoadTDSCompiles() throws { @@ -70,4 +87,52 @@ class ClickToLoadTDSTests: XCTestCase { wait(for: [removed], timeout: 5.0) } + + func testClickToLoadTDSSplit() throws { + + let trackerData = AppTrackerDataSetProvider().embeddedData + let etag = AppTrackerDataSetProvider().embeddedDataEtag + let trackerManager = TrackerDataManager(etag: etag, + data: trackerData, + embeddedDataProvider: AppTrackerDataSetProvider()) + let mockAdAttributing = MockAttributing() + + let cbrLists = ContentBlockerRulesLists(trackerDataManager: trackerManager, adClickAttribution: mockAdAttributing) + let ruleSets = cbrLists.contentBlockerRulesLists + let ctlTdsName = ContentBlockerRulesLists.Constants.clickToLoadRulesListName + let mainTdsName = DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName + + let mainRules = ruleSets.first(where: { $0.name == mainTdsName}) + let ctlRules = ruleSets.first(where: { $0.name == ctlTdsName}) + + let mainTrackerData = mainRules?.trackerData + let mainTrackers = mainTrackerData?.tds.trackers + + let ctlTrackerData = ctlRules?.trackerData + let ctlTrackers = ctlTrackerData?.tds.trackers + + let fbMainTracker = mainTrackers?["facebook.net"] + let fbCtlTracker = ctlTrackers?["facebook.net"] + + let fbMainRules = fbMainTracker?.rules + let fbCtlRules = fbCtlTracker?.rules + + let fbMainRuleCount = fbMainRules!.count + let fbCtlRuleCount = fbCtlRules!.count + + let mainCtlRuleCount = fbMainTracker!.countCTLActions + let ctlCtlRuleCount = fbCtlTracker!.countCTLActions + + // ensure both rulesets contains facebook.net rules + XCTAssert(fbMainRuleCount > 0) + XCTAssert(fbCtlRuleCount > 0) + + // ensure FB CTL rules include CTL custom actions, and main rules FB do not + XCTAssert(mainCtlRuleCount == 0) + XCTAssert(ctlCtlRuleCount > 0) + + // ensure FB CTL rules are the sum of the main rules + CTL custom action rules + XCTAssert(fbMainRuleCount + ctlCtlRuleCount == fbCtlRuleCount) + + } } From 2a2cf713c8b102ce3486215efbe48ceacd73fa1e Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Wed, 22 May 2024 21:53:47 -0700 Subject: [PATCH 45/60] test nits --- .../ContentBlocker/ClickToLoadTDSTests.swift | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift index b0264f3675..53e3afc214 100644 --- a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift +++ b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift @@ -112,27 +112,27 @@ class ClickToLoadTDSTests: XCTestCase { let ctlTrackers = ctlTrackerData?.tds.trackers let fbMainTracker = mainTrackers?["facebook.net"] - let fbCtlTracker = ctlTrackers?["facebook.net"] + let fbCTLTracker = ctlTrackers?["facebook.net"] let fbMainRules = fbMainTracker?.rules - let fbCtlRules = fbCtlTracker?.rules + let fbCTLRules = fbCTLTracker?.rules let fbMainRuleCount = fbMainRules!.count - let fbCtlRuleCount = fbCtlRules!.count + let fbCTLRuleCount = fbCTLRules!.count - let mainCtlRuleCount = fbMainTracker!.countCTLActions - let ctlCtlRuleCount = fbCtlTracker!.countCTLActions + let mainCTLRuleCount = fbMainTracker!.countCTLActions + let ctlCTLRuleCount = fbCTLTracker!.countCTLActions // ensure both rulesets contains facebook.net rules XCTAssert(fbMainRuleCount > 0) - XCTAssert(fbCtlRuleCount > 0) + XCTAssert(fbCTLRuleCount > 0) // ensure FB CTL rules include CTL custom actions, and main rules FB do not - XCTAssert(mainCtlRuleCount == 0) - XCTAssert(ctlCtlRuleCount > 0) + XCTAssert(mainCTLRuleCount == 0) + XCTAssert(ctlCTLRuleCount > 0) // ensure FB CTL rules are the sum of the main rules + CTL custom action rules - XCTAssert(fbMainRuleCount + ctlCtlRuleCount == fbCtlRuleCount) + XCTAssert(fbMainRuleCount + ctlCTLRuleCount == fbCTLRuleCount) } } From 85cc3090d0b286e9dc27f63cf9ce31da8178333e Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 31 May 2024 11:00:52 -0700 Subject: [PATCH 46/60] move ClickToLoadRulesSpliter to BSK Also remove CTL subdir to simplify ClickToLoadUserScript diff --- DuckDuckGo.xcodeproj/project.pbxproj | 16 +- .../ClickToLoadRulesSplitter.swift | 153 ------------------ .../ClickToLoadUserScript.swift | 0 3 files changed, 1 insertion(+), 168 deletions(-) delete mode 100644 DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift rename DuckDuckGo/ContentBlocker/{ClickToLoad => }/ClickToLoadUserScript.swift (100%) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 3b0280ea8e..d186602a40 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -2515,8 +2515,6 @@ EA0BA3A9272217E6002A0B6C /* ClickToLoadUserScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */; }; EA18D1CA272F0DC8006DC101 /* social_images in Resources */ = {isa = PBXBuildFile; fileRef = EA18D1C9272F0DC8006DC101 /* social_images */; }; EA8AE76A279FBDB20078943E /* ClickToLoadTDSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */; }; - EAF52F4F2B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; - EAF52F502B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */; }; EE02D41A2BB4609900DBE6B3 /* UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D4192BB4609900DBE6B3 /* UITests.swift */; }; EE02D41C2BB460A600DBE6B3 /* BrowsingHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE02D41B2BB460A600DBE6B3 /* BrowsingHistoryTests.swift */; }; EE02D4202BB460C000DBE6B3 /* BrowserServicesKit in Frameworks */ = {isa = PBXBuildFile; productRef = EE02D41F2BB460C000DBE6B3 /* BrowserServicesKit */; }; @@ -4042,7 +4040,6 @@ EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClickToLoadUserScript.swift; sourceTree = ""; }; EA18D1C9272F0DC8006DC101 /* social_images */ = {isa = PBXFileReference; lastKnownFileType = folder; path = social_images; sourceTree = ""; }; EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadTDSTests.swift; sourceTree = ""; }; - EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadRulesSplitter.swift; sourceTree = ""; }; EE02D4192BB4609900DBE6B3 /* UITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITests.swift; sourceTree = ""; }; EE02D41B2BB460A600DBE6B3 /* BrowsingHistoryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrowsingHistoryTests.swift; sourceTree = ""; }; EE0429DF2BA31D2F009EB20F /* FindInPageTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FindInPageTests.swift; sourceTree = ""; }; @@ -5225,7 +5222,7 @@ B68D21CE2ACBC9E7002DA3C2 /* Mocks */, 026ADE1326C3010C002518EE /* macos-config.json */, 9833913027AAA4B500DAF119 /* trackerData.json */, - EAF52F4D2B93AF71003D73EB /* ClickToLoad */, + EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */, 85AC3B0425D6B1D800C7D2AA /* ScriptSourceProviding.swift */, 9826B09F2747DF3D0092F683 /* ContentBlocking.swift */, 9812D894276CEDA5004B6181 /* ContentBlockerRulesLists.swift */, @@ -8149,15 +8146,6 @@ path = Resources; sourceTree = ""; }; - EAF52F4D2B93AF71003D73EB /* ClickToLoad */ = { - isa = PBXGroup; - children = ( - EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */, - EAF52F4E2B93B024003D73EB /* ClickToLoadRulesSplitter.swift */, - ); - path = ClickToLoad; - sourceTree = ""; - }; EEA3EEAF2B24EB5100E8333A /* VPNLocation */ = { isa = PBXGroup; children = ( @@ -9643,7 +9631,6 @@ 3706FAFE293F65D500E42796 /* SpacerNode.swift in Sources */, 3706FB00293F65D500E42796 /* PasswordManagementCreditCardModel.swift in Sources */, BBDFDC5D2B2B8E2100F62D90 /* DataBrokerProtectionExternalWaitlistPixels.swift in Sources */, - EAF52F502B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */, 3706FB01293F65D500E42796 /* NSEventExtension.swift in Sources */, 3706FB02293F65D500E42796 /* Onboarding.swift in Sources */, 4B9DB0482A983B24000927DB /* WaitlistRootView.swift in Sources */, @@ -11082,7 +11069,6 @@ 4BE6547E271FCD4D008D1D63 /* PasswordManagementIdentityModel.swift in Sources */, 85C6A29625CC1FFD00EEB5F1 /* UserDefaultsWrapper.swift in Sources */, 85625998269C9C5F00EE44BC /* PasswordManagementPopover.swift in Sources */, - EAF52F4F2B93B024003D73EB /* ClickToLoadRulesSplitter.swift in Sources */, 1DDF076328F815AD00EDFBE3 /* BWCommunicator.swift in Sources */, 9FEE98652B846870002E44E8 /* AddEditBookmarkView.swift in Sources */, 85589E9127BFB9810038AD11 /* HomePageRecentlyVisitedModel.swift in Sources */, diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift b/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift deleted file mode 100644 index 8a11413672..0000000000 --- a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadRulesSplitter.swift +++ /dev/null @@ -1,153 +0,0 @@ -// -// ClickToLoadRulesSplitter.swift -// -// Copyright © 2023 DuckDuckGo. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import TrackerRadarKit -import BrowserServicesKit - -struct ClickToLoadRulesSplitter { - - public enum Constants { - - public static let clickToLoadRuleListPrefix = "CTL_" - public static let tdsRuleListPrefix = "TDS_" - - } - - private let rulesList: ContentBlockerRulesList - - init(rulesList: ContentBlockerRulesList) { - self.rulesList = rulesList - } - - func split() -> (withoutBlockCTL: ContentBlockerRulesList, withBlockCTL: ContentBlockerRulesList)? { - guard let trackerData = rulesList.trackerData, let splitTDS = split(trackerData: trackerData) else { return nil } - - return ( - ContentBlockerRulesList(name: rulesList.name, - trackerData: splitTDS.withoutBlockCTL, - fallbackTrackerData: split(trackerData: rulesList.fallbackTrackerData)!.withoutBlockCTL), - ContentBlockerRulesList(name: ContentBlockerRulesLists.Constants.clickToLoadRulesListName, - trackerData: splitTDS.withBlockCTL, - fallbackTrackerData: split(trackerData: rulesList.fallbackTrackerData)!.withBlockCTL) - ) - } - - private func split(trackerData: TrackerDataManager.DataSet) -> (withoutBlockCTL: TrackerDataManager.DataSet, withBlockCTL: TrackerDataManager.DataSet)? { - let (mainTrackers, ctlTrackers) = processCTLActions(trackerData.tds.trackers) - guard !ctlTrackers.isEmpty else { return nil } - - let trackerDataWithoutBlockCTL = makeTrackerData(using: mainTrackers, originalTDS: trackerData.tds) - let trackerDataWithBlockCTL = makeTrackerData(using: ctlTrackers, originalTDS: trackerData.tds) - - return ( - (tds: trackerDataWithoutBlockCTL, etag: Constants.tdsRuleListPrefix + trackerData.etag), - (tds: trackerDataWithBlockCTL, etag: Constants.clickToLoadRuleListPrefix + trackerData.etag) - ) - } - - private func makeTrackerData(using trackers: [String: KnownTracker], originalTDS: TrackerData) -> TrackerData { - let entities = originalTDS.extractEntities(for: trackers) - let domains = extractDomains(from: entities) - return TrackerData(trackers: trackers, - entities: entities, - domains: domains, - cnames: originalTDS.cnames) - } - - private func processCTLActions(_ trackers: [String: KnownTracker]) -> (mainTrackers: [String: KnownTracker], ctlTrackers: [String: KnownTracker]) { - var mainTDSTrackers: [String: KnownTracker] = [:] - var ctlTrackers: [String: KnownTracker] = [:] - - for (key, tracker) in trackers { - guard tracker.containsCTLActions else { - mainTDSTrackers[key] = tracker - continue - } - - // if we found some CTL rules, split out into its own list - if let rules = tracker.rules as [KnownTracker.Rule]? { - var mainRules: [KnownTracker.Rule] = [] - var ctlRules: [KnownTracker.Rule] = [] - - for rule in rules.reversed() { - if let action = rule.action, action == .blockCTLFB { - ctlRules.insert(rule, at: 0) - } else { - ctlRules.insert(rule, at: 0) - mainRules.insert(rule, at: 0) - } - } - - let mainTracker = KnownTracker(domain: tracker.domain, - defaultAction: tracker.defaultAction, - owner: tracker.owner, - prevalence: tracker.prevalence, - subdomains: tracker.subdomains, - categories: tracker.categories, - rules: mainRules) - let ctlTracker = KnownTracker(domain: tracker.domain, - defaultAction: tracker.defaultAction, - owner: tracker.owner, - prevalence: tracker.prevalence, - subdomains: tracker.subdomains, - categories: tracker.categories, - rules: ctlRules) - mainTDSTrackers[key] = mainTracker - ctlTrackers[key] = ctlTracker - } - } - - return (mainTDSTrackers, ctlTrackers) - } - - private func extractDomains(from entities: [String: Entity]) -> [String: String] { - var domains = [String: String]() - for entity in entities { - for domain in entity.value.domains ?? [] { - domains[domain] = entity.key - } - } - return domains - } - -} - -private extension TrackerData { - - func extractEntities(for trackers: [String: KnownTracker]) -> [String: Entity] { - let trackerOwners = Set(trackers.values.compactMap { $0.owner?.name }) - let entities = entities.filter { trackerOwners.contains($0.key) } - return entities - } - -} - -private extension KnownTracker { - - var containsCTLActions: Bool { - if let rules = rules { - for rule in rules { - if let action = rule.action, action == .blockCTLFB { - return true - } - } - } - return false - } - -} diff --git a/DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift b/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift similarity index 100% rename from DuckDuckGo/ContentBlocker/ClickToLoad/ClickToLoadUserScript.swift rename to DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift From 3673f70907352a4405ed3900b2e34be326a7d58d Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 31 May 2024 11:01:04 -0700 Subject: [PATCH 47/60] Update ClickToLoadTDSTests.swift --- UnitTests/ContentBlocker/ClickToLoadTDSTests.swift | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift index 53e3afc214..9acf85ef2e 100644 --- a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift +++ b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift @@ -23,18 +23,7 @@ import BrowserServicesKit private extension KnownTracker { - var countCTLActions: Int { - var count = 0 - - if let rules = rules { - for rule in rules { - if let action = rule.action, action == .blockCTLFB { - count += 1 - } - } - } - return count - } + var countCTLActions: Int { rules?.filter { $0.action == .blockCTLFB }.count ?? 0 } } From 6ca539487e2b08893ceb1b8ec0b3500c40110abf Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 31 May 2024 15:23:15 -0700 Subject: [PATCH 48/60] move ClickToLoadRulesSplitter to BSK --- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 4 ++-- DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift | 4 ---- DuckDuckGo/ContentBlocker/ContentBlocking.swift | 2 +- DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift | 4 ++-- DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift | 4 ++-- UnitTests/ContentBlocker/ClickToLoadTDSTests.swift | 4 ++-- 6 files changed, 9 insertions(+), 13 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index a92beeb3b4..86fe3c7380 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -176,8 +176,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/TrackerRadarKit", "state" : { - "branch" : "la/blockCTLFB", - "revision" : "af2ade8afe86cc55b292b22a58ca6bc022927baf" + "revision" : "1403e17eeeb8493b92fb9d11eb8c846bb9776581", + "version" : "2.1.2" } }, { diff --git a/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift b/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift index 6c74927226..144d5eb300 100644 --- a/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift +++ b/DuckDuckGo/ContentBlocker/ContentBlockerRulesLists.swift @@ -23,10 +23,6 @@ import CryptoKit final class ContentBlockerRulesLists: DefaultContentBlockerRulesListsSource { - enum Constants { - static let clickToLoadRulesListName = "ClickToLoad" - } - private let adClickAttribution: AdClickAttributing init(trackerDataManager: TrackerDataManager, adClickAttribution: AdClickAttributing) { diff --git a/DuckDuckGo/ContentBlocker/ContentBlocking.swift b/DuckDuckGo/ContentBlocker/ContentBlocking.swift index d935081755..7ece42d1fa 100644 --- a/DuckDuckGo/ContentBlocker/ContentBlocking.swift +++ b/DuckDuckGo/ContentBlocker/ContentBlocking.swift @@ -137,7 +137,7 @@ final class AppContentBlocking { switch listName { case defaultTDSListName: listType = .tds - case ContentBlockerRulesLists.Constants.clickToLoadRulesListName: + case DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName: listType = .clickToLoad case AdClickAttributionRulesSplitter.blockingAttributionRuleListName(forListNamed: defaultTDSListName): listType = .blockingAttribution diff --git a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift index 6679192c14..042928bd22 100644 --- a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift +++ b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift @@ -95,7 +95,7 @@ struct ScriptSourceProvider: ScriptSourceProviding { let trackerData = contentBlockingManager.currentRules.first(where: { $0.name == tdsName})?.trackerData let ctlTrackerData = (contentBlockingManager.currentRules.first(where: { - $0.name == ContentBlockerRulesLists.Constants.clickToLoadRulesListName + $0.name == DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName })?.trackerData) return DefaultContentBlockerUserScriptConfig(privacyConfiguration: privacyConfigurationManager.privacyConfig, @@ -144,7 +144,7 @@ struct ScriptSourceProvider: ScriptSourceProviding { var combinedDomains: [String: String] = [:] var cnames: [TrackerData.CnameDomain: TrackerData.TrackerDomain]? = [:] - let setsToCombine = [ DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName, ContentBlockerRulesLists.Constants.clickToLoadRulesListName ] + let setsToCombine = [ DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName, DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName ] setsToCombine.forEach { setName in if let ruleSetIndex = contentBlockingManager.currentRules.firstIndex(where: { $0.name == setName }) { diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index c17e647970..32912158e1 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -76,13 +76,13 @@ extension FBProtectionTabExtension { } if enable { do { - try userContentController.enableGlobalContentRuleList(withIdentifier: ContentBlockerRulesLists.Constants.clickToLoadRulesListName) + try userContentController.enableGlobalContentRuleList(withIdentifier: DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName) } catch { return false } } else { do { - try userContentController.disableGlobalContentRuleList(withIdentifier: ContentBlockerRulesLists.Constants.clickToLoadRulesListName) + try userContentController.disableGlobalContentRuleList(withIdentifier: DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName) } catch { return false } diff --git a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift index 9acf85ef2e..051a4afe0c 100644 --- a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift +++ b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift @@ -40,7 +40,7 @@ class ClickToLoadTDSTests: XCTestCase { let cbrLists = ContentBlockerRulesLists(trackerDataManager: trackerManager, adClickAttribution: mockAdAttributing) let ruleSets = cbrLists.contentBlockerRulesLists - let tdsName = ContentBlockerRulesLists.Constants.clickToLoadRulesListName + let tdsName = DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName let ctlRules = ruleSets.first(where: { $0.name == tdsName}) let ctlTrackerData = ctlRules?.trackerData @@ -88,7 +88,7 @@ class ClickToLoadTDSTests: XCTestCase { let cbrLists = ContentBlockerRulesLists(trackerDataManager: trackerManager, adClickAttribution: mockAdAttributing) let ruleSets = cbrLists.contentBlockerRulesLists - let ctlTdsName = ContentBlockerRulesLists.Constants.clickToLoadRulesListName + let ctlTdsName = DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName let mainTdsName = DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName let mainRules = ruleSets.first(where: { $0.name == mainTdsName}) From d55102c6e856fdeef1924da3a749046b57c8eac9 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 31 May 2024 16:18:10 -0700 Subject: [PATCH 49/60] review nits --- .../ClickToLoadUserScript.swift | 13 +++------ .../ScriptSourceProviding.swift | 27 +++++++++---------- .../ContentBlocker/ClickToLoadTDSTests.swift | 18 ++++++------- 3 files changed, 25 insertions(+), 33 deletions(-) diff --git a/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift b/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift index ea14580cec..449a7fa4f0 100644 --- a/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift +++ b/DuckDuckGo/ContentBlocker/ClickToLoadUserScript.swift @@ -83,13 +83,6 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { @MainActor private func handleUnblockClickToLoadContent(params: Any, message: UserScriptMessage) -> Encodable? { - struct UnblockMessage: Decodable { - let action: String - let isLogin: Bool - let isSurrogateLogin: Bool - let entity: String - } - guard let delegate = delegate else { return false } // only worry about CTL FB for now @@ -104,8 +97,8 @@ final class ClickToLoadUserScript: NSObject, WKNavigationDelegate, Subfeature { @MainActor public func displayClickToLoadPlaceholders() { - if let webView = webView { - broker?.push(method: "displayClickToLoadPlaceholders", params: ["ruleAction": ["block"]], for: self, into: webView) - } + guard let webView else { return } + + broker?.push(method: "displayClickToLoadPlaceholders", params: ["ruleAction": ["block"]], for: self, into: webView) } } diff --git a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift index 042928bd22..c432f0fa26 100644 --- a/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift +++ b/DuckDuckGo/ContentBlocker/ScriptSourceProviding.swift @@ -146,20 +146,15 @@ struct ScriptSourceProvider: ScriptSourceProviding { let setsToCombine = [ DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName, DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName ] - setsToCombine.forEach { setName in + for setName in setsToCombine { if let ruleSetIndex = contentBlockingManager.currentRules.firstIndex(where: { $0.name == setName }) { - rules[ruleSetIndex].trackerData.trackers.forEach { key, value in - combinedTrackers[key] = value - } - rules[ruleSetIndex].trackerData.entities.forEach { key, value in - combinedEntities[key] = value - } - rules[ruleSetIndex].trackerData.domains.forEach { key, value in - combinedDomains[key] = value - } + let ruleSet = rules[ruleSetIndex] + + combinedTrackers = combinedTrackers.merging(ruleSet.trackerData.trackers) { (_, new) in new } + combinedEntities = combinedEntities.merging(ruleSet.trackerData.entities) { (_, new) in new } + combinedDomains = combinedDomains.merging(ruleSet.trackerData.domains) { (_, new) in new } if setName == DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName { - // just copy the cnames from the main TDS - cnames = rules[ruleSetIndex].trackerData.cnames + cnames = ruleSet.trackerData.cnames } } } @@ -170,9 +165,13 @@ struct ScriptSourceProvider: ScriptSourceProviding { cnames: cnames) let surrogateTDS = ContentBlockerRulesManager.extractSurrogates(from: combinedTrackerData) - let encodedData = try? JSONEncoder().encode(surrogateTDS) - let encodedTrackerData = String(data: encodedData!, encoding: .utf8)! + let encodedTrackerData = encodeTrackerData(surrogateTDS) return (trackerData: combinedTrackerData, encodedTrackerData: encodedTrackerData) } + + private func encodeTrackerData(_ trackerData: TrackerData) -> String { + let encodedData = try? JSONEncoder().encode(trackerData) + return String(data: encodedData!, encoding: .utf8)! + } } diff --git a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift index 051a4afe0c..7773359c3c 100644 --- a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift +++ b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift @@ -36,9 +36,8 @@ class ClickToLoadTDSTests: XCTestCase { let trackerManager = TrackerDataManager(etag: etag, data: trackerData, embeddedDataProvider: AppTrackerDataSetProvider()) - let mockAdAttributing = MockAttributing() - let cbrLists = ContentBlockerRulesLists(trackerDataManager: trackerManager, adClickAttribution: mockAdAttributing) + let cbrLists = ContentBlockerRulesLists(trackerDataManager: trackerManager, adClickAttribution: MockAttributing()) let ruleSets = cbrLists.contentBlockerRulesLists let tdsName = DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName @@ -79,14 +78,15 @@ class ClickToLoadTDSTests: XCTestCase { func testClickToLoadTDSSplit() throws { - let trackerData = AppTrackerDataSetProvider().embeddedData - let etag = AppTrackerDataSetProvider().embeddedDataEtag - let trackerManager = TrackerDataManager(etag: etag, - data: trackerData, - embeddedDataProvider: AppTrackerDataSetProvider()) - let mockAdAttributing = MockAttributing() + let provider = AppTrackerDataSetProvider() + + let trackerManager = TrackerDataManager( + etag: provider.embeddedDataEtag, + data: provider.embeddedData, + embeddedDataProvider: provider + ) - let cbrLists = ContentBlockerRulesLists(trackerDataManager: trackerManager, adClickAttribution: mockAdAttributing) + let cbrLists = ContentBlockerRulesLists(trackerDataManager: trackerManager, adClickAttribution: MockAttributing()) let ruleSets = cbrLists.contentBlockerRulesLists let ctlTdsName = DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName let mainTdsName = DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName From 77993dddc2b636a74e701f075d5df7c29007e3f0 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Mon, 3 Jun 2024 15:02:29 -0700 Subject: [PATCH 50/60] Update ClickToLoadTDSTests.swift --- .../ContentBlocker/ClickToLoadTDSTests.swift | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift index 7773359c3c..a831712775 100644 --- a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift +++ b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift @@ -31,11 +31,12 @@ class ClickToLoadTDSTests: XCTestCase { func testEnsureClickToLoadTDSCompiles() throws { - let trackerData = AppTrackerDataSetProvider().embeddedData - let etag = AppTrackerDataSetProvider().embeddedDataEtag + let provider = AppTrackerDataSetProvider() + let trackerData = provider.embeddedData + let etag = provider.embeddedDataEtag let trackerManager = TrackerDataManager(etag: etag, data: trackerData, - embeddedDataProvider: AppTrackerDataSetProvider()) + embeddedDataProvider: provider) let cbrLists = ContentBlockerRulesLists(trackerDataManager: trackerManager, adClickAttribution: MockAttributing()) let ruleSets = cbrLists.contentBlockerRulesLists @@ -91,27 +92,12 @@ class ClickToLoadTDSTests: XCTestCase { let ctlTdsName = DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName let mainTdsName = DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName - let mainRules = ruleSets.first(where: { $0.name == mainTdsName}) - let ctlRules = ruleSets.first(where: { $0.name == ctlTdsName}) - - let mainTrackerData = mainRules?.trackerData - let mainTrackers = mainTrackerData?.tds.trackers - - let ctlTrackerData = ctlRules?.trackerData - let ctlTrackers = ctlTrackerData?.tds.trackers - - let fbMainTracker = mainTrackers?["facebook.net"] - let fbCTLTracker = ctlTrackers?["facebook.net"] - - let fbMainRules = fbMainTracker?.rules - let fbCTLRules = fbCTLTracker?.rules + let (fbMainRules, mainCTLRuleCount) = trackerRules(for: DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName, ruleSets: ruleSets) + let (fbCTLRules, ctlCTLRuleCount) = trackerRules(for: ContentBlockerRulesLists.Constants.clickToLoadRulesListName, ruleSets: ruleSets) let fbMainRuleCount = fbMainRules!.count let fbCTLRuleCount = fbCTLRules!.count - let mainCTLRuleCount = fbMainTracker!.countCTLActions - let ctlCTLRuleCount = fbCTLTracker!.countCTLActions - // ensure both rulesets contains facebook.net rules XCTAssert(fbMainRuleCount > 0) XCTAssert(fbCTLRuleCount > 0) @@ -125,3 +111,8 @@ class ClickToLoadTDSTests: XCTestCase { } } + +func trackerRules(for name: String, ruleSets: [ContentBlockerRulesList]) -> (rules: [KnownTracker.Rule]?, countCTLActions: Int) { + let tracker = ruleSets.first { $0.name == name }?.trackerData?.tds.trackers["facebook.net"] + return (tracker?.rules, tracker?.countCTLActions ?? 0) +} From 13af034294d5702aac81e969d970da5d5df544f4 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Thu, 6 Jun 2024 22:58:08 -0700 Subject: [PATCH 51/60] test tweaks --- UnitTests/ContentBlocker/ClickToLoadTDSTests.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift index a831712775..9e254a4da3 100644 --- a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift +++ b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift @@ -89,11 +89,12 @@ class ClickToLoadTDSTests: XCTestCase { let cbrLists = ContentBlockerRulesLists(trackerDataManager: trackerManager, adClickAttribution: MockAttributing()) let ruleSets = cbrLists.contentBlockerRulesLists - let ctlTdsName = DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName + let mainTdsName = DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName + let ctlTdsName = DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName - let (fbMainRules, mainCTLRuleCount) = trackerRules(for: DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName, ruleSets: ruleSets) - let (fbCTLRules, ctlCTLRuleCount) = trackerRules(for: ContentBlockerRulesLists.Constants.clickToLoadRulesListName, ruleSets: ruleSets) + let (fbMainRules, mainCTLRuleCount) = trackerRules(for: mainTdsName, ruleSets: ruleSets) + let (fbCTLRules, ctlCTLRuleCount) = trackerRules(for: ctlTdsName, ruleSets: ruleSets) let fbMainRuleCount = fbMainRules!.count let fbCTLRuleCount = fbCTLRules!.count From f5c56fdd6eb786c3dd6267a5d46563a7fb01ff54 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 7 Jun 2024 17:22:43 -0700 Subject: [PATCH 52/60] Update ClickToLoadTDSTests.swift --- UnitTests/ContentBlocker/ClickToLoadTDSTests.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift index 9e254a4da3..19dcd4344a 100644 --- a/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift +++ b/UnitTests/ContentBlocker/ClickToLoadTDSTests.swift @@ -93,8 +93,8 @@ class ClickToLoadTDSTests: XCTestCase { let mainTdsName = DefaultContentBlockerRulesListsSource.Constants.trackerDataSetRulesListName let ctlTdsName = DefaultContentBlockerRulesListsSource.Constants.clickToLoadRulesListName - let (fbMainRules, mainCTLRuleCount) = trackerRules(for: mainTdsName, ruleSets: ruleSets) - let (fbCTLRules, ctlCTLRuleCount) = trackerRules(for: ctlTdsName, ruleSets: ruleSets) + let (fbMainRules, mainCTLRuleCount) = getFBTrackerRules(for: mainTdsName, ruleSets: ruleSets) + let (fbCTLRules, ctlCTLRuleCount) = getFBTrackerRules(for: ctlTdsName, ruleSets: ruleSets) let fbMainRuleCount = fbMainRules!.count let fbCTLRuleCount = fbCTLRules!.count @@ -113,7 +113,7 @@ class ClickToLoadTDSTests: XCTestCase { } } -func trackerRules(for name: String, ruleSets: [ContentBlockerRulesList]) -> (rules: [KnownTracker.Rule]?, countCTLActions: Int) { +func getFBTrackerRules(for name: String, ruleSets: [ContentBlockerRulesList]) -> (rules: [KnownTracker.Rule]?, countCTLActions: Int) { let tracker = ruleSets.first { $0.name == name }?.trackerData?.tds.trackers["facebook.net"] return (tracker?.rules, tracker?.countCTLActions ?? 0) } From 24566fda89a9490f9321a5abd1e7b078c9a72e99 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Wed, 12 Jun 2024 11:36:05 -0700 Subject: [PATCH 53/60] remove forward/back nav exception in FB protections --- DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift | 5 ----- 1 file changed, 5 deletions(-) diff --git a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift index 32912158e1..313ada0701 100644 --- a/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift +++ b/DuckDuckGo/Tab/TabExtensions/FBProtectionTabExtension.swift @@ -113,11 +113,6 @@ extension FBProtectionTabExtension: ClickToLoadUserScriptDelegate { extension FBProtectionTabExtension: NavigationResponder { func decidePolicy(for navigationAction: NavigationAction, preferences: inout NavigationPreferences) async -> NavigationActionPolicy? { - if navigationAction.navigationType == NavigationType.backForward(distance: -1) - || navigationAction.navigationType == NavigationType.backForward(distance: 1) { - return .next - } - if navigationAction.navigationType == NavigationType.other && navigationAction.isUserInitiated == false { return .next } From 98c095be8069d09bc24f6f028cd6f9ef8da926d4 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Thu, 13 Jun 2024 13:31:43 -0700 Subject: [PATCH 54/60] revert config URL to prod and update embeds --- .../AppConfigurationURLProvider.swift | 2 +- .../AppPrivacyConfigurationDataProvider.swift | 4 +- .../AppTrackerDataSetProvider.swift | 4 +- DuckDuckGo/ContentBlocker/macos-config.json | 188 +++++++++++++++--- DuckDuckGo/ContentBlocker/trackerData.json | 6 +- 5 files changed, 172 insertions(+), 32 deletions(-) diff --git a/DuckDuckGo/Application/AppConfigurationURLProvider.swift b/DuckDuckGo/Application/AppConfigurationURLProvider.swift index 2d163c48d6..686a623388 100644 --- a/DuckDuckGo/Application/AppConfigurationURLProvider.swift +++ b/DuckDuckGo/Application/AppConfigurationURLProvider.swift @@ -54,7 +54,7 @@ struct AppConfigurationURLProvider: ConfigurationURLProviding { case .bloomFilterBinary: return URL(string: "https://staticcdn.duckduckgo.com/https/https-mobile-v2-bloom.bin")! case .bloomFilterSpec: return URL(string: "https://staticcdn.duckduckgo.com/https/https-mobile-v2-bloom-spec.json")! case .bloomFilterExcludedDomains: return URL(string: "https://staticcdn.duckduckgo.com/https/https-mobile-v2-false-positives.json")! - case .privacyConfiguration: return customPrivacyConfigurationUrl ?? URL(string: "https://royal-thankful-weight.glitch.me/macos-config.json")! + case .privacyConfiguration: return customPrivacyConfigurationUrl ?? URL(string: "https://staticcdn.duckduckgo.com/trackerblocking/config/v4/macos-config.json")! case .surrogates: return URL(string: "https://staticcdn.duckduckgo.com/surrogates.txt")! case .trackerDataSet: return URL(string: "https://staticcdn.duckduckgo.com/trackerblocking/v6/current/macos-tds.json")! // In archived repo, to be refactored shortly (https://staticcdn.duckduckgo.com/useragents/social_ctp_configuration.json) diff --git a/DuckDuckGo/ContentBlocker/AppPrivacyConfigurationDataProvider.swift b/DuckDuckGo/ContentBlocker/AppPrivacyConfigurationDataProvider.swift index 95b2cf8503..71cc3faa7f 100644 --- a/DuckDuckGo/ContentBlocker/AppPrivacyConfigurationDataProvider.swift +++ b/DuckDuckGo/ContentBlocker/AppPrivacyConfigurationDataProvider.swift @@ -22,8 +22,8 @@ import BrowserServicesKit final class AppPrivacyConfigurationDataProvider: EmbeddedDataProvider { public struct Constants { - public static let embeddedDataETag = "\"35bda-18ec9d0d7f8\"" - public static let embeddedDataSHA = "ba6cb6e4ad76fd69ac137b2331ef05e5c152d6e796a388a18ce3d48da8d35f69" + public static let embeddedDataETag = "\"d05f1997ae293869ab8c448e4cbc3e39\"" + public static let embeddedDataSHA = "0ea4b7874c38d81d5e24505585d8b941069e7e7893a05a7cea9f1745adc4fa52" } var embeddedDataEtag: String { diff --git a/DuckDuckGo/ContentBlocker/AppTrackerDataSetProvider.swift b/DuckDuckGo/ContentBlocker/AppTrackerDataSetProvider.swift index bed5b633f2..e47ae7d39a 100644 --- a/DuckDuckGo/ContentBlocker/AppTrackerDataSetProvider.swift +++ b/DuckDuckGo/ContentBlocker/AppTrackerDataSetProvider.swift @@ -22,8 +22,8 @@ import BrowserServicesKit final class AppTrackerDataSetProvider: EmbeddedDataProvider { public struct Constants { - public static let embeddedDataETag = "\"e3f38700e86aa37c35122bbebf0d42cf\"" - public static let embeddedDataSHA = "36ef35555fb614802e0f228a1501a063035bcdd8bb708c1053bd7ef4db97b449" + public static let embeddedDataETag = "\"6fa664462bd29b66c1b13eed51072afa\"" + public static let embeddedDataSHA = "52d29aa8942e518db24a5adbcca63148aac9c01a8a28c3f2c4bc517cb80b18ff" } var embeddedDataEtag: String { diff --git a/DuckDuckGo/ContentBlocker/macos-config.json b/DuckDuckGo/ContentBlocker/macos-config.json index b415deb548..cceed355c5 100644 --- a/DuckDuckGo/ContentBlocker/macos-config.json +++ b/DuckDuckGo/ContentBlocker/macos-config.json @@ -1,6 +1,6 @@ { "readme": "https://github.com/duckduckgo/privacy-configuration", - "version": 1716212212537, + "version": 1718303485463, "features": { "adClickAttribution": { "readme": "https://help.duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/#3rd-party-tracker-loading-protection", @@ -303,6 +303,12 @@ { "domain": "www.thrifty.com" }, + { + "domain": "sports.tipico.de" + }, + { + "domain": "lotusbakeries.com" + }, { "domain": "marvel.com" }, @@ -318,7 +324,7 @@ ] }, "state": "enabled", - "hash": "6ea22969c48f1cb624808cd49a296f4d" + "hash": "168b747ef8adb3bd717684f1e1724c05" }, "autofill": { "exceptions": [ @@ -953,7 +959,8 @@ } }, "state": "enabled", - "hash": "36e8971fa9bb204b78a5929a14a108dd" + "minSupportedVersion": "1.93.0", + "hash": "3b8fd857f944f1997ab9593de582491b" }, "clickToPlay": { "exceptions": [ @@ -970,7 +977,7 @@ "ruleActions": [ "block-ctl-fb" ], - "state": "enabled" + "state": "disabled" } }, "state": "enabled", @@ -1228,6 +1235,11 @@ "state": "enabled", "hash": "b685397a8317384bec3b8d7e8b7571bb" }, + "dummyWebMessageListener": { + "exceptions": [], + "state": "disabled", + "hash": "728493ef7a1488e4781656d3f9db84aa" + }, "elementHiding": { "exceptions": [ { @@ -1943,6 +1955,14 @@ { "selector": "#credential_picker_container", "type": "override" + }, + { + "selector": ".shop-display-ad", + "type": "hide-empty" + }, + { + "selector": ".row.full-bleed-row", + "type": "hide-empty" } ] }, @@ -2061,6 +2081,15 @@ } ] }, + { + "domain": "canalrcn.com", + "rules": [ + { + "selector": ".pauta-en-vivo-mobile", + "type": "hide-empty" + } + ] + }, { "domain": "carandclassic.com", "rules": [ @@ -2335,6 +2364,15 @@ } ] }, + { + "domain": "economist.com", + "rules": [ + { + "selector": "[class^='adComponent']", + "type": "hide-empty" + } + ] + }, { "domain": "elpais.com", "rules": [ @@ -3476,6 +3514,15 @@ } ] }, + { + "domain": "post-gazette.com", + "rules": [ + { + "selector": "[data-dfpads-position]", + "type": "hide-empty" + } + ] + }, { "domain": "prajwaldesai.com", "rules": [ @@ -3703,6 +3750,15 @@ } ] }, + { + "domain": "shattovet.com", + "rules": [ + { + "selector": "[class*='advertising']", + "type": "override" + } + ] + }, { "domain": "si.com", "rules": [ @@ -3921,6 +3977,15 @@ } ] }, + { + "domain": "toledoblade.com", + "rules": [ + { + "selector": "[data-dfpads-position]", + "type": "hide-empty" + } + ] + }, { "domain": "tripadvisor.ca", "rules": [ @@ -4193,6 +4258,10 @@ { "selector": ".gam-placeholder", "type": "closest-empty" + }, + { + "selector": "[class*='sdaContainer']", + "type": "hide" } ] }, @@ -4253,6 +4322,14 @@ { "selector": ".parallax-container", "type": "hide-empty" + }, + { + "selector": "div:has(.react-parallax)", + "type": "hide" + }, + { + "selector": "[id^=div-gpt-ad-]", + "type": "closest-empty" } ] }, @@ -4354,7 +4431,7 @@ ] }, "state": "enabled", - "hash": "9a895fea083dabb6e3496242636a8370" + "hash": "4ba5333801a460fca5bf360d684fa994" }, "exceptionHandler": { "exceptions": [ @@ -4552,6 +4629,9 @@ { "domain": "proton.me" }, + { + "domain": "nordstrom.com" + }, { "domain": "marvel.com" }, @@ -4593,7 +4673,7 @@ } ], "state": "enabled", - "hash": "aefca8e7a9a3d9b65370608dd639cd3f" + "hash": "eb816f6eaec8c0c712d583fc490ffe59" }, "fingerprintingScreenSize": { "settings": { @@ -4712,6 +4792,15 @@ { "domain": "tirerack.com" }, + { + "domain": "milesplit.live" + }, + { + "domain": "dollargeneral.com" + }, + { + "domain": "monstergear.monsterenergy.com" + }, { "domain": "marvel.com" }, @@ -4728,7 +4817,7 @@ "privacy-test-pages.site" ] }, - "hash": "05bddff3ae61a9536e38a6ef7d383eb3" + "hash": "a5053adfe1cf8c1ce1721c022fbb8b1a" }, "harmfulApis": { "settings": { @@ -5002,6 +5091,26 @@ ], "hash": "936f00970c108fd646f73d00b3f3f5b5" }, + "pluginPointFocusedViewPlugin": { + "state": "disabled", + "exceptions": [], + "hash": "c292bb627849854515cebbded288ef5a" + }, + "pluginPointNewTabPagePlugin": { + "state": "disabled", + "exceptions": [], + "hash": "c292bb627849854515cebbded288ef5a" + }, + "pluginPointNewTabPageSectionPlugin": { + "state": "disabled", + "exceptions": [], + "hash": "c292bb627849854515cebbded288ef5a" + }, + "pluginPointNewTabPageShortcutPlugin": { + "state": "disabled", + "exceptions": [], + "hash": "c292bb627849854515cebbded288ef5a" + }, "privacyDashboard": { "exceptions": [], "features": { @@ -6468,6 +6577,7 @@ { "rule": "google-analytics.com/analytics.js", "domains": [ + "docs.llamaindex.ai", "doterra.com", "easyjet.com", "edx.org", @@ -6561,6 +6671,12 @@ "" ] }, + { + "rule": "google.com/adsense/search/", + "domains": [ + "ihowlist.com" + ] + }, { "rule": "marketingplatform.google.com/about/enterprise", "domains": [ @@ -6643,7 +6759,9 @@ "domains": [ "abril.com.br", "algomalegalclinic.com", + "bodyelectricvitality.com.au", "cosmicbook.news", + "docs.llamaindex.ai", "eatroyo.com", "thesimsresource.com", "tradersync.com", @@ -6772,6 +6890,7 @@ "newschannel20.com", "newschannel9.com", "okcfox.com", + "post-gazette.com", "raleighcw.com", "siouxlandnews.com", "southernoregoncw.com", @@ -6780,6 +6899,7 @@ "thecw46.com", "thecwtc.com", "thenationaldesk.com", + "toledoblade.com", "triblive.com", "turnto10.com", "univisionseattle.com", @@ -6834,7 +6954,8 @@ "rule": "grow.me/main.js", "domains": [ "budgetbytes.com", - "foodfornet.com" + "foodfornet.com", + "homesteadingfamily.com" ] }, { @@ -6842,6 +6963,12 @@ "domains": [ "foodfornet.com" ] + }, + { + "rule": "grow.me", + "domains": [ + "grilledcheesesocial.com" + ] } ] }, @@ -7077,11 +7204,7 @@ { "rule": "static.klaviyo.com/onsite/js/klaviyo.js", "domains": [ - "essentialpraxis.com", - "kidsguide.com", - "muc-off.com", - "paria.cc", - "urbanebikes.com" + "" ] }, { @@ -7095,8 +7218,12 @@ "rule": "klaviyo.com/", "domains": [ "andieswim.com", + "dreamfarm.com", "footweartruth.com", + "holdonbags.com", "kmail-lists.com", + "nestlenutritionstore.com", + "organakratom.com", "usafacts.org" ] } @@ -7125,6 +7252,12 @@ "domains": [ "" ] + }, + { + "rule": "listrakbi.com", + "domains": [ + "fsastore.com" + ] } ] }, @@ -7246,7 +7379,8 @@ { "rule": "monetate.net", "domains": [ - "kleen-ritecorp.com" + "kleen-ritecorp.com", + "qvc.com" ] } ] @@ -7932,6 +8066,12 @@ "domains": [ "" ] + }, + { + "rule": "c.slickstream.com/app/", + "domains": [ + "" + ] } ] }, @@ -8458,7 +8598,7 @@ "domain": "sundancecatalog.com" } ], - "hash": "d9db93f32201ee8d2e545eeead7cc66f" + "hash": "97d6c51d24af39c870faf3f05c18746b" }, "trackingCookies1p": { "settings": { @@ -8835,17 +8975,15 @@ "state": "disabled", "hash": "728493ef7a1488e4781656d3f9db84aa" }, + "windowsSpellChecker": { + "exceptions": [], + "state": "disabled", + "hash": "728493ef7a1488e4781656d3f9db84aa" + }, "windowsStartupBoost": { - "exceptions": [ - { - "domain": "marvel.com" - }, - { - "domain": "sundancecatalog.com" - } - ], + "exceptions": [], "state": "disabled", - "hash": "dc1b4fa301193a03ddcd4bdf7ee3e610" + "hash": "728493ef7a1488e4781656d3f9db84aa" }, "windowsWaitlist": { "exceptions": [], @@ -8859,4 +8997,4 @@ } }, "unprotectedTemporary": [] -} +} \ No newline at end of file diff --git a/DuckDuckGo/ContentBlocker/trackerData.json b/DuckDuckGo/ContentBlocker/trackerData.json index 850e2efb0f..7a12422f7a 100644 --- a/DuckDuckGo/ContentBlocker/trackerData.json +++ b/DuckDuckGo/ContentBlocker/trackerData.json @@ -1,6 +1,6 @@ { "_builtWith": { - "tracker-radar": "a8f276714a31d43fb185a1b233ed92f12680627ca54c6f98da44de9fe27f097e-4013b4e91930c643394cb31c6c745356f133b04f", + "tracker-radar": "9c02278e8bfb43db5e6b8756cdedc469924d600b8c4d6c9d7177de01405c8f5c-4013b4e91930c643394cb31c6c745356f133b04f", "tracker-surrogates": "0528e3226df15b1a3e319ad68ef76612a8f26623" }, "readme": "https://github.com/duckduckgo/tracker-blocklists", @@ -41505,7 +41505,8 @@ "twittercommunity.com", "twttr.com", "twttr.net", - "vine.co" + "vine.co", + "x.com" ], "prevalence": 8.79, "displayName": "Twitter" @@ -52954,6 +52955,7 @@ "twttr.com": "Twitter, Inc.", "twttr.net": "Twitter, Inc.", "vine.co": "Twitter, Inc.", + "x.com": "Twitter, Inc.", "ads1-adnow.com": "Mas Capital Group Ltd", "ads2-adnow.com": "Mas Capital Group Ltd", "ads3-adnow.com": "Mas Capital Group Ltd", From 2d04a7c720183ee96f1181a24b18c50b315b07d7 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 14 Jun 2024 07:40:51 -0700 Subject: [PATCH 55/60] release BSK --- DuckDuckGo.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index d186602a40..70f43416a7 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -12871,8 +12871,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit"; requirement = { - branch = "la/clicktoload-redux"; - kind = branch; + kind = exactVersion; + version = 156.0.0; }; }; 9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = { From 04796551946677c39e5a556f41dc77aa4bbdc31d Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 14 Jun 2024 08:07:39 -0700 Subject: [PATCH 56/60] update BSK dep --- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 4 ++-- LocalPackages/DataBrokerProtection/Package.swift | 2 +- LocalPackages/NetworkProtectionMac/Package.swift | 2 +- LocalPackages/SubscriptionUI/Package.swift | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 86fe3c7380..040b8531e4 100644 --- a/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -32,8 +32,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/duckduckgo/BrowserServicesKit", "state" : { - "branch" : "la/clicktoload-redux", - "revision" : "134d01bda3fae9ff68064489ff0381c7bc9679bc" + "revision" : "e9e239fe5dfeab87dcacbf5a31c8f555623a4ce2", + "version" : "156.0.0" } }, { diff --git a/LocalPackages/DataBrokerProtection/Package.swift b/LocalPackages/DataBrokerProtection/Package.swift index 23fc546a25..66ee3ef5c0 100644 --- a/LocalPackages/DataBrokerProtection/Package.swift +++ b/LocalPackages/DataBrokerProtection/Package.swift @@ -29,7 +29,7 @@ let package = Package( targets: ["DataBrokerProtection"]) ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "145.3.2"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "156.0.0"), .package(path: "../SwiftUIExtensions"), .package(path: "../XPCHelper"), ], diff --git a/LocalPackages/NetworkProtectionMac/Package.swift b/LocalPackages/NetworkProtectionMac/Package.swift index 0b2dcd36e1..e3949f4e5c 100644 --- a/LocalPackages/NetworkProtectionMac/Package.swift +++ b/LocalPackages/NetworkProtectionMac/Package.swift @@ -31,7 +31,7 @@ let package = Package( .library(name: "NetworkProtectionUI", targets: ["NetworkProtectionUI"]), ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "145.3.2"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "156.0.0"), .package(url: "https://github.com/airbnb/lottie-spm", exact: "4.4.1"), .package(path: "../XPCHelper"), .package(path: "../SwiftUIExtensions"), diff --git a/LocalPackages/SubscriptionUI/Package.swift b/LocalPackages/SubscriptionUI/Package.swift index a2bd8d37af..96175ad8fd 100644 --- a/LocalPackages/SubscriptionUI/Package.swift +++ b/LocalPackages/SubscriptionUI/Package.swift @@ -12,7 +12,7 @@ let package = Package( targets: ["SubscriptionUI"]), ], dependencies: [ - .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "145.3.2"), + .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "156.0.0"), .package(path: "../SwiftUIExtensions") ], targets: [ From ef74977006231a5a5da1fddacef24f22671a3d7b Mon Sep 17 00:00:00 2001 From: Bartek Waresiak Date: Fri, 14 Jun 2024 18:45:49 +0200 Subject: [PATCH 57/60] Restore NetP Package.swift --- .../NetworkProtectionMac/Package.swift | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/LocalPackages/NetworkProtectionMac/Package.swift b/LocalPackages/NetworkProtectionMac/Package.swift index e3949f4e5c..be86553cca 100644 --- a/LocalPackages/NetworkProtectionMac/Package.swift +++ b/LocalPackages/NetworkProtectionMac/Package.swift @@ -29,10 +29,13 @@ let package = Package( .library(name: "NetworkProtectionIPC", targets: ["NetworkProtectionIPC"]), .library(name: "NetworkProtectionProxy", targets: ["NetworkProtectionProxy"]), .library(name: "NetworkProtectionUI", targets: ["NetworkProtectionUI"]), + .library(name: "VPNAppLauncher", targets: ["VPNAppLauncher"]), ], dependencies: [ .package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "156.0.0"), .package(url: "https://github.com/airbnb/lottie-spm", exact: "4.4.1"), + .package(path: "../AppLauncher"), + .package(path: "../UDSHelper"), .package(path: "../XPCHelper"), .package(path: "../SwiftUIExtensions"), .package(path: "../LoginItems"), @@ -45,6 +48,7 @@ let package = Package( dependencies: [ .product(name: "NetworkProtection", package: "BrowserServicesKit"), .product(name: "XPCHelper", package: "XPCHelper"), + .product(name: "UDSHelper", package: "UDSHelper"), .product(name: "PixelKit", package: "BrowserServicesKit"), ], swiftSettings: [ @@ -65,6 +69,21 @@ let package = Package( ] ), + // MARK: - VPNAppLauncher + + .target( + name: "VPNAppLauncher", + dependencies: [ + "NetworkProtectionUI", + .product(name: "AppLauncher", package: "AppLauncher"), + .product(name: "NetworkProtection", package: "BrowserServicesKit"), + .product(name: "PixelKit", package: "BrowserServicesKit"), + ], + swiftSettings: [ + .define("DEBUG", .when(configuration: .debug)) + ] + ), + // MARK: - NetworkProtectionUI .target( From 388d73e437be9ba0cc7e3374391d1abfaf87a267 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 14 Jun 2024 09:59:53 -0700 Subject: [PATCH 58/60] version bump to 1.93.0 --- Configuration/Version.xcconfig | 2 +- DuckDuckGo.xcodeproj/project.pbxproj | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Configuration/Version.xcconfig b/Configuration/Version.xcconfig index 613bd7b6b3..fca1036504 100644 --- a/Configuration/Version.xcconfig +++ b/Configuration/Version.xcconfig @@ -1 +1 @@ -MARKETING_VERSION = 1.92.0 +MARKETING_VERSION = 1.93.0 diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 447fdaf4da..627f2ffbf8 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -12316,6 +12316,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 378B58CD295ECA75002C0CC0 /* DuckDuckGo.xcconfig */; buildSettings = { + MARKETING_VERSION = 1.93.0; }; name = CI; }; @@ -12636,6 +12637,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 378B58CD295ECA75002C0CC0 /* DuckDuckGo.xcconfig */; buildSettings = { + MARKETING_VERSION = 1.93.0; }; name = Debug; }; @@ -12643,6 +12645,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 378B58CD295ECA75002C0CC0 /* DuckDuckGo.xcconfig */; buildSettings = { + MARKETING_VERSION = 1.93.0; }; name = Release; }; @@ -12671,6 +12674,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 378B58CD295ECA75002C0CC0 /* DuckDuckGo.xcconfig */; buildSettings = { + MARKETING_VERSION = 1.93.0; }; name = Review; }; From a0ab7781c0154913afb2177439de310a25dbe615 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 14 Jun 2024 12:15:08 -0700 Subject: [PATCH 59/60] Revert "version bump to 1.93.0" This reverts commit 388d73e437be9ba0cc7e3374391d1abfaf87a267. --- Configuration/Version.xcconfig | 2 +- DuckDuckGo.xcodeproj/project.pbxproj | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/Configuration/Version.xcconfig b/Configuration/Version.xcconfig index fca1036504..613bd7b6b3 100644 --- a/Configuration/Version.xcconfig +++ b/Configuration/Version.xcconfig @@ -1 +1 @@ -MARKETING_VERSION = 1.93.0 +MARKETING_VERSION = 1.92.0 diff --git a/DuckDuckGo.xcodeproj/project.pbxproj b/DuckDuckGo.xcodeproj/project.pbxproj index 627f2ffbf8..447fdaf4da 100644 --- a/DuckDuckGo.xcodeproj/project.pbxproj +++ b/DuckDuckGo.xcodeproj/project.pbxproj @@ -12316,7 +12316,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 378B58CD295ECA75002C0CC0 /* DuckDuckGo.xcconfig */; buildSettings = { - MARKETING_VERSION = 1.93.0; }; name = CI; }; @@ -12637,7 +12636,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 378B58CD295ECA75002C0CC0 /* DuckDuckGo.xcconfig */; buildSettings = { - MARKETING_VERSION = 1.93.0; }; name = Debug; }; @@ -12645,7 +12643,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 378B58CD295ECA75002C0CC0 /* DuckDuckGo.xcconfig */; buildSettings = { - MARKETING_VERSION = 1.93.0; }; name = Release; }; @@ -12674,7 +12671,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 378B58CD295ECA75002C0CC0 /* DuckDuckGo.xcconfig */; buildSettings = { - MARKETING_VERSION = 1.93.0; }; name = Review; }; From 5e5feb1508cca9b2f1d5aab51b41194c300ab7f3 Mon Sep 17 00:00:00 2001 From: "ladamski@duckduckgo.com" Date: Fri, 14 Jun 2024 12:23:16 -0700 Subject: [PATCH 60/60] nit --- scripts/update_embedded.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/update_embedded.sh b/scripts/update_embedded.sh index c14009e6f2..d084df555f 100755 --- a/scripts/update_embedded.sh +++ b/scripts/update_embedded.sh @@ -2,10 +2,10 @@ set -eo pipefail -# The following URLs shall match the ones in AppConfigurationURLprovider.swift. +# The following URLs shall match the ones in AppConfigurationURLprovider.swift. # Danger checks that the URLs match on every PR. If the code changes, the regex that Danger uses may need an update. -CONFIG_URL="https://staticcdn.duckduckgo.com/trackerblocking/config/v4/macos-config.json" TDS_URL="https://staticcdn.duckduckgo.com/trackerblocking/v6/current/macos-tds.json" +CONFIG_URL="https://staticcdn.duckduckgo.com/trackerblocking/config/v4/macos-config.json" # If -c is passed, then check the URLs in the Configuration files are correct. if [ "$1" == "-c" ]; then