Browse Source

uppkg -> 122.0.6261.39-1

Noah Vogt 1 year ago
parent
commit
462fd1271b

+ 19 - 11
.SRCINFO

@@ -1,6 +1,6 @@
 pkgbase = ungoogled-chromium-xdg
 pkgbase = ungoogled-chromium-xdg
 	pkgdesc = A lightweight approach to removing Google web service dependency - without creating a useless ~/.pki directory
 	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
 	pkgrel = 1
 	url = https://github.com/ungoogled-software/ungoogled-chromium
 	url = https://github.com/ungoogled-software/ungoogled-chromium
 	arch = x86_64
 	arch = x86_64
@@ -51,31 +51,39 @@ pkgbase = ungoogled-chromium-xdg
 	optdepends = org.freedesktop.secrets: password storage backend on GNOME / Xfce
 	optdepends = org.freedesktop.secrets: password storage backend on GNOME / Xfce
 	optdepends = kwallet5: support for storing passwords in KWallet on Plasma
 	optdepends = kwallet5: support for storing passwords in KWallet on Plasma
 	optdepends = chromium-extension-web-store: Web Store Functionality
 	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 = chromium
 	conflicts = chromedriver
 	conflicts = chromedriver
 	options = !lto
 	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://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 = drop-flags-unsupported-by-clang16.patch
-	source = icu-74.patch
+	source = compiler-rt-16.patch
 	source = use-oauth2-client-switches-as-default.patch
 	source = use-oauth2-client-switches-as-default.patch
 	source = xdg-basedir.patch
 	source = xdg-basedir.patch
 	source = no-omnibox-suggestion-autocomplete.patch
 	source = no-omnibox-suggestion-autocomplete.patch
 	source = index.html
 	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-vaapi-flag-ozone-wayland.patch
 	source = 0001-adjust-buffer-format-order.patch
 	source = 0001-adjust-buffer-format-order.patch
 	source = 0001-enable-linux-unstable-deb-target.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_v3.patch
 	source = 0001-ozone-wayland-implement-text_input_manager-fixes.patch
 	source = 0001-ozone-wayland-implement-text_input_manager-fixes.patch
-	sha256sums = 9fd6b82e7077ac26ec264bfcfc8ac8e0c2a0240378f035c9c0f34ad467aef09d
+	sha256sums = 30fc98bdb497d98e63fcb4d8e76acf5201eddf7e65ee907ecf4041cc8e121be3
 	sha256sums = 213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a
 	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 = e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711
 	sha256sums = f97e6cd3c4d2e04f5d9a0ea234fe768d6ba0fa9f4ecd5c7b2ca91030a1249078
 	sha256sums = f97e6cd3c4d2e04f5d9a0ea234fe768d6ba0fa9f4ecd5c7b2ca91030a1249078
 	sha256sums = ff1591fa38e0ede7e883dc7494b813641b7a1a7cb1ded00d9baaee987c1dbea8
 	sha256sums = ff1591fa38e0ede7e883dc7494b813641b7a1a7cb1ded00d9baaee987c1dbea8

+ 50 - 25
PKGBUILD

@@ -12,11 +12,11 @@
 # binary version of this package (-bin): github.com/noahvogt/ungoogled-chromium-xdg-bin-aur
 # binary version of this package (-bin): github.com/noahvogt/ungoogled-chromium-xdg-bin-aur
 
 
 pkgname=ungoogled-chromium-xdg
 pkgname=ungoogled-chromium-xdg
-pkgver=121.0.6167.184
+pkgver=122.0.6261.39
 pkgrel=1
 pkgrel=1
 _launcher_ver=8
 _launcher_ver=8
 _manual_clone=0
 _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"
 pkgdesc="A lightweight approach to removing Google web service dependency - without creating a useless ~/.pki directory"
 arch=('x86_64')
 arch=('x86_64')
 url="https://github.com/ungoogled-software/ungoogled-chromium"
 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
 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://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
         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
         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
         xdg-basedir.patch
         no-omnibox-suggestion-autocomplete.patch
         no-omnibox-suggestion-autocomplete.patch
         index.html)
         index.html)
