summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoah Vogt2024-02-16 15:18:00 +0100
committerNoah Vogt2024-02-16 15:18:00 +0100
commit462fd1271bb47db8b759622c99d11aed0067e668 (patch)
treed71bc5bc8f0a97244128ed2bd2489c4974727b93
parent6d6ab3ee231f698a31fac26c9f9e39d5fd49ddec (diff)
downloadaur-462fd1271bb47db8b759622c99d11aed0067e668.tar.gz
uppkg -> 122.0.6261.39-1
-rw-r--r--.SRCINFO30
-rw-r--r--PKGBUILD75
-rw-r--r--REVERT-simplify-blink-NativeValueTraitsBase.patch747
-rw-r--r--REVERT-use-v8-Array-Iterate-for-converting-script-wrappables.patch174
-rw-r--r--chromium-115-add-cmath-for-various-math-functions-in-skia.patch27
-rw-r--r--chromium-115-std-vector-used-in-verify_name_match.h-without-include.patch27
-rw-r--r--chromium-constexpr.patch48
-rw-r--r--chromium-drirc-disable-10bpc-color-configs.conf15
-rw-r--r--chromium-drirc-disable-10bpc-color-configs.patch15
-rw-r--r--compiler-rt-16.patch36
-rw-r--r--drop-flags-unsupported-by-clang16 (1).patch40
-rw-r--r--icu-74.patch21
-rw-r--r--random-build-fixes.patch516
-rw-r--r--random-fixes-for-gcc13.patch75
-rw-r--r--skia-gamma.patch13
-rw-r--r--support-ICU-74-in-LazyTextBreakIterator.patch148
-rw-r--r--webauthn-variant.patch12
17 files changed, 1262 insertions, 757 deletions
diff --git a/.SRCINFO b/.SRCINFO
index b021830cd764..903077d0c3e5 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = ungoogled-chromium-xdg
pkgdesc = A lightweight approach to removing Google web service dependency - without creating a useless ~/.pki directory
- pkgver = 121.0.6167.184
+ pkgver = 122.0.6261.39
pkgrel = 1
url = https://github.com/ungoogled-software/ungoogled-chromium
arch = x86_64
@@ -51,31 +51,39 @@ pkgbase = ungoogled-chromium-xdg
optdepends = org.freedesktop.secrets: password storage backend on GNOME / Xfce
optdepends = kwallet5: support for storing passwords in KWallet on Plasma
optdepends = chromium-extension-web-store: Web Store Functionality
- provides = chromium=121.0.6167.184
- provides = chromedriver=121.0.6167.184
+ provides = chromium=122.0.6261.39
+ provides = chromedriver=122.0.6261.39
conflicts = chromium
conflicts = chromedriver
options = !lto
- source = https://commondatastorage.googleapis.com/chromium-browser-official/chromium-121.0.6167.184.tar.xz
+ source = https://commondatastorage.googleapis.com/chromium-browser-official/chromium-122.0.6261.39.tar.xz
source = https://github.com/foutrelis/chromium-launcher/archive/v8/chromium-launcher-8.tar.gz
- source = https://gitlab.com/Matt.Jolly/chromium-patches/-/archive/121/chromium-patches-121.tar.bz2
+ source = https://gitlab.com/Matt.Jolly/chromium-patches/-/archive/122/chromium-patches-122.tar.bz2
+ source = support-ICU-74-in-LazyTextBreakIterator.patch
+ source = REVERT-simplify-blink-NativeValueTraitsBase.patch
+ source = REVERT-use-v8-Array-Iterate-for-converting-script-wrappables.patch
+ source = chromium-constexpr.patch
source = drop-flags-unsupported-by-clang16.patch
- source = icu-74.patch
+ source = compiler-rt-16.patch
source = use-oauth2-client-switches-as-default.patch
source = xdg-basedir.patch
source = no-omnibox-suggestion-autocomplete.patch
source = index.html
- source = ungoogled-chromium-121.0.6167.184-1.tar.gz::https://github.com/ungoogled-software/ungoogled-chromium/archive/refs/tags/121.0.6167.184-1.tar.gz
+ source = ungoogled-chromium-122.0.6261.39-1.tar.gz::https://github.com/ungoogled-software/ungoogled-chromium/archive/refs/tags/122.0.6261.39-1.tar.gz
source = 0001-vaapi-flag-ozone-wayland.patch
source = 0001-adjust-buffer-format-order.patch
source = 0001-enable-linux-unstable-deb-target.patch
source = 0001-ozone-wayland-implement-text_input_manager_v3.patch
source = 0001-ozone-wayland-implement-text_input_manager-fixes.patch
- sha256sums = 9fd6b82e7077ac26ec264bfcfc8ac8e0c2a0240378f035c9c0f34ad467aef09d
+ sha256sums = 30fc98bdb497d98e63fcb4d8e76acf5201eddf7e65ee907ecf4041cc8e121be3
sha256sums = 213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a
- sha256sums = e9113c1ed2900b84b488e608774ce25212d3c60094abdae005d8a943df9b505e
- sha256sums = 8d1cdf3ddd8ff98f302c90c13953f39cd804b3479b13b69b8ef138ac57c83556
- sha256sums = ff9ebd86b0010e1c604d47303ab209b1d76c3e888c423166779cefbc22de297f
+ sha256sums = 1f6acf165578288dc84edc7d9dcfabf7d38f55153b63a37ee5afa929f0e2baad
+ sha256sums = 8c256b2a9498a63706a6e7a55eadbeb8cc814be66a75e49aec3716c6be450c6c
+ sha256sums = 318df8f8662071cebcdf953698408058e17f59f184500b7e12e01a04a4206b50
+ sha256sums = 00e06b889e4face0ef41293233ce55bd52064ab040f1fdd84aa19525f8ac3601
+ sha256sums = a061f83e2b628927feb4dbc441eb54f8b8c3d81348e447cf3b90755d7cda5f54
+ sha256sums = 53774fd7f807ad42f77d45cab9e5480cc2bcb0a5c5138110a434407521af9607
+ sha256sums = 8a2649dcc6ff8d8f24ddbe40dc2a171824f681c6f33c39c4792b645b87c9dcab
sha256sums = e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711
sha256sums = f97e6cd3c4d2e04f5d9a0ea234fe768d6ba0fa9f4ecd5c7b2ca91030a1249078
sha256sums = ff1591fa38e0ede7e883dc7494b813641b7a1a7cb1ded00d9baaee987c1dbea8
diff --git a/PKGBUILD b/PKGBUILD
index 7323c7334bc2..b32f15062a95 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -12,11 +12,11 @@
# binary version of this package (-bin): github.com/noahvogt/ungoogled-chromium-xdg-bin-aur
pkgname=ungoogled-chromium-xdg
-pkgver=121.0.6167.184
+pkgver=122.0.6261.39
pkgrel=1
_launcher_ver=8
_manual_clone=0
-_system_clang=0
+_system_clang=1
pkgdesc="A lightweight approach to removing Google web service dependency - without creating a useless ~/.pki directory"
arch=('x86_64')
url="https://github.com/ungoogled-software/ungoogled-chromium"
@@ -36,18 +36,30 @@ options=('!lto') # Chromium adds its own flags for ThinLTO
source=(https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$pkgver.tar.xz
https://github.com/foutrelis/chromium-launcher/archive/v$_launcher_ver/chromium-launcher-$_launcher_ver.tar.gz
https://gitlab.com/Matt.Jolly/chromium-patches/-/archive/${pkgver%%.*}/chromium-patches-${pkgver%%.*}.tar.bz2
+ support-ICU-74-in-LazyTextBreakIterator.patch
+ REVERT-simplify-blink-NativeValueTraitsBase.patch
+ REVERT-use-v8-Array-Iterate-for-converting-script-wrappables.patch
+ chromium-constexpr.patch
drop-flags-unsupported-by-clang16.patch
- icu-74.patch
- use-oauth2-client-switches-as-default.patch
+ compiler-rt-16.patch
+ use-oauth2-client-switches-as-default.patch)
+sha256sums=('30fc98bdb497d98e63fcb4d8e76acf5201eddf7e65ee907ecf4041cc8e121be3'
+ '213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a'
+ '1f6acf165578288dc84edc7d9dcfabf7d38f55153b63a37ee5afa929f0e2baad'
+ '8c256b2a9498a63706a6e7a55eadbeb8cc814be66a75e49aec3716c6be450c6c'
+ '318df8f8662071cebcdf953698408058e17f59f184500b7e12e01a04a4206b50'
+ '00e06b889e4face0ef41293233ce55bd52064ab040f1fdd84aa19525f8ac3601'
+ 'a061f83e2b628927feb4dbc441eb54f8b8c3d81348e447cf3b90755d7cda5f54'
+ '53774fd7f807ad42f77d45cab9e5480cc2bcb0a5c5138110a434407521af9607'
+ '8a2649dcc6ff8d8f24ddbe40dc2a171824f681c6f33c39c4792b645b87c9dcab'
+ 'e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711')
+
+# ungoogled-chromium-xdg patches
+source=(${source[@]}
xdg-basedir.patch
no-omnibox-suggestion-autocomplete.patch
index.html)
-sha256sums=('9fd6b82e7077ac26ec264bfcfc8ac8e0c2a0240378f035c9c0f34ad467aef09d'
- '213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a'
- 'e9113c1ed2900b84b488e608774ce25212d3c60094abdae005d8a943df9b505e'
- '8d1cdf3ddd8ff98f302c90c13953f39cd804b3479b13b69b8ef138ac57c83556'
- 'ff9ebd86b0010e1c604d47303ab209b1d76c3e888c423166779cefbc22de297f'
- 'e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711'
+sha256sums=(${sha256sums[@]}
'f97e6cd3c4d2e04f5d9a0ea234fe768d6ba0fa9f4ecd5c7b2ca91030a1249078'
'ff1591fa38e0ede7e883dc7494b813641b7a1a7cb1ded00d9baaee987c1dbea8'
'a4cdd2b86f32d5302c2792be841ff40d982b19bb58a4e63df9d77f4c706b8665')
@@ -143,19 +155,27 @@ prepare() {
# runtime -- this allows signing into Chromium without baked-in values
patch -Np1 -i ../use-oauth2-client-switches-as-default.patch
- # Upstream fixes
+ # Upstream fixes
+ patch -Np1 -i ../support-ICU-74-in-LazyTextBreakIterator.patch
+
+ # Fix "error: defaulted definition of equality comparison operator cannot
+ # be declared constexpr because it invokes a non-constexpr comparison
+ # function" (patch for Chromium 121 from Fedora, later extended for 122)
+ patch -Np1 -i ../chromium-constexpr.patch
- # Fix build with ICU 74
- patch -Np1 -i ../icu-74.patch
+ # Revert usage of C++20 features which likely need newer clang
+ patch -Rp1 -i ../REVERT-use-v8-Array-Iterate-for-converting-script-wrappables.patch
+ patch -Rp1 -i ../REVERT-simplify-blink-NativeValueTraitsBase.patch
# Drop compiler flags that need newer clang
- #patch -Np1 -i ../drop-flags-unsupported-by-clang16.patch
+ patch -Np1 -i ../drop-flags-unsupported-by-clang16.patch
- # Fixes for building with libstdc++ instead of libc++
- #patch -Np1 -i ../chromium-patches-*/chromium-114-ruy-include.patch
- #patch -Np1 -i ../chromium-patches-*/chromium-117-material-color-include.patch
- #patch -Np1 -i ../chromium-patches-*/chromium-119-clang16.patch
+ # Allow libclang_rt.builtins from compiler-rt 16 to be used
+ patch -Np1 -i ../compiler-rt-16.patch
+ # Fixes for building with libstdc++ instead of libc++
+ patch -Np1 -i ../chromium-patches-*/chromium-114-ruy-include.patch
+ patch -Np1 -i ../chromium-patches-*/chromium-117-material-color-include.patch
# Custom Patches
@@ -188,15 +208,19 @@ prepare() {
ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/
ln -s /usr/bin/java third_party/jdk/current/bin/
- # Use prebuilt rust as system rust cannot be used due to the error:
- # error: the option `Z` is only accepted on the nightly compiler
- ./tools/rust/update_rust.py
+ if (( !_system_clang )); then
+ # Use prebuilt rust as system rust cannot be used due to the error:
+ # error: the option `Z` is only accepted on the nightly compiler
+ ./tools/rust/update_rust.py
+
+ # To link to rust libraries we need to compile with prebuilt clang
+ ./tools/clang/scripts/update.py
+ fi
- # To link to rust libraries we need to compile with prebuilt clang
- ./tools/clang/scripts/update.py
# Ungoogled Chromium changes
-_ungoogled_repo="$srcdir/ungoogled-chromium-update"
+ # _ungoogled_repo="$srcdir/ungoogled-chromium-update"
+ _ungoogled_repo="$srcdir/$pkgname-$_uc_ver"
_utils="${_ungoogled_repo}/utils"
msg2 'Pruning binaries'
@@ -281,7 +305,8 @@ build() {
fi
# Append ungoogled chromium flags to _flags array
- _ungoogled_repo="$srcdir/ungoogled-chromium-update"
+ # _ungoogled_repo="$srcdir/ungoogled-chromium-update"
+ _ungoogled_repo="$srcdir/$pkgname-$_uc_ver"
readarray -t -O ${#_flags[@]} _flags < "${_ungoogled_repo}/flags.gn"
# Facilitate deterministic builds (taken from build/config/compiler/BUILD.gn)
diff --git a/REVERT-simplify-blink-NativeValueTraitsBase.patch b/REVERT-simplify-blink-NativeValueTraitsBase.patch
new file mode 100644
index 000000000000..fc046cbac0ba
--- /dev/null
+++ b/REVERT-simplify-blink-NativeValueTraitsBase.patch
@@ -0,0 +1,747 @@
+From 940af9f2c87b436559b97c53763aa9eaaf1254eb Mon Sep 17 00:00:00 2001
+From: Jeremy Roman <jbroman@chromium.org>
+Date: Wed, 15 Nov 2023 16:24:54 +0000
+Subject: [PATCH] Use C++20 features to simplify blink::NativeValueTraitsBase.
+
+These allow some of the metaprogramming bits to be simplified a little.
+
+Change-Id: I052b4397586d21348401616e1792afdb9662f975
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5030335
+Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
+Commit-Queue: Jeremy Roman <jbroman@chromium.org>
+Cr-Commit-Position: refs/heads/main@{#1224978}
+---
+ .../bindings/core/v8/native_value_traits.h | 54 ++----
+ .../v8/native_value_traits_buffer_sources.cc | 166 ++++++++----------
+ .../core/v8/native_value_traits_impl.h | 159 +++++++----------
+ 3 files changed, 151 insertions(+), 228 deletions(-)
+
+diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
+index 7fc91d14acc71a2..1e5a0790df6da81 100644
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
+@@ -5,6 +5,7 @@
+ #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_
+ #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_
+
++#include <concepts>
+ #include <type_traits>
+
+ #include "third_party/blink/renderer/bindings/core/v8/idl_types_base.h"
+@@ -30,7 +31,7 @@ class ExceptionState;
+ // return toInt32(isolate, value, exceptionState, NormalConversion);
+ // }
+ // }
+-template <typename T, typename SFINAEHelper = void>
++template <typename T>
+ struct NativeValueTraits;
+
+ // This declaration serves only as a blueprint for specializations: the
+@@ -45,22 +46,15 @@ struct NativeValueTraits;
+
+ namespace bindings {
+
+-template <typename T, typename = void>
+-struct NativeValueTraitsHasIsNull : std::false_type {};
+-
+ template <typename T>
+-struct NativeValueTraitsHasIsNull<
+- T,
+- std::void_t<decltype(std::declval<T>().IsNull())>> : std::true_type {};
++struct ImplTypeFor {
++ using type = T;
++};
+
+ template <typename T>
+-struct NativeValueTraitsHasNullValue {
+- // true if |T| supports IDL null value.
+- static constexpr bool value =
+- // ScriptValue, String, and union types have IsNull member function.
+- bindings::NativeValueTraitsHasIsNull<T>::value ||
+- // Pointer types have nullptr as IDL null value.
+- std::is_pointer<T>::value;
++ requires std::derived_from<T, IDLBase>
++struct ImplTypeFor<T> {
++ using type = typename T::ImplType;
+ };
+
+ } // namespace bindings
+@@ -78,37 +72,17 @@ struct NativeValueTraitsHasNullValue {
+ // If present, |NullValue()| will be used when converting from the nullable type
+ // T?, and should be used if the impl type has an existing "null" state. If not
+ // present, WTF::Optional will be used to wrap the type.
+-template <typename T, typename SFINAEHelper = void>
+-struct NativeValueTraitsBase {
+- STATIC_ONLY(NativeValueTraitsBase);
+-
+- using ImplType = T;
+-
+- static constexpr bool has_null_value =
+- bindings::NativeValueTraitsHasNullValue<ImplType>::value;
+-
+- template <typename... ExtraArgs>
+- static decltype(auto) ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state,
+- ExtraArgs... extra_args) {
+- return NativeValueTraits<std::remove_pointer_t<T>>::NativeValue(
+- isolate, value, exception_state,
+- std::forward<ExtraArgs>(extra_args)...);
+- }
+-};
+-
+ template <typename T>
+-struct NativeValueTraitsBase<
+- T,
+- std::enable_if_t<std::is_base_of<IDLBase, T>::value>> {
++struct NativeValueTraitsBase {
+ STATIC_ONLY(NativeValueTraitsBase);
+
+- using ImplType = typename T::ImplType;
++ using ImplType = bindings::ImplTypeFor<T>::type;
+
++ // Pointer types have nullptr as IDL null value.
++ // ScriptValue, String, and union types have IsNull member function.
+ static constexpr bool has_null_value =
+- bindings::NativeValueTraitsHasNullValue<ImplType>::value;
++ std::is_pointer_v<ImplType> ||
++ requires(ImplType value) { value.IsNull(); };
+
+ template <typename... ExtraArgs>
+ static decltype(auto) ArgumentValue(v8::Isolate* isolate,
+diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
+index 508ea6d8eea481e..18de71d84023f0c 100644
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
+@@ -7,6 +7,7 @@
+ #include "third_party/blink/renderer/core/core_export.h"
+ #include "third_party/blink/renderer/core/execution_context/execution_context.h"
+ #include "third_party/blink/renderer/core/frame/web_feature.h"
++#include "third_party/blink/renderer/core/typed_arrays/flexible_array_buffer_view.h"
+ #include "third_party/blink/renderer/core/typed_arrays/typed_flexible_array_buffer_view.h"
+
+ namespace blink {
+@@ -698,12 +699,11 @@ DOMArrayBufferBase* NativeValueTraits<
+ // ArrayBufferView
+
+ template <typename T>
+-NotShared<T> NativeValueTraits<
+- NotShared<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- NativeValue(v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++NotShared<T> NativeValueTraits<NotShared<T>>::NativeValue(
++ v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<
+ RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -712,13 +712,12 @@ NotShared<T> NativeValueTraits<
+ }
+
+ template <typename T>
+-NotShared<T> NativeValueTraits<
+- NotShared<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++NotShared<T> NativeValueTraits<NotShared<T>>::ArgumentValue(
++ v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<
+ RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -729,12 +728,11 @@ NotShared<T> NativeValueTraits<
+ // [AllowShared] ArrayBufferView
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- MaybeShared<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- NativeValue(v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T> NativeValueTraits<MaybeShared<T>>::NativeValue(
++ v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
+ ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -743,13 +741,12 @@ MaybeShared<T> NativeValueTraits<
+ }
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- MaybeShared<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T> NativeValueTraits<MaybeShared<T>>::ArgumentValue(
++ v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
+ ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -760,12 +757,12 @@ MaybeShared<T> NativeValueTraits<
+ // [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- NativeValue(v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T>
++NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>::NativeValue(
++ v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<
+ RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
+@@ -774,13 +771,12 @@ MaybeShared<T> NativeValueTraits<
+ }
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T> NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<
++ MaybeShared<T>>>::ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<
+ RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
+@@ -791,12 +787,11 @@ MaybeShared<T> NativeValueTraits<
+ // Nullable ArrayBufferView
+
+ template <typename T>
+-NotShared<T> NativeValueTraits<
+- IDLNullable<NotShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- NativeValue(v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::NativeValue(
++ v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<
+ RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -805,13 +800,12 @@ NotShared<T> NativeValueTraits<
+ }
+
+ template <typename T>
+-NotShared<T> NativeValueTraits<
+- IDLNullable<NotShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::ArgumentValue(
++ v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<
+ RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -822,12 +816,11 @@ NotShared<T> NativeValueTraits<
+ // Nullable [AllowShared] ArrayBufferView
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- IDLNullable<MaybeShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- NativeValue(v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::NativeValue(
++ v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
+ ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -836,13 +829,12 @@ MaybeShared<T> NativeValueTraits<
+ }
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- IDLNullable<MaybeShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::ArgumentValue(
++ v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
+ ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -853,9 +845,9 @@ MaybeShared<T> NativeValueTraits<
+ // Nullable [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T>
++NativeValueTraits<IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>::
+ ArgumentValue(v8::Isolate* isolate,
+ int argument_index,
+ v8::Local<v8::Value> value,
+@@ -870,13 +862,11 @@ MaybeShared<T> NativeValueTraits<
+ // [AllowShared, FlexibleArrayBufferView] ArrayBufferView
+
+ template <typename T>
+-T NativeValueTraits<T,
+- typename std::enable_if_t<
+- std::is_base_of<FlexibleArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, FlexibleArrayBufferView>
++T NativeValueTraits<T>::ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+ ResizableAllowance::kDisallowResizable,
+@@ -888,13 +878,12 @@ T NativeValueTraits<T,
+ // ArrayBufferView
+
+ template <typename T>
+-T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>,
+- typename std::enable_if_t<
+- std::is_base_of<FlexibleArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, FlexibleArrayBufferView>
++T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>::ArgumentValue(
++ v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<
+ RecipeTrait<T>, ToFlexibleArrayBufferView, Nullablity::kIsNotNullable,
+ BufferSizeCheck::kDoNotCheck, ResizableAllowance::kDisallowResizable,
+@@ -905,13 +894,12 @@ T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>,
+ // Nullable [AllowShared, FlexibleArrayBufferView] ArrayBufferView
+
+ template <typename T>
+-T NativeValueTraits<IDLNullable<T>,
+- typename std::enable_if_t<
+- std::is_base_of<FlexibleArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, FlexibleArrayBufferView>
++T NativeValueTraits<IDLNullable<T>>::ArgumentValue(
++ v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+ ResizableAllowance::kDisallowResizable,
+diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
+index 899929dcf49f90a..5011503dcf1c0c8 100644
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
+@@ -5,6 +5,9 @@
+ #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_IMPL_H_
+ #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_IMPL_H_
+
++#include <concepts>
++#include <type_traits>
++
+ #include "third_party/abseil-cpp/absl/types/optional.h"
+ #include "third_party/blink/renderer/bindings/core/v8/idl_types.h"
+ #include "third_party/blink/renderer/bindings/core/v8/native_value_traits.h"
+@@ -715,9 +718,8 @@ struct CORE_EXPORT NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<T> {
+ // NotShared<T> or MaybeShared<T> should be used instead.
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -729,9 +731,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<IDLNullable<T>> {
+ // NotShared<T> or MaybeShared<T> should be used instead.
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -743,9 +744,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- NotShared<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<NotShared<T>>
+ : public NativeValueTraitsBase<NotShared<T>> {
+ static NotShared<T> NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -758,9 +758,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<NotShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<IDLNullable<NotShared<T>>>
+ : public NativeValueTraitsBase<NotShared<T>> {
+ static NotShared<T> NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -773,9 +772,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- MaybeShared<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<MaybeShared<T>>
+ : public NativeValueTraitsBase<MaybeShared<T>> {
+ static MaybeShared<T> NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -788,9 +786,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>
+ : public NativeValueTraitsBase<MaybeShared<T>> {
+ // FlexibleArrayBufferView uses this in its implementation, so we cannot
+ // delete it.
+@@ -805,9 +802,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<MaybeShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<IDLNullable<MaybeShared<T>>>
+ : public NativeValueTraitsBase<MaybeShared<T>> {
+ static MaybeShared<T> NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -820,9 +816,9 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
++ requires std::derived_from<T, DOMArrayBufferView>
+ struct NativeValueTraits<
+- IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
++ IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>
+ : public NativeValueTraitsBase<MaybeShared<T>> {
+ // BufferSourceTypeNoSizeLimit must be used only as arguments.
+ static MaybeShared<T> NativeValue(v8::Isolate* isolate,
+@@ -836,11 +832,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<
+- std::is_base_of<FlexibleArrayBufferView, T>::value>>
+- : public NativeValueTraitsBase<T> {
++ requires std::derived_from<T, FlexibleArrayBufferView>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
+ // FlexibleArrayBufferView must be used only as arguments.
+ static T NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -853,10 +846,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLBufferSourceTypeNoSizeLimit<T>,
+- typename std::enable_if_t<
+- std::is_base_of<FlexibleArrayBufferView, T>::value>>
++ requires std::derived_from<T, FlexibleArrayBufferView>
++struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>
+ : public NativeValueTraitsBase<T> {
+ // BufferSourceTypeNoSizeLimit and FlexibleArrayBufferView must be used only
+ // as arguments.
+@@ -871,11 +862,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<
+- std::is_base_of<FlexibleArrayBufferView, T>::value>>
+- : public NativeValueTraitsBase<T> {
++ requires std::derived_from<T, FlexibleArrayBufferView>
++struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T> {
+ // FlexibleArrayBufferView must be used only as arguments.
+ static T NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -1134,9 +1122,8 @@ NativeValueTraits<IDLSequence<T>>::NativeValue(
+ }
+
+ template <typename T>
+-struct NativeValueTraits<IDLNullable<IDLSequence<T>>,
+- typename std::enable_if_t<
+- NativeValueTraits<IDLSequence<T>>::has_null_value>>
++ requires NativeValueTraits<IDLSequence<T>>::has_null_value
++struct NativeValueTraits<IDLNullable<IDLSequence<T>>>
+ : public NativeValueTraitsBase<HeapVector<AddMemberIfNeeded<T>>*> {
+ using ImplType = typename NativeValueTraits<IDLSequence<T>>::ImplType*;
+
+@@ -1203,9 +1190,8 @@ struct NativeValueTraits<IDLArray<T>>
+ : public NativeValueTraits<IDLSequence<T>> {};
+
+ template <typename T>
+-struct NativeValueTraits<IDLNullable<IDLArray<T>>,
+- typename std::enable_if_t<
+- NativeValueTraits<IDLSequence<T>>::has_null_value>>
++ requires NativeValueTraits<IDLSequence<T>>::has_null_value
++struct NativeValueTraits<IDLNullable<IDLArray<T>>>
+ : public NativeValueTraits<IDLNullable<IDLSequence<T>>> {};
+
+ // Record types
+@@ -1335,10 +1321,8 @@ struct NativeValueTraits<IDLRecord<K, V>>
+
+ // Callback function types
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, CallbackFunctionBase>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1361,9 +1345,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
++ requires std::derived_from<T, CallbackFunctionBase>
++struct NativeValueTraits<IDLNullable<T>>
+ : public NativeValueTraitsBase<IDLNullable<T>> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -1392,10 +1375,8 @@ struct NativeValueTraits<
+
+ // Callback interface types
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, CallbackInterfaceBase>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1418,9 +1399,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
++ requires std::derived_from<T, CallbackInterfaceBase>
++struct NativeValueTraits<IDLNullable<T>>
+ : public NativeValueTraitsBase<IDLNullable<T>> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -1449,11 +1429,8 @@ struct NativeValueTraits<
+
+ // Dictionary types
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<
+- std::is_base_of<bindings::DictionaryBase, T>::value>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, bindings::DictionaryBase>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1464,14 +1441,11 @@ struct NativeValueTraits<
+ // We don't support nullable dictionary types in general since it's quite
+ // confusing and often misused.
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<
+- std::is_base_of<bindings::DictionaryBase, T>::value &&
+- (std::is_same<T, GPUColorTargetState>::value ||
+- std::is_same<T, GPURenderPassColorAttachment>::value ||
+- std::is_same<T, GPUVertexBufferLayout>::value)>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, bindings::DictionaryBase> &&
++ (std::same_as<T, GPUColorTargetState> ||
++ std::same_as<T, GPURenderPassColorAttachment> ||
++ std::same_as<T, GPUVertexBufferLayout>)
++struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1483,11 +1457,8 @@ struct NativeValueTraits<
+
+ // Enumeration types
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<
+- std::is_base_of<bindings::EnumerationBase, T>::value>>
+- : public NativeValueTraitsBase<T> {
++ requires std::derived_from<T, bindings::EnumerationBase>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
+ static T NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1497,10 +1468,8 @@ struct NativeValueTraits<
+
+ // Interface types
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, ScriptWrappable>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+ static inline T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1528,9 +1497,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
++ requires std::derived_from<T, ScriptWrappable>
++struct NativeValueTraits<IDLNullable<T>>
+ : public NativeValueTraitsBase<IDLNullable<T>> {
+ static inline T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -1565,10 +1533,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, bindings::UnionBase>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1584,10 +1550,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, bindings::UnionBase>
++struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1608,9 +1572,8 @@ struct NativeValueTraits<
+
+ // Nullable types
+ template <typename InnerType>
+-struct NativeValueTraits<
+- IDLNullable<InnerType>,
+- typename std::enable_if_t<!NativeValueTraits<InnerType>::has_null_value>>
++ requires(!NativeValueTraits<InnerType>::has_null_value)
++struct NativeValueTraits<IDLNullable<InnerType>>
+ : public NativeValueTraitsBase<IDLNullable<InnerType>> {
+ // https://webidl.spec.whatwg.org/#es-nullable-type
+ using ImplType =
+@@ -1642,9 +1605,8 @@ struct NativeValueTraits<IDLNullable<IDLNullable<T>>>;
+
+ // Optional types
+ template <typename T>
+-struct NativeValueTraits<IDLOptional<T>,
+- typename std::enable_if_t<std::is_arithmetic<
+- typename NativeValueTraits<T>::ImplType>::value>>
++ requires std::is_arithmetic_v<typename NativeValueTraits<T>::ImplType>
++struct NativeValueTraits<IDLOptional<T>>
+ : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
+ using ImplType = typename NativeValueTraits<T>::ImplType;
+
+@@ -1666,9 +1628,8 @@ struct NativeValueTraits<IDLOptional<T>,
+ };
+
+ template <typename T>
+-struct NativeValueTraits<IDLOptional<T>,
+- typename std::enable_if_t<std::is_pointer<
+- typename NativeValueTraits<T>::ImplType>::value>>
++ requires std::is_pointer_v<typename NativeValueTraits<T>::ImplType>
++struct NativeValueTraits<IDLOptional<T>>
+ : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
+ using ImplType = typename NativeValueTraits<T>::ImplType;
+
diff --git a/REVERT-use-v8-Array-Iterate-for-converting-script-wrappables.patch b/REVERT-use-v8-Array-Iterate-for-converting-script-wrappables.patch
new file mode 100644
index 000000000000..8db4a848aed4
--- /dev/null
+++ b/REVERT-use-v8-Array-Iterate-for-converting-script-wrappables.patch
@@ -0,0 +1,174 @@
+From ce71348a09f6689dd01a68db64b172191d0182d8 Mon Sep 17 00:00:00 2001
+From: Andrey Kosyakov <caseq@chromium.org>
+Date: Thu, 21 Dec 2023 18:38:38 +0000
+Subject: [PATCH] [bindings] Use v8::Array::Iterate for converting script
+ wrappables
+
+This changes CreateIDLSequenceFromV8Array to use the new
+v8::Array::Iterate() operation.
+This speeds up the "execBundles" part of the microbenchmark
+at crbug.com/dawn/1858 by around 3x.
+This depends on crrev.com/c/4846594 landing (and rolling) first.
+
+This is a slight re-work of https://crrev.com/c/4847447/3,
+originally by jkummerow@chromium.org
+
+Bug: v8:14218, dawn:1858, 1511239
+Change-Id: Ia266556d05b4d53e6942e12609d1c08882b4ff0f
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5132129
+Commit-Queue: Andrey Kosyakov <caseq@chromium.org>
+Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
+Cr-Commit-Position: refs/heads/main@{#1240236}
+---
+ .../bindings/core/v8/native_value_traits.h | 6 ++
+ .../core/v8/native_value_traits_impl.h | 91 ++++++++++++++++++-
+ 2 files changed, 95 insertions(+), 2 deletions(-)
+
+diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
+index 1e5a0790df6d..a5c28b37e945 100644
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
+@@ -84,6 +84,12 @@ struct NativeValueTraitsBase {
+ std::is_pointer_v<ImplType> ||
+ requires(ImplType value) { value.IsNull(); };
+
++ // This should only be true for certain subclasses of ScriptWrappable
++ // that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with
++ // regards to how NativeValue() is implemented for the underlying type.
++ static constexpr bool supports_scriptwrappable_specific_fast_array_iteration =
++ false;
++
+ template <typename... ExtraArgs>
+ static decltype(auto) ArgumentValue(v8::Isolate* isolate,
+ int argument_index,
+diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
+index 5011503dcf1c..f085b6e90516 100644
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
+@@ -1037,10 +1037,86 @@ CreateIDLSequenceFromV8ArraySlow(v8::Isolate* isolate,
+ return {};
+ }
+
+- typename NativeValueTraits<IDLSequence<T>>::ImplType result;
++ using ResultType = typename NativeValueTraits<IDLSequence<T>>::ImplType;
++ ResultType result;
+ result.ReserveInitialCapacity(length);
+ v8::Local<v8::Context> current_context = isolate->GetCurrentContext();
+ v8::TryCatch try_block(isolate);
++
++ // Fast path -- we're creating a sequence of script wrappables, which can be
++ // done by directly getting underlying object as long as array types are
++ // homogeneous. With ScriptWrappables, we don't expect to enter JS during
++ // iteration, so we can rely on v8::Array::Iterate() which is much faster than
++ // iterating an array on the client side of the v8. Additionally, for most
++ // subsptyes of ScriptWrappables, we can speed up type checks (see more on
++ // that below next to supports_scriptwrappable_specific_fast_array_iteration
++ // check.
++ if constexpr (std::is_base_of_v<ScriptWrappable, T>) {
++ struct CallbackData {
++ STACK_ALLOCATED();
++
++ public:
++ v8::Isolate* isolate;
++ v8::TypecheckWitness witness;
++ ResultType& result;
++ ExceptionState& exception_state;
++ CallbackData(v8::Isolate* isolate,
++ ResultType& result,
++ ExceptionState& exception_state)
++ : isolate(isolate),
++ witness(isolate),
++ result(result),
++ exception_state(exception_state) {}
++ };
++
++ CallbackData callback_data(isolate, result, exception_state);
++ v8::Array::IterationCallback callback = [](uint32_t index,
++ v8::Local<v8::Value> v8_element,
++ void* data) {
++ CallbackData* callback_data = reinterpret_cast<CallbackData*>(data);
++ // 3.4. Initialize Si to the result of converting nextItem to an IDL value
++ // of type T.
++ v8::TypecheckWitness& witness = callback_data->witness;
++ // We can speed up type check by taking advantage of V8's type witness,
++ // provided traits' NativeValue implementation doesn't have additional
++ // logic beyond checking the type and calling ToScriptWrappable().
++ if constexpr (
++ NativeValueTraits<
++ T>::supports_scriptwrappable_specific_fast_array_iteration) {
++ if (witness.Matches(v8_element)) {
++ auto&& value = ToScriptWrappable(v8_element.As<v8::Object>())
++ ->template ToImpl<T>();
++ callback_data->result.push_back(std::move(value));
++ return v8::Array::CallbackResult::kContinue;
++ }
++ }
++ auto&& element = NativeValueTraits<T>::NativeValue(
++ callback_data->isolate, v8_element, callback_data->exception_state);
++ if (callback_data->exception_state.HadException()) {
++ // It doesn't matter whether we return `kException` or `kBreak` here,
++ // as that only affects the return value of `v8_array->Iterate()`,
++ // which we are ignoring.
++ return v8::Array::CallbackResult::kException;
++ }
++ if constexpr (
++ NativeValueTraits<
++ T>::supports_scriptwrappable_specific_fast_array_iteration) {
++ witness.Update(v8_element);
++ }
++ callback_data->result.push_back(std::move(element));
++ return v8::Array::CallbackResult::kContinue;
++ };
++ if (!v8_array->Iterate(current_context, callback, &callback_data)
++ .IsJust()) {
++ if (try_block.HasCaught()) {
++ exception_state.RethrowV8Exception(try_block.Exception());
++ }
++ DCHECK(exception_state.HadException());
++ return {};
++ }
++ return result;
++ }
++
+ // Array length may change if array is mutated during iteration.
+ for (uint32_t i = 0; i < v8_array->Length(); ++i) {
+ v8::Local<v8::Value> v8_element;
+@@ -1056,6 +1132,7 @@ CreateIDLSequenceFromV8ArraySlow(v8::Isolate* isolate,
+ return {};
+ result.push_back(std::move(element));
+ }
++
+ // 3.2. If next is false, then return an IDL sequence value of type
+ // sequence<T> of length i, where the value of the element at index j is Sj.
+ return result;
+@@ -1398,6 +1475,7 @@ struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+ }
+ };
+
++// Interface types
+ template <typename T>
+ requires std::derived_from<T, CallbackInterfaceBase>
+ struct NativeValueTraits<IDLNullable<T>>
+@@ -1470,12 +1548,21 @@ struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
+ template <typename T>
+ requires std::derived_from<T, ScriptWrappable>
+ struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
++ // This signifies that CreateIDLSequenceFromV8ArraySlow() may apply
++ // certain optimization based on assumptions about `NativeValue()`
++ // implementation below. For subclasses of ScriptWrappable that have
++ // different implementation of NativeValue(), this should remain false.
++ static constexpr bool supports_scriptwrappable_specific_fast_array_iteration =
++ true;
++
+ static inline T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+ const WrapperTypeInfo* wrapper_type_info = T::GetStaticWrapperTypeInfo();
+- if (V8PerIsolateData::From(isolate)->HasInstance(wrapper_type_info, value))
++ if (V8PerIsolateData::From(isolate)->HasInstance(wrapper_type_info,
++ value)) {
+ return ToScriptWrappable(value.As<v8::Object>())->template ToImpl<T>();
++ }
+
+ bindings::NativeValueTraitsInterfaceNotOfType(wrapper_type_info,
+ exception_state);
diff --git a/chromium-115-add-cmath-for-various-math-functions-in-skia.patch b/chromium-115-add-cmath-for-various-math-functions-in-skia.patch
deleted file mode 100644
index ff3d01d62695..000000000000
--- a/chromium-115-add-cmath-for-various-math-functions-in-skia.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-https://chromium-review.googlesource.com/c/chromium/src/+/4545069
-
-Parent: 4d0ef938 ([DTC] Replace Browser Test Management Logic with new Mixin)
-Author: Stephan Hartmann <stha09@googlemail.com>
-AuthorDate: 2023-05-30 20:27:03 +0000
-Commit: Chromium LUCI CQ <chromium-scoped@luci-project-accounts.iam.gserviceaccount.com>
-CommitDate: 2023-05-30 20:27:03 +0000
-IWYU: add cmath for various math functions in //skia
-Bug: 957519
-Change-Id: I4616f7f161330feb3fb2299da094874663655189
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4545069
-Commit-Queue: Nico Weber <thakis@chromium.org>
-Reviewed-by: Nico Weber <thakis@chromium.org>
-Cr-Commit-Position: refs/heads/main@{#1150817}
-diff --git a/skia/ext/skcolorspace_trfn.cc b/skia/ext/skcolorspace_trfn.cc
-index c0d6bd2..97c4dfa 100644
---- a/skia/ext/skcolorspace_trfn.cc
-+++ b/skia/ext/skcolorspace_trfn.cc
-@@ -4,6 +4,8 @@
-
- #include "skia/ext/skcolorspace_trfn.h"
-
-+#include <cmath>
-+
- namespace skia {
-
- namespace {
diff --git a/chromium-115-std-vector-used-in-verify_name_match.h-without-include.patch b/chromium-115-std-vector-used-in-verify_name_match.h-without-include.patch
deleted file mode 100644
index cb598a425768..000000000000
--- a/chromium-115-std-vector-used-in-verify_name_match.h-without-include.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-Parent: 6f43136d (Use BuiltInRecovery for the Attribution Reporting database)
-Author: Jose Dapena Paz <jdapena@igalia.com>
-AuthorDate: 2023-05-31 17:03:02 +0000
-Commit: Chromium LUCI CQ <chromium-scoped@luci-project-accounts.iam.gserviceaccount.com>
-CommitDate: 2023-05-31 17:03:02 +0000
-
-IWYU: std::vector used in verify_name_match.h without include
-
-Bug: 957519
-Change-Id: Ie753fadae35adb293f854a0f8d4f675e67a2fc31
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4533815
-Reviewed-by: David Benjamin <davidben@chromium.org>
-Commit-Queue: José Dapena Paz <jdapena@igalia.com>
-Cr-Commit-Position: refs/heads/main@{#1151307}
-diff --git a/net/cert/pki/verify_name_match.h b/net/cert/pki/verify_name_match.h
-index d22cf7f..e30b221 100644
---- a/net/cert/pki/verify_name_match.h
-+++ b/net/cert/pki/verify_name_match.h
-@@ -6,6 +6,7 @@
- #define NET_CERT_PKI_VERIFY_NAME_MATCH_H_
-
- #include <string>
-+#include <vector>
-
- #include "net/base/net_export.h"
-
-
diff --git a/chromium-constexpr.patch b/chromium-constexpr.patch
new file mode 100644
index 000000000000..35acd392c3ec
--- /dev/null
+++ b/chromium-constexpr.patch
@@ -0,0 +1,48 @@
+diff --git a/base/types/strong_alias.h b/base/types/strong_alias.h
+index 9f80b7fc8adf..4d28bd195c8a 100644
+--- a/base/types/strong_alias.h
++++ b/base/types/strong_alias.h
+@@ -110,7 +110,7 @@ class StrongAlias {
+ // a `StrongAlias<W>`.
+ friend constexpr auto operator<=>(const StrongAlias& lhs,
+ const StrongAlias& rhs) = default;
+- friend constexpr bool operator==(const StrongAlias& lhs,
++ friend bool operator==(const StrongAlias& lhs,
+ const StrongAlias& rhs) = default;
+
+ // Hasher to use in std::unordered_map, std::unordered_set, etc.
+diff --git a/components/autofill/core/common/unique_ids.h b/components/autofill/core/common/unique_ids.h
+index eb8d5d2c8ec9..6bfabf286379 100644
+--- a/components/autofill/core/common/unique_ids.h
++++ b/components/autofill/core/common/unique_ids.h
+@@ -137,7 +137,7 @@ struct GlobalId {
+
+ friend constexpr auto operator<=>(const GlobalId<RendererId>& lhs,
+ const GlobalId<RendererId>& rhs) = default;
+- friend constexpr bool operator==(const GlobalId<RendererId>& lhs,
++ friend bool operator==(const GlobalId<RendererId>& lhs,
+ const GlobalId<RendererId>& rhs) = default;
+ };
+
+diff --git a/components/performance_manager/resource_attribution/query_params.h b/components/performance_manager/resource_attribution/query_params.h
+index 4616f1665e91..679dfcabe999 100644
+--- a/components/performance_manager/resource_attribution/query_params.h
++++ b/components/performance_manager/resource_attribution/query_params.h
+@@ -29,7 +29,7 @@ class ContextCollection {
+ ContextCollection(const ContextCollection& other);
+ ContextCollection& operator=(const ContextCollection& other);
+
+- friend constexpr bool operator==(const ContextCollection&,
++ friend bool operator==(const ContextCollection&,
+ const ContextCollection&) = default;
+
+ // Adds `context` to the collection.
+@@ -67,7 +67,7 @@ struct QueryParams {
+ QueryParams(const QueryParams& other);
+ QueryParams& operator=(const QueryParams& other);
+
+- friend constexpr bool operator==(const QueryParams&,
++ friend bool operator==(const QueryParams&,
+ const QueryParams&) = default;
+
+ // Resource types to measure.
diff --git a/chromium-drirc-disable-10bpc-color-configs.conf b/chromium-drirc-disable-10bpc-color-configs.conf
deleted file mode 100644
index ef836b32222e..000000000000
--- a/chromium-drirc-disable-10bpc-color-configs.conf
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-
-Disable 10 bpc color configs; fixes VAAPI playback.
-
-https://bugs.freedesktop.org/show_bug.cgi?id=106490
-
--->
-
-<driconf>
- <device>
- <application name="Chromium" executable="chromium">
- <option name="allow_rgb10_configs" value="false" />
- </application>
- </device>
-</driconf>
diff --git a/chromium-drirc-disable-10bpc-color-configs.patch b/chromium-drirc-disable-10bpc-color-configs.patch
deleted file mode 100644
index ef836b32222e..000000000000
--- a/chromium-drirc-disable-10bpc-color-configs.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-
-Disable 10 bpc color configs; fixes VAAPI playback.
-
-https://bugs.freedesktop.org/show_bug.cgi?id=106490
-
--->
-
-<driconf>
- <device>
- <application name="Chromium" executable="chromium">
- <option name="allow_rgb10_configs" value="false" />
- </application>
- </device>
-</driconf>
diff --git a/compiler-rt-16.patch b/compiler-rt-16.patch
new file mode 100644
index 000000000000..e14829ad2987
--- /dev/null
+++ b/compiler-rt-16.patch
@@ -0,0 +1,36 @@
+diff --git a/build/config/clang/BUILD.gn b/build/config/clang/BUILD.gn
+index d4de2e0cca0..57359c32121 100644
+--- a/build/config/clang/BUILD.gn
++++ b/build/config/clang/BUILD.gn
+@@ -130,12 +130,15 @@ template("clang_lib") {
+ } else if (is_linux || is_chromeos) {
+ if (current_cpu == "x64") {
+ _dir = "x86_64-unknown-linux-gnu"
++ _suffix = "-x86_64"
+ } else if (current_cpu == "x86") {
+ _dir = "i386-unknown-linux-gnu"
++ _suffix = "-i386"
+ } else if (current_cpu == "arm") {
+ _dir = "armv7-unknown-linux-gnueabihf"
+ } else if (current_cpu == "arm64") {
+ _dir = "aarch64-unknown-linux-gnu"
++ _suffix = "-aarch64"
+ } else {
+ assert(false) # Unhandled cpu type
+ }
+@@ -166,6 +169,15 @@ template("clang_lib") {
+ assert(false) # Unhandled target platform
+ }
+
++ # Bit of a hack to make this find builtins from compiler-rt 16
++ if (is_linux || is_chromeos) {
++ if (clang_version == "16") {
++ _dir = "linux"
++ } else {
++ _suffix = ""
++ }
++ }
++
+ _clang_lib_dir = "$clang_base_path/lib/clang/$clang_version/lib"
+ _lib_file = "${_prefix}clang_rt.${_libname}${_suffix}.${_ext}"
+ libs = [ "$_clang_lib_dir/$_dir/$_lib_file" ]
diff --git a/drop-flags-unsupported-by-clang16 (1).patch b/drop-flags-unsupported-by-clang16 (1).patch
new file mode 100644
index 000000000000..a146a6d5ee49
--- /dev/null
+++ b/drop-flags-unsupported-by-clang16 (1).patch
@@ -0,0 +1,40 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 89b4755ac8b3..94b457385663 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -618,24 +618,6 @@ config("compiler") {
+ }
+ }
+
+- # TODO(crbug.com/1488374): This causes binary size growth and potentially
+- # other problems.
+- # TODO(crbug.com/1491036): This isn't supported by Cronet's mainline llvm version.
+- if (default_toolchain != "//build/toolchain/cros:target" &&
+- !llvm_android_mainline) {
+- cflags += [
+- "-mllvm",
+- "-split-threshold-for-reg-with-hint=0",
+- ]
+- if (use_thin_lto && is_a_target_toolchain) {
+- if (is_win) {
+- ldflags += [ "-mllvm:-split-threshold-for-reg-with-hint=0" ]
+- } else {
+- ldflags += [ "-Wl,-mllvm,-split-threshold-for-reg-with-hint=0" ]
+- }
+- }
+- }
+-
+ # TODO(crbug.com/1235145): Investigate why/if this should be needed.
+ if (is_win) {
+ cflags += [ "/clang:-ffp-contract=off" ]
+@@ -802,10 +784,6 @@ config("compiler") {
+ if (is_apple) {
+ ldflags += [ "-Wcrl,object_path_lto" ]
+ }
+-
+- # We only use one version of LLVM within a build so there's no need to
+- # upgrade debug info, which can be expensive since it runs the verifier.
+- ldflags += [ "-Wl,-mllvm,-disable-auto-upgrade-debug-info" ]
+ }
+
+ # TODO(https://crbug.com/1211155): investigate why this isn't effective on
diff --git a/icu-74.patch b/icu-74.patch
deleted file mode 100644
index efb8fb161c61..000000000000
--- a/icu-74.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-https://bugs.gentoo.org/917645
-(copied patch from qtwebengine:6 - https://bugs.gentoo.org/917633)
-
-Quick fix for a static_assert failure with icu74. Still waiting
-for a proper upstream fix and unknown if entirely right, but is
-an extension of [1] (is now 48 rather than 43).
-
-[1] https://crrev.com/e60b571faa3f14dd9119a6792dccf12f8bf80192
---- a/third_party/blink/renderer/platform/text/text_break_iterator.cc
-+++ b/third_party/blink/renderer/platform/text/text_break_iterator.cc
-@@ -161,7 +161,9 @@ static const unsigned char kAsciiLineBreakTable[][(kAsciiLineBreakTableLastChar
- };
- // clang-format on
-
--#if U_ICU_VERSION_MAJOR_NUM >= 58
-+#if U_ICU_VERSION_MAJOR_NUM >= 74
-+#define BA_LB_COUNT (U_LB_COUNT - 8)
-+#elif U_ICU_VERSION_MAJOR_NUM >= 58
- #define BA_LB_COUNT (U_LB_COUNT - 3)
- #else
- #define BA_LB_COUNT U_LB_COUNT
diff --git a/random-build-fixes.patch b/random-build-fixes.patch
deleted file mode 100644
index 922e67d8984f..000000000000
--- a/random-build-fixes.patch
+++ /dev/null
@@ -1,516 +0,0 @@
-diff --git a/chrome/browser/download/bubble/download_bubble_update_service.cc b/chrome/browser/download/bubble/download_bubble_update_service.cc
-index 93ec91e38b9..acd25f25d15 100644
---- a/chrome/browser/download/bubble/download_bubble_update_service.cc
-+++ b/chrome/browser/download/bubble/download_bubble_update_service.cc
-@@ -91,7 +91,7 @@ ItemSortKey GetSortKey(const Item& item) {
- // Helper to get an iterator to the last element in the cache. The cache
- // must not be empty.
- template <typename Item>
--SortedItems<Item>::const_iterator GetLastIter(const SortedItems<Item>& cache) {
-+typename SortedItems<Item>::const_iterator GetLastIter(const SortedItems<Item>& cache) {
- CHECK(!cache.empty());
- auto it = cache.end();
- return std::prev(it);
-@@ -967,9 +967,9 @@ bool DownloadBubbleUpdateService::CacheManager::RemoveItemFromCacheImpl(
- }
-
- template <typename Id, typename Item>
--SortedItems<Item>::iterator
-+typename SortedItems<Item>::iterator
- DownloadBubbleUpdateService::CacheManager::RemoveItemFromCacheByIter(
-- SortedItems<Item>::iterator iter,
-+ typename SortedItems<Item>::iterator iter,
- SortedItems<Item>& cache,
- IterMap<Id, Item>& iter_map) {
- CHECK(iter != cache.end());
-diff --git a/chrome/browser/ui/omnibox/chrome_omnibox_client.cc b/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
-index d923cdfa322..36ac59ca7ac 100644
---- a/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
-+++ b/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
-@@ -470,10 +470,10 @@ void ChromeOmniboxClient::OnAutocompleteAccept(
- alternative_nav_match);
-
- // Store the details necessary to open the omnibox match via browser commands.
-- location_bar_->set_navigation_params(LocationBar::NavigationParams(
-+ location_bar_->set_navigation_params(LocationBar::NavigationParams{
- destination_url, disposition, transition, match_selection_timestamp,
- destination_url_entered_without_scheme,
-- destination_url_entered_with_http_scheme));
-+ destination_url_entered_with_http_scheme});
-
- if (browser_) {
- auto navigation = chrome::OpenCurrentURL(browser_);
-diff --git a/chrome/test/chromedriver/capabilities.cc b/chrome/test/chromedriver/capabilities.cc
-index a29dc8e4818..00aaf9b4067 100644
---- a/chrome/test/chromedriver/capabilities.cc
-+++ b/chrome/test/chromedriver/capabilities.cc
-@@ -355,7 +355,7 @@ Status ParseMobileEmulation(const base::Value& option,
- "'version' field of type string");
- }
-
-- brands.emplace_back(*brand, *version);
-+ brands.emplace_back(BrandVersion{*brand, *version});
- }
-
- client_hints.brands = std::move(brands);
-@@ -392,7 +392,7 @@ Status ParseMobileEmulation(const base::Value& option,
- "a 'version' field of type string");
- }
-
-- full_version_list.emplace_back(*brand, *version);
-+ full_version_list.emplace_back(BrandVersion{*brand, *version});
- }
-
- client_hints.full_version_list = std::move(full_version_list);
-diff --git a/components/optimization_guide/core/tflite_model_executor.h b/components/optimization_guide/core/tflite_model_executor.h
-index 31417bc8d9d..abd41f4c8d4 100644
---- a/components/optimization_guide/core/tflite_model_executor.h
-+++ b/components/optimization_guide/core/tflite_model_executor.h
-@@ -189,7 +189,7 @@ class TFLiteModelExecutor : public ModelExecutor<OutputType, InputType> {
- void SendForBatchExecution(
- BatchExecutionCallback callback_on_complete,
- base::TimeTicks start_time,
-- ModelExecutor<OutputType, InputType>::ConstRefInputVector inputs)
-+ typename ModelExecutor<OutputType, InputType>::ConstRefInputVector inputs)
- override {
- DCHECK(execution_task_runner_->RunsTasksInCurrentSequence());
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
-index 3bace0dab10..0ea54d136ea 100644
---- a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
-+++ b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
-@@ -1496,7 +1496,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOutputNV12(
-
- // Issue readbacks from the surfaces:
- for (size_t i = 0; i < CopyOutputResult::kNV12MaxPlanes; ++i) {
-- SkISize size(plane_surfaces[i]->width(), plane_surfaces[i]->height());
-+ SkISize size{plane_surfaces[i]->width(), plane_surfaces[i]->height()};
- SkImageInfo dst_info = SkImageInfo::Make(
- size, (i == 0) ? kAlpha_8_SkColorType : kR8G8_unorm_SkColorType,
- kUnpremul_SkAlphaType);
-diff --git a/content/public/browser/web_ui_browser_interface_broker_registry.h b/content/public/browser/web_ui_browser_interface_broker_registry.h
-index 0a419be66b3..7253c9680f7 100644
---- a/content/public/browser/web_ui_browser_interface_broker_registry.h
-+++ b/content/public/browser/web_ui_browser_interface_broker_registry.h
-@@ -127,10 +127,10 @@ class CONTENT_EXPORT WebUIBrowserInterfaceBrokerRegistry {
- //
- // TODO(crbug.com/1407936): Point to WebUIJsBridge documentation.
- template <typename ControllerType>
-- JsBridgeTraits<ControllerType>::BinderInitializer& ForWebUIWithJsBridge() {
-+ typename JsBridgeTraits<ControllerType>::BinderInitializer& ForWebUIWithJsBridge() {
- using Traits = JsBridgeTraits<ControllerType>;
-- using Interface = Traits::Interface;
-- using JsBridgeBinderInitializer = Traits::BinderInitializer;
-+ using Interface = typename Traits::Interface;
-+ using JsBridgeBinderInitializer = typename Traits::BinderInitializer;
-
- // WebUIController::GetType() requires an instantiated WebUIController
- // (because it's a virtual method and can't be static). Here we only have
-diff --git a/net/dns/host_resolver_cache.cc b/net/dns/host_resolver_cache.cc
-index df037a1a440..b2152d54408 100644
---- a/net/dns/host_resolver_cache.cc
-+++ b/net/dns/host_resolver_cache.cc
-@@ -159,7 +159,7 @@ void HostResolverCache::Set(
-
- std::string domain_name = result->domain_name();
- entries_.emplace(
-- Key(std::move(domain_name), network_anonymization_key),
-+ Key{std::move(domain_name), network_anonymization_key},
- Entry(std::move(result), source, secure, staleness_generation_));
-
- if (entries_.size() > max_entries_) {
-diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc b/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc
-index f9cf9f5ae86..0566ae194ce 100644
---- a/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc
-+++ b/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc
-@@ -169,7 +169,7 @@ class HTMLFastPathParser {
- using Span = base::span<const Char>;
- using USpan = base::span<const UChar>;
- // 32 matches that used by HTMLToken::Attribute.
-- typedef std::conditional<std::is_same_v<Char, UChar>,
-+ typedef typename std::conditional<std::is_same_v<Char, UChar>,
- UCharLiteralBuffer<32>,
- LCharLiteralBuffer<32>>::type LiteralBufferType;
- typedef UCharLiteralBuffer<32> UCharLiteralBufferType;
-diff --git a/third_party/blink/renderer/core/paint/object_paint_properties_sparse.h b/third_party/blink/renderer/core/paint/object_paint_properties_sparse.h
-index 8bb1639676c..350bdbd5fde 100644
---- a/third_party/blink/renderer/core/paint/object_paint_properties_sparse.h
-+++ b/third_party/blink/renderer/core/paint/object_paint_properties_sparse.h
-@@ -269,8 +270,8 @@ class CORE_EXPORT ObjectPaintPropertiesSparse : public ObjectPaintProperties {
- NodeList& nodes,
- NodeId node_id,
- const ParentType& parent,
-- NodeType::State&& state,
-- const NodeType::AnimationState& animation_state =
-+ typename NodeType::State&& state,
-+ const typename NodeType::AnimationState& animation_state =
- NodeType::AnimationState()) {
- // First, check if we need to add a new node.
- if (!nodes.HasField(node_id)) {
-diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc
-index 883d769ca4b..1b4b75bbaf7 100644
---- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc
-+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc
-@@ -83,12 +83,12 @@ void CanvasStyle::ApplyToFlags(cc::PaintFlags& flags,
- case kGradient:
- GetCanvasGradient()->GetGradient()->ApplyToFlags(flags, SkMatrix::I(),
- ImageDrawOptions());
-- flags.setColor(SkColor4f(0.0f, 0.0f, 0.0f, global_alpha));
-+ flags.setColor(SkColor4f{0.0f, 0.0f, 0.0f, global_alpha});
- break;
- case kImagePattern:
- GetCanvasPattern()->GetPattern()->ApplyToFlags(
- flags, AffineTransformToSkMatrix(GetCanvasPattern()->GetTransform()));
-- flags.setColor(SkColor4f(0.0f, 0.0f, 0.0f, global_alpha));
-+ flags.setColor(SkColor4f{0.0f, 0.0f, 0.0f, global_alpha});
- break;
- default:
- NOTREACHED();
-diff --git a/third_party/blink/renderer/platform/fonts/palette_interpolation.cc b/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
-index 5a0121510ae..0cf45e0b0da 100644
---- a/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
-+++ b/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
-@@ -31,7 +31,7 @@ Vector<FontPalette::FontPaletteOverride> PaletteInterpolation::MixColorRecords(
- color_interpolation_space, hue_interpolation_method, start_color,
- end_color, percentage, alpha_multiplier);
-
-- FontPalette::FontPaletteOverride result_color_record(i, result_color);
-+ FontPalette::FontPaletteOverride result_color_record{static_cast<int>(i), result_color};
- result_color_records.push_back(result_color_record);
- }
- return result_color_records;
-diff --git a/ui/base/wayland/color_manager_util.h b/ui/base/wayland/color_manager_util.h
-index fa1dd422c0e..52d3702e3e5 100644
---- a/ui/base/wayland/color_manager_util.h
-+++ b/ui/base/wayland/color_manager_util.h
-@@ -52,53 +52,53 @@ constexpr auto kChromaticityMap = base::MakeFixedFlatMap<
- zcr_color_manager_v1_chromaticity_names,
- PrimaryVersion>(
- {{ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT601_525_LINE,
-- PrimaryVersion(gfx::ColorSpace::PrimaryID::SMPTE170M,
-- kDefaultSinceVersion)},
-+ PrimaryVersion{gfx::ColorSpace::PrimaryID::SMPTE170M,
-+ kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT601_625_LINE,
-- PrimaryVersion(gfx::ColorSpace::PrimaryID::BT470BG,
-- kDefaultSinceVersion)},
-+ PrimaryVersion{gfx::ColorSpace::PrimaryID::BT470BG,
-+ kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_SMPTE170M,
-- PrimaryVersion(gfx::ColorSpace::PrimaryID::SMPTE170M,
-- kDefaultSinceVersion)},
-+ PrimaryVersion{gfx::ColorSpace::PrimaryID::SMPTE170M,
-+ kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT709,
-- PrimaryVersion(gfx::ColorSpace::PrimaryID::BT709, kDefaultSinceVersion)},
-+ PrimaryVersion{gfx::ColorSpace::PrimaryID::BT709, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT2020,
-- PrimaryVersion(gfx::ColorSpace::PrimaryID::BT2020, kDefaultSinceVersion)},
-+ PrimaryVersion{gfx::ColorSpace::PrimaryID::BT2020, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_SRGB,
-- PrimaryVersion(gfx::ColorSpace::PrimaryID::BT709, kDefaultSinceVersion)},
-+ PrimaryVersion{gfx::ColorSpace::PrimaryID::BT709, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_DISPLAYP3,
-- PrimaryVersion(gfx::ColorSpace::PrimaryID::P3, kDefaultSinceVersion)},
-+ PrimaryVersion{gfx::ColorSpace::PrimaryID::P3, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_ADOBERGB,
-- PrimaryVersion(gfx::ColorSpace::PrimaryID::ADOBE_RGB,
-- kDefaultSinceVersion)},
-+ PrimaryVersion{gfx::ColorSpace::PrimaryID::ADOBE_RGB,
-+ kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_WIDE_GAMUT_COLOR_SPIN,
-- PrimaryVersion(
-+ PrimaryVersion{
- gfx::ColorSpace::PrimaryID::WIDE_GAMUT_COLOR_SPIN,
-- ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_WIDE_GAMUT_COLOR_SPIN_SINCE_VERSION)},
-+ ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_WIDE_GAMUT_COLOR_SPIN_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT470M,
-- PrimaryVersion(
-+ PrimaryVersion{
- gfx::ColorSpace::PrimaryID::BT470M,
-- ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT470M_SINCE_VERSION)},
-+ ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT470M_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_SMPTE240M,
-- PrimaryVersion(
-+ PrimaryVersion{
- gfx::ColorSpace::PrimaryID::SMPTE240M,
-- ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_SMPTE240M_SINCE_VERSION)},
-+ ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_SMPTE240M_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_XYZ_D50,
-- PrimaryVersion(
-+ PrimaryVersion{
- gfx::ColorSpace::PrimaryID::XYZ_D50,
-- ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_XYZ_D50_SINCE_VERSION)},
-+ ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_XYZ_D50_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_SMPTEST428_1,
-- PrimaryVersion(
-+ PrimaryVersion{
- gfx::ColorSpace::PrimaryID::SMPTEST428_1,
-- ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_SMPTEST428_1_SINCE_VERSION)},
-+ ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_SMPTEST428_1_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_SMPTEST431_2,
-- PrimaryVersion(
-+ PrimaryVersion{
- gfx::ColorSpace::PrimaryID::SMPTEST431_2,
-- ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_SMPTEST431_2_SINCE_VERSION)},
-+ ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_SMPTEST431_2_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_FILM,
-- PrimaryVersion(
-+ PrimaryVersion{
- gfx::ColorSpace::PrimaryID::FILM,
-- ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_FILM_SINCE_VERSION)}});
-+ ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_FILM_SINCE_VERSION}}});
-
- // A map from the zcr_color_manager_v1 eotf_names enum values
- // representing well-known EOTFs, to their equivalent TransferIDs.
-@@ -107,65 +107,65 @@ constexpr auto kEotfMap = base::MakeFixedFlatMap<
- zcr_color_manager_v1_eotf_names,
- TransferVersion>({
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
-- TransferVersion(gfx::ColorSpace::TransferID::LINEAR,
-- kDefaultSinceVersion)},
-+ TransferVersion{gfx::ColorSpace::TransferID::LINEAR,
-+ kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SRGB,
-- TransferVersion(gfx::ColorSpace::TransferID::SRGB, kDefaultSinceVersion)},
-+ TransferVersion{gfx::ColorSpace::TransferID::SRGB, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT709,
-- TransferVersion(gfx::ColorSpace::TransferID::BT709,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT709_SINCE_VERSION)},
-+ TransferVersion{gfx::ColorSpace::TransferID::BT709,
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT709_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT2087,
-- TransferVersion(gfx::ColorSpace::TransferID::GAMMA24,
-- kDefaultSinceVersion)},
-+ TransferVersion{gfx::ColorSpace::TransferID::GAMMA24,
-+ kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_ADOBERGB,
- // This is ever so slightly inaccurate. The number ought to be
- // 2.19921875f, not 2.2
-- TransferVersion(gfx::ColorSpace::TransferID::GAMMA22,
-- kDefaultSinceVersion)},
-+ TransferVersion{gfx::ColorSpace::TransferID::GAMMA22,
-+ kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_PQ,
-- TransferVersion(gfx::ColorSpace::TransferID::PQ, kDefaultSinceVersion)},
-+ TransferVersion{gfx::ColorSpace::TransferID::PQ, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_HLG,
-- TransferVersion(gfx::ColorSpace::TransferID::HLG,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_HLG_SINCE_VERSION)},
-+ TransferVersion{gfx::ColorSpace::TransferID::HLG,
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_HLG_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SMPTE170M,
-- TransferVersion(gfx::ColorSpace::TransferID::SMPTE170M,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SMPTE170M_SINCE_VERSION)},
-+ TransferVersion{gfx::ColorSpace::TransferID::SMPTE170M,
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SMPTE170M_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SMPTE240M,
-- TransferVersion(gfx::ColorSpace::TransferID::SMPTE240M,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SMPTE240M_SINCE_VERSION)},
-+ TransferVersion{gfx::ColorSpace::TransferID::SMPTE240M,
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SMPTE240M_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SMPTEST428_1,
-- TransferVersion(
-+ TransferVersion{
- gfx::ColorSpace::TransferID::SMPTEST428_1,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SMPTEST428_1_SINCE_VERSION)},
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SMPTEST428_1_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LOG,
-- TransferVersion(gfx::ColorSpace::TransferID::LOG,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LOG_SINCE_VERSION)},
-+ TransferVersion{gfx::ColorSpace::TransferID::LOG,
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LOG_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LOG_SQRT,
-- TransferVersion(gfx::ColorSpace::TransferID::LOG_SQRT,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LOG_SQRT_SINCE_VERSION)},
-+ TransferVersion{gfx::ColorSpace::TransferID::LOG_SQRT,
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LOG_SQRT_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_IEC61966_2_4,
-- TransferVersion(
-+ TransferVersion{
- gfx::ColorSpace::TransferID::IEC61966_2_4,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_IEC61966_2_4_SINCE_VERSION)},
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_IEC61966_2_4_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT1361_ECG,
-- TransferVersion(gfx::ColorSpace::TransferID::BT1361_ECG,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT1361_ECG_SINCE_VERSION)},
-+ TransferVersion{gfx::ColorSpace::TransferID::BT1361_ECG,
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT1361_ECG_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT2020_10,
-- TransferVersion(gfx::ColorSpace::TransferID::BT2020_10,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT2020_10_SINCE_VERSION)},
-+ TransferVersion{gfx::ColorSpace::TransferID::BT2020_10,
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT2020_10_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT2020_12,
-- TransferVersion(gfx::ColorSpace::TransferID::BT2020_12,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT2020_12_SINCE_VERSION)},
-+ TransferVersion{gfx::ColorSpace::TransferID::BT2020_12,
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT2020_12_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SCRGB_LINEAR_80_NITS,
-- TransferVersion(
-+ TransferVersion{
- gfx::ColorSpace::TransferID::SCRGB_LINEAR_80_NITS,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SCRGB_LINEAR_80_NITS_SINCE_VERSION)},
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SCRGB_LINEAR_80_NITS_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_GAMMA18,
-- TransferVersion(gfx::ColorSpace::TransferID::GAMMA18,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_GAMMA18_SINCE_VERSION)},
-+ TransferVersion{gfx::ColorSpace::TransferID::GAMMA18,
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_GAMMA18_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_GAMMA28,
-- TransferVersion(gfx::ColorSpace::TransferID::GAMMA28,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_GAMMA28_SINCE_VERSION)},
-+ TransferVersion{gfx::ColorSpace::TransferID::GAMMA28,
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_GAMMA28_SINCE_VERSION}},
- });
-
- // A map from the SDR zcr_color_manager_v1 eotf_names enum values
-@@ -174,18 +174,18 @@ constexpr auto kEotfMap = base::MakeFixedFlatMap<
- constexpr auto kTransferMap =
- base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names, TransferFnVersion>({
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
-- TransferFnVersion(SkNamedTransferFn::kLinear, kDefaultSinceVersion)},
-+ TransferFnVersion{SkNamedTransferFn::kLinear, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SRGB,
-- TransferFnVersion(SkNamedTransferFnExt::kSRGB, kDefaultSinceVersion)},
-+ TransferFnVersion{SkNamedTransferFnExt::kSRGB, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT709,
-- TransferFnVersion(
-+ TransferFnVersion{
- SkNamedTransferFnExt::kRec709,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT709_SINCE_VERSION)},
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT709_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_BT2087,
-- TransferFnVersion(gamma24, kDefaultSinceVersion)},
-+ TransferFnVersion{gamma24, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_ADOBERGB,
-- TransferFnVersion(SkNamedTransferFnExt::kA98RGB,
-- kDefaultSinceVersion)},
-+ TransferFnVersion{SkNamedTransferFnExt::kA98RGB,
-+ kDefaultSinceVersion}},
- });
-
- // A map from the HDR zcr_color_manager_v1 eotf_names enum values
-@@ -194,68 +194,68 @@ constexpr auto kTransferMap =
- constexpr auto kHDRTransferMap =
- base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names, TransferFnVersion>(
- {{ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
-- TransferFnVersion(SkNamedTransferFn::kLinear, kDefaultSinceVersion)},
-+ TransferFnVersion{SkNamedTransferFn::kLinear, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_SRGB,
-- TransferFnVersion(SkNamedTransferFnExt::kSRGB, kDefaultSinceVersion)},
-+ TransferFnVersion{SkNamedTransferFnExt::kSRGB, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_PQ,
-- TransferFnVersion(SkNamedTransferFn::kPQ, kDefaultSinceVersion)},
-+ TransferFnVersion{SkNamedTransferFn::kPQ, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_HLG,
-- TransferFnVersion(SkNamedTransferFn::kHLG,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_HLG_SINCE_VERSION)},
-+ TransferFnVersion{SkNamedTransferFn::kHLG,
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_HLG_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_EXTENDEDSRGB10,
-- TransferFnVersion(
-+ TransferFnVersion{
- SkNamedTransferFnExt::kSRGBExtended1023Over510,
-- ZCR_COLOR_MANAGER_V1_EOTF_NAMES_EXTENDEDSRGB10_SINCE_VERSION)}});
-+ ZCR_COLOR_MANAGER_V1_EOTF_NAMES_EXTENDEDSRGB10_SINCE_VERSION}}});
-
- // A map from zcr_color_manager_v1 matrix_names enum values to
- // gfx::ColorSpace::MatrixIDs.
- constexpr auto kMatrixMap =
- base::MakeFixedFlatMap<zcr_color_manager_v1_matrix_names, MatrixVersion>(
- {{ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_RGB,
-- MatrixVersion(gfx::ColorSpace::MatrixID::RGB, kDefaultSinceVersion)},
-+ MatrixVersion{gfx::ColorSpace::MatrixID::RGB, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_BT709,
-- MatrixVersion(gfx::ColorSpace::MatrixID::BT709,
-- kDefaultSinceVersion)},
-+ MatrixVersion{gfx::ColorSpace::MatrixID::BT709,
-+ kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_BT470BG,
-- MatrixVersion(
-+ MatrixVersion{
- gfx::ColorSpace::MatrixID::BT470BG,
-- ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_BT470BG_SINCE_VERSION)},
-+ ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_BT470BG_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_BT2020_NCL,
-- MatrixVersion(gfx::ColorSpace::MatrixID::BT2020_NCL,
-- kDefaultSinceVersion)},
-+ MatrixVersion{gfx::ColorSpace::MatrixID::BT2020_NCL,
-+ kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_BT2020_CL,
-- MatrixVersion(gfx::ColorSpace::MatrixID::BT2020_CL,
-- kDefaultSinceVersion)},
-+ MatrixVersion{gfx::ColorSpace::MatrixID::BT2020_CL,
-+ kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_FCC,
-- MatrixVersion(gfx::ColorSpace::MatrixID::FCC, kDefaultSinceVersion)},
-+ MatrixVersion{gfx::ColorSpace::MatrixID::FCC, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_YCOCG,
-- MatrixVersion(gfx::ColorSpace::MatrixID::YCOCG,
-- ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_YCOCG_SINCE_VERSION)},
-+ MatrixVersion{gfx::ColorSpace::MatrixID::YCOCG,
-+ ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_YCOCG_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_YDZDX,
-- MatrixVersion(gfx::ColorSpace::MatrixID::YDZDX,
-- ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_YDZDX_SINCE_VERSION)},
-+ MatrixVersion{gfx::ColorSpace::MatrixID::YDZDX,
-+ ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_YDZDX_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_GBR,
-- MatrixVersion(gfx::ColorSpace::MatrixID::GBR,
-- ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_GBR_SINCE_VERSION)},
-+ MatrixVersion{gfx::ColorSpace::MatrixID::GBR,
-+ ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_GBR_SINCE_VERSION}},
- {ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_SMPTE170M,
-- MatrixVersion(gfx::ColorSpace::MatrixID::SMPTE170M,
-- kDefaultSinceVersion)},
-+ MatrixVersion{gfx::ColorSpace::MatrixID::SMPTE170M,
-+ kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_MATRIX_NAMES_SMPTE240M,
-- MatrixVersion(gfx::ColorSpace::MatrixID::SMPTE240M,
-- kDefaultSinceVersion)}});
-+ MatrixVersion{gfx::ColorSpace::MatrixID::SMPTE240M,
-+ kDefaultSinceVersion}}});
-
- // A map from zcr_color_manager_v1 range_names enum values to
- // gfx::ColorSpace::RangeIDs.
- constexpr auto kRangeMap =
- base::MakeFixedFlatMap<zcr_color_manager_v1_range_names, RangeVersion>(
- {{ZCR_COLOR_MANAGER_V1_RANGE_NAMES_LIMITED,
-- RangeVersion(gfx::ColorSpace::RangeID::LIMITED,
-- kDefaultSinceVersion)},
-+ RangeVersion{gfx::ColorSpace::RangeID::LIMITED,
-+ kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_RANGE_NAMES_FULL,
-- RangeVersion(gfx::ColorSpace::RangeID::FULL, kDefaultSinceVersion)},
-+ RangeVersion{gfx::ColorSpace::RangeID::FULL, kDefaultSinceVersion}},
- {ZCR_COLOR_MANAGER_V1_RANGE_NAMES_DERIVED,
-- RangeVersion(gfx::ColorSpace::RangeID::DERIVED,
-- kDefaultSinceVersion)}});
-+ RangeVersion{gfx::ColorSpace::RangeID::DERIVED,
-+ kDefaultSinceVersion}}});
-
- zcr_color_manager_v1_chromaticity_names ToColorManagerChromaticity(
- gfx::ColorSpace::PrimaryID primaryID,
---- chromium-116.0.5845.82.orig/chrome/browser/content_settings/one_time_permission_provider.cc 2023-08-11 18:10:42.162664104 +0000
-+++ chromium-116.0.5845.82/chrome/browser/content_settings/one_time_permission_provider.cc 2023-08-11 18:14:48.571543555 +0000
-@@ -207,8 +207,8 @@ void OneTimePermissionProvider::OnSuspen
-
- while (rule_iterator && rule_iterator->HasNext()) {
- auto rule = rule_iterator->Next();
-- patterns_to_delete.emplace_back(setting_type, rule->primary_pattern,
-- rule->secondary_pattern);
-+ patterns_to_delete.emplace_back(ContentSettingEntry{setting_type, rule->primary_pattern,
-+ rule->secondary_pattern});
- permissions::PermissionUmaUtil::RecordOneTimePermissionEvent(
- setting_type,
- permissions::OneTimePermissionEvent::EXPIRED_ON_SUSPEND);
-@@ -303,7 +303,7 @@ void OneTimePermissionProvider::DeleteEn
- if (rule->primary_pattern.Matches(origin_gurl) &&
- rule->secondary_pattern.Matches(origin_gurl)) {
- patterns_to_delete.emplace_back(
-- content_setting_type, rule->primary_pattern, rule->secondary_pattern);
-+ ContentSettingEntry{content_setting_type, rule->primary_pattern, rule->secondary_pattern});
- permissions::PermissionUmaUtil::RecordOneTimePermissionEvent(
- content_setting_type, trigger_event);
- }
diff --git a/random-fixes-for-gcc13.patch b/random-fixes-for-gcc13.patch
deleted file mode 100644
index fd0b763100ac..000000000000
--- a/random-fixes-for-gcc13.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-diff -upr chromium-113.0.5672.63.orig/gin/time_clamper.h chromium-113.0.5672.63/gin/time_clamper.h
---- chromium-113.0.5672.63.orig/gin/time_clamper.h 2023-04-26 21:43:06.707860200 +0000
-+++ chromium-113.0.5672.63/gin/time_clamper.h 2023-05-09 00:14:09.744221610 +0000
-@@ -6,6 +6,7 @@
- #define GIN_TIME_CLAMPER_H_
-
- #include <algorithm>
-+#include <cstdlib>
-
- #include "base/rand_util.h"
- #include "base/time/time.h"
-@@ -48,7 +49,7 @@ class GIN_EXPORT TimeClamper {
- const int64_t micros = now_micros % 1000;
- // abs() is necessary for devices with times before unix-epoch (most likely
- // configured incorrectly).
-- if (abs(micros) + kResolutionMicros < 1000) {
-+ if (std::abs(micros) + kResolutionMicros < 1000) {
- return now_micros / 1000;
- }
- return ClampTimeResolution(now_micros) / 1000;
-diff -upr chromium-113.0.5672.63.orig/third_party/maldoca/src/maldoca/ole/header.h chromium-113.0.5672.63/third_party/maldoca/src/maldoca/ole/header.h
---- chromium-113.0.5672.63.orig/third_party/maldoca/src/maldoca/ole/header.h 2023-04-26 21:43:58.708449600 +0000
-+++ chromium-113.0.5672.63/third_party/maldoca/src/maldoca/ole/header.h 2023-05-09 00:14:09.744221610 +0000
-@@ -43,6 +43,7 @@
- #ifndef MALDOCA_OLE_HEADER_H_
- #define MALDOCA_OLE_HEADER_H_
-
-+#include <cstdint>
- #include "absl/strings/string_view.h"
-
- namespace maldoca {
-diff -upr chromium-113.0.5672.63.orig/third_party/ruy/src/ruy/profiler/instrumentation.h chromium-113.0.5672.63/third_party/ruy/src/ruy/profiler/instrumentation.h
---- chromium-113.0.5672.63.orig/third_party/ruy/src/ruy/profiler/instrumentation.h 2023-04-26 21:47:36.527673200 +0000
-+++ chromium-113.0.5672.63/third_party/ruy/src/ruy/profiler/instrumentation.h 2023-05-09 00:14:09.744221610 +0000
-@@ -19,6 +19,7 @@ limitations under the License.
- #ifdef RUY_PROFILER
- #include <cstdio>
- #include <mutex>
-+#include <string>
- #include <vector>
- #endif
-
-diff -upr chromium-113.0.5672.63.orig/third_party/tflite/src/tensorflow/lite/kernels/internal/spectrogram.cc chromium-113.0.5672.63/third_party/tflite/src/tensorflow/lite/kernels/internal/spectrogram.cc
---- chromium-113.0.5672.63.orig/third_party/tflite/src/tensorflow/lite/kernels/internal/spectrogram.cc 2023-04-26 21:47:39.531938300 +0000
-+++ chromium-113.0.5672.63/third_party/tflite/src/tensorflow/lite/kernels/internal/spectrogram.cc 2023-05-09 00:14:09.747555160 +0000
-@@ -17,6 +17,7 @@ limitations under the License.
-
- #include <assert.h>
- #include <math.h>
-+#include <stdint.h>
-
- #include "third_party/fft2d/fft.h"
-
-diff -upr chromium-113.0.5672.63.orig/third_party/vulkan-deps/vulkan-validation-layers/src/layers/external/vma/vk_mem_alloc.h chromium-113.0.5672.63/third_party/vulkan-deps/vulkan-validation-layers/src/layers/external/vma/vk_mem_alloc.h
---- chromium-113.0.5672.63.orig/third_party/vulkan-deps/vulkan-validation-layers/src/layers/external/vma/vk_mem_alloc.h 2023-04-26 21:47:38.323831800 +0000
-+++ chromium-113.0.5672.63/third_party/vulkan-deps/vulkan-validation-layers/src/layers/external/vma/vk_mem_alloc.h 2023-05-09 00:14:09.757555808 +0000
-@@ -2579,6 +2579,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeS
- #undef VMA_IMPLEMENTATION
-
- #include <cstdint>
-+#include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <utility>
-diff -upr chromium-113.0.5672.63.orig/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h chromium-113.0.5672.63/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
---- chromium-113.0.5672.63.orig/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h 2023-04-26 21:47:36.679686500 +0000
-+++ chromium-113.0.5672.63/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h 2023-05-09 00:14:41.046248921 +0000
-@@ -2389,6 +2389,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeV
- #undef VMA_IMPLEMENTATION
-
- #include <cstdint>
-+#include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <utility>
diff --git a/skia-gamma.patch b/skia-gamma.patch
deleted file mode 100644
index 05a6b237c21a..000000000000
--- a/skia-gamma.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/skia/BUILD.gn b/skia/BUILD.gn
-index b2c8b79..7e2ee53 100644
---- a/skia/BUILD.gn
-+++ b/skia/BUILD.gn
-@@ -139,7 +139,7 @@ config("skia_library_config") {
- # Settings for text blitting, chosen to approximate the system browser.
- if (is_linux || is_chromeos) {
- defines += [
-- "SK_GAMMA_EXPONENT=1.2",
-+ "SK_GAMMA_EXPONENT=1.8",
- "SK_GAMMA_CONTRAST=0.2",
- ]
- } else if (is_android) {
diff --git a/support-ICU-74-in-LazyTextBreakIterator.patch b/support-ICU-74-in-LazyTextBreakIterator.patch
new file mode 100644
index 000000000000..fd36b2e07bfc
--- /dev/null
+++ b/support-ICU-74-in-LazyTextBreakIterator.patch
@@ -0,0 +1,148 @@
+From f62990fb134b7e610502b6804945debaa51960a5 Mon Sep 17 00:00:00 2001
+From: Koji Ishii <kojii@chromium.org>
+Date: Fri, 9 Feb 2024 18:47:02 +0000
+Subject: [PATCH] Support ICU 74 in `LazyTextBreakIterator`
+
+This patch extends the `kBreakAllLineBreakClassTable` table
+for 5 new LineBreak classes in ICU 74.
+
+They are for Brahmic scripts, which "line breaks can occur at
+the boundaries of any orthographic syllable"[1]. The
+`break-all` has no additional break opportunities that all
+entries are `0`.
+
+This patch also adds `0` for 3 classes added in ICU 58[2],
+instead of doing so in code, to make future additions
+possible.
+
+[1] https://unicode.org/reports/tr14/#BreakOpportunities
+[2] https://chromiumcodereview.appspot.com/2440923002
+
+Bug: 324419151
+Change-Id: I8002edb927280f63b5b668b09076cc71feaeac3e
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5279337
+Auto-Submit: Koji Ishii <kojii@chromium.org>
+Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
+Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
+Cr-Commit-Position: refs/heads/main@{#1258643}
+---
+ .../platform/text/text_break_iterator.cc | 98 ++++++++++---------
+ 1 file changed, 53 insertions(+), 45 deletions(-)
+
+diff --git a/third_party/blink/renderer/platform/text/text_break_iterator.cc b/third_party/blink/renderer/platform/text/text_break_iterator.cc
+index 703dc2399075..38ab94a0a460 100644
+--- a/third_party/blink/renderer/platform/text/text_break_iterator.cc
++++ b/third_party/blink/renderer/platform/text/text_break_iterator.cc
+@@ -161,11 +161,7 @@ static const unsigned char kAsciiLineBreakTable[][(kAsciiLineBreakTableLastChar
+ };
+ // clang-format on
+
+-#if U_ICU_VERSION_MAJOR_NUM >= 58
+-#define BA_LB_COUNT (U_LB_COUNT - 3)
+-#else
+ #define BA_LB_COUNT U_LB_COUNT
+-#endif
+ // Line breaking table for CSS word-break: break-all. This table differs from
+ // asciiLineBreakTable in:
+ // - Indices are Line Breaking Classes defined in UAX#14 Unicode Line Breaking
+@@ -174,47 +170,59 @@ static const unsigned char kAsciiLineBreakTable[][(kAsciiLineBreakTableLastChar
+ // normal line break, not "prohibit break."
+ // clang-format off
+ static const unsigned char kBreakAllLineBreakClassTable[][BA_LB_COUNT / 8 + 1] = {
+- // XX AI AL B2 BA BB BK CB CL CM CR EX GL HY ID IN IS LF NS NU OP PO PR QU SA SG SP SY ZW NL WJ H2 H3 JL JT JV CP CJ HL RI
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // XX
+- { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0) }, // AI
+- { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0) }, // AL
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // B2
+- { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0) }, // BA
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // BB
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // BK
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // CB
+- { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0) }, // CL
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // CM
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // CR
+- { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 0, 1, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0) }, // EX
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // GL
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 1, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // HY
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // ID
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // IN
+- { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0) }, // IS
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // LF
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // NS
+- { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0) }, // NU
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // OP
+- { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 0, 1, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0) }, // PO
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // PR
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // QU
+- { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0) }, // SA
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // SG
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // SP
+- { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0) }, // SY
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // ZW
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // NL
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // WJ
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // H2
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // H3
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // JL
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // JT
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // JV
+- { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 0, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0) }, // CP
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // CJ
+- { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0) }, // HL
+- { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // RI
++ // XX AI AL B2 BA BB BK CB CL CM CR EX GL HY ID IN IS LF NS NU OP PO PR QU SA SG SP SY ZW NL WJ H2 H3 JL JT JV CP CJ HL RI EB EM ZWJ AK AP AS VF VI
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // XX
++ { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // AI
++ { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // AL
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // B2
++ { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // BA
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // BB
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // BK
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // CB
++ { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // CL
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // CM
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // CR
++ { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 0, 1, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // EX
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // GL
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 1, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // HY
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // ID
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // IN
++ { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // IS
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // LF
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // NS
++ { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // NU
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // OP
++ { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 0, 1, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // PO
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // PR
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // QU
++ { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // SA
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // SG
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // SP
++ { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // SY
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // ZW
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // NL
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // WJ
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // H2
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // H3
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // JL
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // JT
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // JV
++ { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 0, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // CP
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // CJ
++ { B(0, 1, 1, 0, 1, 0, 0, 0), B(0, 0, 0, 0, 0, 1, 0, 0), B(0, 0, 0, 1, 1, 0, 1, 0), B(1, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 1, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // HL
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // RI
++ // Added in ICU 58.
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // EB
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // EM
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // ZWJ
++#if U_ICU_VERSION_MAJOR_NUM >= 74
++ // Added in ICU 74. https://icu.unicode.org/download/74
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // AK
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // AP
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // AS
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // VF
++ { B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0), B(0, 0, 0, 0, 0, 0, 0, 0) }, // VI
++#endif // U_ICU_VERSION_MAJOR_NUM >= 74
+ };
+ // clang-format on
+
diff --git a/webauthn-variant.patch b/webauthn-variant.patch
deleted file mode 100644
index ec8ba7a135a7..000000000000
--- a/webauthn-variant.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/chrome/browser/webauthn/authenticator_request_dialog_model.h b/chrome/browser/webauthn/authenticator_request_dialog_model.h
-index f4992a74bd6..45cabe39974 100644
---- a/chrome/browser/webauthn/authenticator_request_dialog_model.h
-+++ b/chrome/browser/webauthn/authenticator_request_dialog_model.h
-@@ -7,6 +7,7 @@
-
- #include <memory>
- #include <string>
-+#include <variant>
- #include <vector>
-
- #include "base/containers/span.h"