Skip to content

Fix frozen Preferences About screen #14806

Fix frozen Preferences About screen

Fix frozen Preferences About screen #14806

Triggered via pull request December 30, 2024 11:06
Status Failure
Total duration 12m 17s
Artifacts 6

pr.yml

on: pull_request
Matrix: Test
SwiftLint
42s
SwiftLint
Test Shell Scripts
17s
Test Shell Scripts
Make Release Build
7m 37s
Make Release Build
Verify autoconsent bundle
27s
Verify autoconsent bundle
ShellCheck
9s
ShellCheck
Private API Report  /  Update PR comment
Private API Report / Update PR comment
Create Asana Task
0s
Create Asana Task
Close Asana Task
0s
Close Asana Task
Fit to window
Zoom out
Zoom in

Annotations

30 errors, 37 warnings, and 1 notice
MaliciousSiteProtectionIntegrationTests.testPhishingDetected_tabIsMarkedPhishing: DerivedData/Build/Intermediates.noindex/DuckDuckGo.build/CI/Integration Tests.build/Objects-normal/arm64/MaliciousSiteProtectionIntegrationTests.d#L1
/Users/runner/work/macos-browser/macos-browser/IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift:51 - failed - Phishing request loaded
MaliciousSiteProtectionIntegrationTests.testPhishingDetectedThenDDGLoaded_tabIsNotMarkedPhishing: DerivedData/Build/Intermediates.noindex/DuckDuckGo.build/CI/Integration Tests.build/Objects-normal/arm64/MaliciousSiteProtectionIntegrationTests.d#L1
/Users/runner/work/macos-browser/macos-browser/IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift:51 - failed - Phishing request loaded
MaliciousSiteProtectionIntegrationTests.testPhishingDetectedThenNotDetected_tabIsNotMarkedPhishing: DerivedData/Build/Intermediates.noindex/DuckDuckGo.build/CI/Integration Tests.build/Objects-normal/arm64/MaliciousSiteProtectionIntegrationTests.d#L1
/Users/runner/work/macos-browser/macos-browser/IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift:51 - failed - Phishing request loaded
MaliciousSiteProtectionIntegrationTests.testPhishingDetectedViaHTTPRedirectChain_tabIsMarkedPhishing: DerivedData/Build/Intermediates.noindex/DuckDuckGo.build/CI/Integration Tests.build/Objects-normal/arm64/MaliciousSiteProtectionIntegrationTests.d#L1
/Users/runner/work/macos-browser/macos-browser/IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift:158 - XCTAssertEqual failed: ("nil") is not equal to ("Optional(MaliciousSiteProtection.MaliciousSiteError(code: MaliciousSiteProtection.MaliciousSiteError.Code.phishing, failingUrl: http://privacy-test-pages.site/security/badware/phishing.html))")
MaliciousSiteProtectionIntegrationTests.testPhishingDetectedViaJSRedirectChain_tabIsMarkedPhishing: DerivedData/Build/Intermediates.noindex/DuckDuckGo.build/CI/Integration Tests.build/Objects-normal/arm64/MaliciousSiteProtectionIntegrationTests.d#L1
/Users/runner/work/macos-browser/macos-browser/IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift:180 - failed - -[MaliciousSiteProtectionIntegrationTests testPhishingDetectedViaJSRedirectChain_tabIsMarkedPhishing]: Phishing request loaded for http://privacy-test-pages.site/security/badware/phishing.html
Test (Non-Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L51
testPhishingDetected_tabIsMarkedPhishing, failed - Phishing request loaded
Test (Non-Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L101
testPhishingDetected_tabIsMarkedPhishing, XCTAssertEqual failed: ("nil") is not equal to ("Optional(MaliciousSiteProtection.MaliciousSiteError(code: MaliciousSiteProtection.MaliciousSiteError.Code.phishing, failingUrl: http://privacy-test-pages.site/security/badware/phishing.html))")
Test (Non-Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L51
testPhishingDetected_tabIsMarkedPhishing, failed - Phishing request loaded
Test (Non-Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L101
testPhishingDetected_tabIsMarkedPhishing, XCTAssertEqual failed: ("nil") is not equal to ("Optional(MaliciousSiteProtection.MaliciousSiteError(code: MaliciousSiteProtection.MaliciousSiteError.Code.phishing, failingUrl: http://privacy-test-pages.site/security/badware/phishing.html))")
Test (Non-Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L51
testPhishingDetected_tabIsMarkedPhishing, failed - Phishing request loaded
Test (Non-Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L101
testPhishingDetected_tabIsMarkedPhishing, XCTAssertEqual failed: ("nil") is not equal to ("Optional(MaliciousSiteProtection.MaliciousSiteError(code: MaliciousSiteProtection.MaliciousSiteError.Code.phishing, failingUrl: http://privacy-test-pages.site/security/badware/phishing.html))")
Test (Non-Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L51
testPhishingDetectedThenDDGLoaded_tabIsNotMarkedPhishing, failed - Phishing request loaded
Test (Non-Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L133
testPhishingDetectedThenDDGLoaded_tabIsNotMarkedPhishing, XCTAssertEqual failed: ("nil") is not equal to ("Optional(MaliciousSiteProtection.MaliciousSiteError(code: MaliciousSiteProtection.MaliciousSiteError.Code.phishing, failingUrl: http://privacy-test-pages.site/security/badware/phishing.html))")
Test (Non-Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L51
testPhishingDetectedThenDDGLoaded_tabIsNotMarkedPhishing, failed - Phishing request loaded
Test (Non-Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L133
testPhishingDetectedThenDDGLoaded_tabIsNotMarkedPhishing, XCTAssertEqual failed: ("nil") is not equal to ("Optional(MaliciousSiteProtection.MaliciousSiteError(code: MaliciousSiteProtection.MaliciousSiteError.Code.phishing, failingUrl: http://privacy-test-pages.site/security/badware/phishing.html))")
MaliciousSiteProtectionIntegrationTests.testPhishingDetected_tabIsMarkedPhishing: DerivedData/Build/Intermediates.noindex/DuckDuckGo.build/CI/Integration Tests App Store.build/Objects-normal/arm64/MaliciousSiteProtectionIntegrationTests.d#L1
/Users/runner/work/macos-browser/macos-browser/IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift:51 - failed - Phishing request loaded
MaliciousSiteProtectionIntegrationTests.testPhishingDetectedThenDDGLoaded_tabIsNotMarkedPhishing: DerivedData/Build/Intermediates.noindex/DuckDuckGo.build/CI/Integration Tests App Store.build/Objects-normal/arm64/MaliciousSiteProtectionIntegrationTests.d#L1
/Users/runner/work/macos-browser/macos-browser/IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift:51 - failed - Phishing request loaded
MaliciousSiteProtectionIntegrationTests.testPhishingDetectedThenNotDetected_tabIsNotMarkedPhishing: DerivedData/Build/Intermediates.noindex/DuckDuckGo.build/CI/Integration Tests App Store.build/Objects-normal/arm64/MaliciousSiteProtectionIntegrationTests.d#L1
/Users/runner/work/macos-browser/macos-browser/IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift:51 - failed - Phishing request loaded
MaliciousSiteProtectionIntegrationTests.testPhishingDetectedViaHTTPRedirectChain_tabIsMarkedPhishing: DerivedData/Build/Intermediates.noindex/DuckDuckGo.build/CI/Integration Tests App Store.build/Objects-normal/arm64/MaliciousSiteProtectionIntegrationTests.d#L1
/Users/runner/work/macos-browser/macos-browser/IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift:158 - XCTAssertEqual failed: ("nil") is not equal to ("Optional(MaliciousSiteProtection.MaliciousSiteError(code: MaliciousSiteProtection.MaliciousSiteError.Code.phishing, failingUrl: http://privacy-test-pages.site/security/badware/phishing.html))")
MaliciousSiteProtectionIntegrationTests.testPhishingDetectedViaJSRedirectChain_tabIsMarkedPhishing: DerivedData/Build/Intermediates.noindex/DuckDuckGo.build/CI/Integration Tests App Store.build/Objects-normal/arm64/MaliciousSiteProtectionIntegrationTests.d#L1
/Users/runner/work/macos-browser/macos-browser/IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift:180 - failed - -[MaliciousSiteProtectionIntegrationTests testPhishingDetectedViaJSRedirectChain_tabIsMarkedPhishing]: Phishing request loaded for http://privacy-test-pages.site/security/badware/phishing.html
Test (Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L51
testPhishingDetected_tabIsMarkedPhishing, failed - Phishing request loaded
Test (Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L101
testPhishingDetected_tabIsMarkedPhishing, XCTAssertEqual failed: ("nil") is not equal to ("Optional(MaliciousSiteProtection.MaliciousSiteError(code: MaliciousSiteProtection.MaliciousSiteError.Code.phishing, failingUrl: http://privacy-test-pages.site/security/badware/phishing.html))")
Test (Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L51
testPhishingDetected_tabIsMarkedPhishing, failed - Phishing request loaded
Test (Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L101
testPhishingDetected_tabIsMarkedPhishing, XCTAssertEqual failed: ("nil") is not equal to ("Optional(MaliciousSiteProtection.MaliciousSiteError(code: MaliciousSiteProtection.MaliciousSiteError.Code.phishing, failingUrl: http://privacy-test-pages.site/security/badware/phishing.html))")
Test (Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L51
testPhishingDetected_tabIsMarkedPhishing, failed - Phishing request loaded
Test (Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L101
testPhishingDetected_tabIsMarkedPhishing, XCTAssertEqual failed: ("nil") is not equal to ("Optional(MaliciousSiteProtection.MaliciousSiteError(code: MaliciousSiteProtection.MaliciousSiteError.Code.phishing, failingUrl: http://privacy-test-pages.site/security/badware/phishing.html))")
Test (Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L51
testPhishingDetectedThenDDGLoaded_tabIsNotMarkedPhishing, failed - Phishing request loaded
Test (Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L133
testPhishingDetectedThenDDGLoaded_tabIsNotMarkedPhishing, XCTAssertEqual failed: ("nil") is not equal to ("Optional(MaliciousSiteProtection.MaliciousSiteError(code: MaliciousSiteProtection.MaliciousSiteError.Code.phishing, failingUrl: http://privacy-test-pages.site/security/badware/phishing.html))")
Test (Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L51
testPhishingDetectedThenDDGLoaded_tabIsNotMarkedPhishing, failed - Phishing request loaded
Test (Sandbox): IntegrationTests/MaliciousSiteProtection/MaliciousSiteProtectionIntegrationTests.swift#L133
testPhishingDetectedThenDDGLoaded_tabIsNotMarkedPhishing, XCTAssertEqual failed: ("nil") is not equal to ("Optional(MaliciousSiteProtection.MaliciousSiteError(code: MaliciousSiteProtection.MaliciousSiteError.Code.phishing, failingUrl: http://privacy-test-pages.site/security/badware/phishing.html))")
ShellCheck
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
Verify autoconsent bundle
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
SwiftLint
ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
Make Release Build: LocalPackages/UDSHelper/Sources/UDSHelper/UDSServer.swift#L25
extension declares a conformance of imported type 'NWConnection' to imported protocols 'Hashable', 'Equatable'; this will not behave correctly if the owners of 'Network' introduce this conformance in the future
Make Release Build: LocalPackages/UDSHelper/Sources/UDSHelper/UDSServer.swift#L25
extension declares a conformance of imported type 'NWConnection' to imported protocols 'Hashable', 'Equatable'; this will not behave correctly if the owners of 'Network' introduce this conformance in the future
Make Release Build: LocalPackages/AppKitExtensions/Sources/AppKitExtensions/NSEventExtension.swift#L118
extension declares a conformance of imported type 'Set' to imported protocols 'ExpressibleByStringLiteral', 'ExpressibleByExtendedGraphemeClusterLiteral', 'ExpressibleByUnicodeScalarLiteral'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
Make Release Build: LocalPackages/AppKitExtensions/Sources/AppKitExtensions/NSEventExtension.swift#L118
extension declares a conformance of imported type 'Set' to imported protocols 'ExpressibleByStringLiteral', 'ExpressibleByExtendedGraphemeClusterLiteral', 'ExpressibleByUnicodeScalarLiteral'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
Make Release Build: LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/TCPFlowManager.swift#L194
capture of 'flow' with non-sendable type 'NEAppProxyTCPFlow?' in a `@Sendable` closure
Make Release Build: LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/TCPFlowManager.swift#L20
add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NetworkExtension'
Make Release Build: LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/UDPFlowManager.swift#L179
global actor 'UDPFlowActor'-isolated instance method 'hash(into:)' cannot be used to satisfy nonisolated protocol requirement; this is an error in the Swift 6 language mode
Make Release Build: LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/UDPFlowManager.swift#L173
global actor 'UDPFlowActor'-isolated operator function '==' cannot be used to satisfy nonisolated protocol requirement; this is an error in the Swift 6 language mode
Make Release Build: LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/UDPFlowManager.swift#L326
global actor 'UDPFlowActor'-isolated instance method 'hash(into:)' cannot be used to satisfy nonisolated protocol requirement; this is an error in the Swift 6 language mode
Make Release Build: LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/UDPFlowManager.swift#L322
global actor 'UDPFlowActor'-isolated operator function '==' cannot be used to satisfy nonisolated protocol requirement; this is an error in the Swift 6 language mode
Test (Non-Sandbox)
No files were found with the provided path: Non-Sandbox-unittests.xcresult. No artifacts will be uploaded.
Test (Non-Sandbox)
sandbox-test-tool isn't code signed but requires entitlements. It is not possible to add entitlements to a binary without signing it. (in target 'sandbox-test-tool' from project 'DuckDuckGo')
Test (Non-Sandbox): LocalPackages/UDSHelper/Sources/UDSHelper/UDSServer.swift#L25
extension declares a conformance of imported type 'NWConnection' to imported protocols 'Hashable', 'Equatable'; this will not behave correctly if the owners of 'Network' introduce this conformance in the future
Test (Non-Sandbox): LocalPackages/AppKitExtensions/Sources/AppKitExtensions/NSEventExtension.swift#L118
extension declares a conformance of imported type 'Set' to imported protocols 'ExpressibleByStringLiteral', 'ExpressibleByExtendedGraphemeClusterLiteral', 'ExpressibleByUnicodeScalarLiteral'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
Test (Non-Sandbox): LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/TCPFlowManager.swift#L194
capture of 'flow' with non-sendable type 'NEAppProxyTCPFlow?' in a `@Sendable` closure
Test (Non-Sandbox): LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/TCPFlowManager.swift#L20
add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NetworkExtension'
Test (Non-Sandbox): LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/UDPFlowManager.swift#L179
global actor 'UDPFlowActor'-isolated instance method 'hash(into:)' cannot be used to satisfy nonisolated protocol requirement; this is an error in the Swift 6 language mode
Test (Non-Sandbox): LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/UDPFlowManager.swift#L173
global actor 'UDPFlowActor'-isolated operator function '==' cannot be used to satisfy nonisolated protocol requirement; this is an error in the Swift 6 language mode
Test (Non-Sandbox): LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/UDPFlowManager.swift#L326
global actor 'UDPFlowActor'-isolated instance method 'hash(into:)' cannot be used to satisfy nonisolated protocol requirement; this is an error in the Swift 6 language mode
Test (Non-Sandbox): LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/UDPFlowManager.swift#L322
global actor 'UDPFlowActor'-isolated operator function '==' cannot be used to satisfy nonisolated protocol requirement; this is an error in the Swift 6 language mode
Test (Non-Sandbox): LocalPackages/SubscriptionUI/Sources/SubscriptionUI/DebugMenu/DebugPurchaseView.swift#L167
extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
Test (Non-Sandbox): DerivedData/Build/Products/CI/GRDB.framework/Headers/GRDB.h#L11
umbrella header for module 'GRDB' does not include header 'sqlite3.h'
Test (Sandbox)
sandbox-test-tool isn't code signed but requires entitlements. It is not possible to add entitlements to a binary without signing it. (in target 'sandbox-test-tool' from project 'DuckDuckGo')
Test (Sandbox)
No files were found with the provided path: Sandbox-unittests.xcresult. No artifacts will be uploaded.
Test (Sandbox): LocalPackages/UDSHelper/Sources/UDSHelper/UDSServer.swift#L25
extension declares a conformance of imported type 'NWConnection' to imported protocols 'Hashable', 'Equatable'; this will not behave correctly if the owners of 'Network' introduce this conformance in the future
Test (Sandbox): LocalPackages/UDSHelper/Sources/UDSHelper/UDSServer.swift#L25
extension declares a conformance of imported type 'NWConnection' to imported protocols 'Hashable', 'Equatable'; this will not behave correctly if the owners of 'Network' introduce this conformance in the future
Test (Sandbox): LocalPackages/AppKitExtensions/Sources/AppKitExtensions/NSEventExtension.swift#L118
extension declares a conformance of imported type 'Set' to imported protocols 'ExpressibleByStringLiteral', 'ExpressibleByExtendedGraphemeClusterLiteral', 'ExpressibleByUnicodeScalarLiteral'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
Test (Sandbox): LocalPackages/AppKitExtensions/Sources/AppKitExtensions/NSEventExtension.swift#L118
extension declares a conformance of imported type 'Set' to imported protocols 'ExpressibleByStringLiteral', 'ExpressibleByExtendedGraphemeClusterLiteral', 'ExpressibleByUnicodeScalarLiteral'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
Test (Sandbox): LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/TCPFlowManager.swift#L194
capture of 'flow' with non-sendable type 'NEAppProxyTCPFlow?' in a `@Sendable` closure
Test (Sandbox): LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/TCPFlowManager.swift#L20
add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'NetworkExtension'
Test (Sandbox): LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/UDPFlowManager.swift#L179
global actor 'UDPFlowActor'-isolated instance method 'hash(into:)' cannot be used to satisfy nonisolated protocol requirement; this is an error in the Swift 6 language mode
Test (Sandbox): LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/UDPFlowManager.swift#L173
global actor 'UDPFlowActor'-isolated operator function '==' cannot be used to satisfy nonisolated protocol requirement; this is an error in the Swift 6 language mode
Test (Sandbox): LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/UDPFlowManager.swift#L326
global actor 'UDPFlowActor'-isolated instance method 'hash(into:)' cannot be used to satisfy nonisolated protocol requirement; this is an error in the Swift 6 language mode
Test (Sandbox): LocalPackages/NetworkProtectionMac/Sources/NetworkProtectionProxy/FlowManagers/UDPFlowManager.swift#L322
global actor 'UDPFlowActor'-isolated operator function '==' cannot be used to satisfy nonisolated protocol requirement; this is an error in the Swift 6 language mode
Test (Sandbox)
Skipped Integration_Tests_App_Store.DownloadsIntegrationTests.testWhenLocalFile_downloadStartsAlwaysDisplayingSavePanel

Artifacts

Produced during runtime
Name Size
Non-Sandbox-integrationtests-xcodebuild.log
162 KB
Non-Sandbox-integrationtests.xcresult
90 MB
Non-Sandbox-unittests-xcodebuild.log
1.09 MB
Sandbox-integrationtests-xcodebuild.log
155 KB
Sandbox-integrationtests.xcresult
89.5 MB
Sandbox-unittests-xcodebuild.log
1.82 MB