-sha256sums=('9fd6b82e7077ac26ec264bfcfc8ac8e0c2a0240378f035c9c0f34ad467aef09d'
-            '213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a'
-            'e9113c1ed2900b84b488e608774ce25212d3c60094abdae005d8a943df9b505e'
-            '8d1cdf3ddd8ff98f302c90c13953f39cd804b3479b13b69b8ef138ac57c83556'
-            'ff9ebd86b0010e1c604d47303ab209b1d76c3e888c423166779cefbc22de297f'
-            'e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711'
+sha256sums=(${sha256sums[@]}
             'f97e6cd3c4d2e04f5d9a0ea234fe768d6ba0fa9f4ecd5c7b2ca91030a1249078'
             'f97e6cd3c4d2e04f5d9a0ea234fe768d6ba0fa9f4ecd5c7b2ca91030a1249078'
             'ff1591fa38e0ede7e883dc7494b813641b7a1a7cb1ded00d9baaee987c1dbea8'
             'ff1591fa38e0ede7e883dc7494b813641b7a1a7cb1ded00d9baaee987c1dbea8'
             'a4cdd2b86f32d5302c2792be841ff40d982b19bb58a4e63df9d77f4c706b8665')
             'a4cdd2b86f32d5302c2792be841ff40d982b19bb58a4e63df9d77f4c706b8665')
@@ -143,19 +155,27 @@ prepare() {
   # runtime -- this allows signing into Chromium without baked-in values
   # runtime -- this allows signing into Chromium without baked-in values
   patch -Np1 -i ../use-oauth2-client-switches-as-default.patch
   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
   # 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
   # Custom Patches
@@ -188,15 +208,19 @@ prepare() {
   ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/
   ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/
   ln -s /usr/bin/java third_party/jdk/current/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 Chromium changes
-_ungoogled_repo="$srcdir/ungoogled-chromium-update"
+  # _ungoogled_repo="$srcdir/ungoogled-chromium-update"
+  _ungoogled_repo="$srcdir/$pkgname-$_uc_ver"
 
 
   _utils="${_ungoogled_repo}/utils"
   _utils="${_ungoogled_repo}/utils"
   msg2 'Pruning binaries'
   msg2 'Pruning binaries'
@@ -281,7 +305,8 @@ build() {
   fi
   fi
 
 
   # Append ungoogled chromium flags to _flags array
   # 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"
   readarray -t -O ${#_flags[@]} _flags < "${_ungoogled_repo}/flags.gn"
 
 
   # Facilitate deterministic builds (taken from build/config/compiler/BUILD.gn)
   # Facilitate deterministic builds (taken from build/config/compiler/BUILD.gn)

+ 747 - 0
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;
+ 

+ 174 - 0
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);

+ 0 - 27
chromium-115-add-cmath-for-various-math-functions-in-skia.patch

@@ -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 {

+ 0 - 27
chromium-115-std-vector-used-in-verify_name_match.h-without-include.patch

@@ -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"
- 
- 

+ 48 - 0
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.

+ 0 - 15
chromium-drirc-disable-10bpc-color-configs.conf

@@ -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>

+ 0 - 15
chromium-drirc-disable-10bpc-color-configs.patch

@@ -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>

+ 36 - 0
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" ]

+ 40 - 0
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

+ 0 - 21
icu-74.patch

@@ -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

+ 0 - 516
random-build-fixes.patch

@@ -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);
-     }

+ 0 - 75
random-fixes-for-gcc13.patch

@@ -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>

+ 0 - 13
skia-gamma.patch

@@ -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) {

+ 148 - 0
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
+ 

+ 0 - 12
webauthn-variant.patch

@@ -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"