Import Cobalt 24.master.0.311288
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index b7b0dee..cde10f9 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -45,7 +45,8 @@
             (?x)^(
                 starboard/[^/]+/i18n/|
                 cobalt/content/licenses/|
-                cobalt/fetch/embedded_scripts
+                cobalt/fetch/embedded_scripts|
+                cobalt/loader/cors_preflight.cc
             )
 
 -   repo: local
@@ -107,9 +108,14 @@
         stages: [push]
         exclude: |
             (?x)^(
+                .pre-commit-config.yaml$|
                 cobalt/media/|
                 cobalt/layout_tests/testdata/|
-                starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaDrmBridge.java$
+                nb/|
+                starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaDrmBridge.java$|
+                starboard/shared/starboard/player/filter/decoded_audio_queue.cc$|
+                starboard/shared/starboard/player/filter/decoded_audio_queue.h$|
+                starboard/shared/starboard/player/filter/wsola_internal.cc$
             )
         exclude_types: [markdown]
         verbose: true
diff --git a/BUILD_STATUS.md b/BUILD_STATUS.md
new file mode 100644
index 0000000..c209877
--- /dev/null
+++ b/BUILD_STATUS.md
@@ -0,0 +1,21 @@
+# Build Status
+
+| Workflow  | Main | 23.lts.1+ | 22.lts.1+ | 21.lts.1+ | 20.lts.1+ | 19.lts.1+ | RC11 | COBALT 9 |
+| --------- | ---- | --------- | --------- | --------- | --------- | --------- | ---- | ---------|
+| Lint      | [![lint](https://github.com/youtube/cobalt/actions/workflows/lint.yaml/badge.svg?branch=main&event=push)](https://github.com/youtube/cobalt/actions/workflows/lint.yaml?query=event%3Apush+branch%3Amain) | | | | | | | |
+| Android   | [![android](https://github.com/youtube/cobalt/actions/workflows/android.yaml/badge.svg?branch=main&event=push)](https://github.com/youtube/cobalt/actions/workflows/android.yaml?query=event%3Apush+branch%3Amain) | [![android_23.lts.1+](https://github.com/youtube/cobalt/actions/workflows/android_23.lts.1+.yaml/badge.svg?branch=23.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/android_23.lts.1+.yaml?query=event%3Apush+branch%3A23.lts.1%2B) | [![android_22.lts.1+](https://github.com/youtube/cobalt/actions/workflows/android_22.lts.1+.yaml/badge.svg?branch=22.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/android_22.lts.1+.yaml?query=branch%3A22.lts.1%2B+event%3Apush) | | | | | |
+| Evergreen | [![evergreen](https://github.com/youtube/cobalt/actions/workflows/evergreen.yaml/badge.svg?branch=main&event=push)](https://github.com/youtube/cobalt/actions/workflows/evergreen.yaml?query=event%3Apush+branch%3Amain) | [![evergreen_23.lts.1+](https://github.com/youtube/cobalt/actions/workflows/evergreen_23.lts.1+.yaml/badge.svg?branch=23.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/evergreen_23.lts.1+.yaml?query=event%3Apush+branch%3A23.lts.1%2B) | [![evergreen_22.lts.1+](https://github.com/youtube/cobalt/actions/workflows/evergreen_22.lts.1+.yaml/badge.svg?branch=22.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/evergreen_22.lts.1+.yaml?query=branch%3A22.lts.1%2B+event%3Apush) | [![evergreen_21.lts.1+](https://github.com/youtube/cobalt/actions/workflows/evergreen_21.lts.1+.yaml/badge.svg?branch=21.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/evergreen_21.lts.1+.yaml) | | | | |
+| Linux     | [![linux](https://github.com/youtube/cobalt/actions/workflows/linux.yaml/badge.svg?branch=main&event=push)](https://github.com/youtube/cobalt/actions/workflows/linux.yaml?query=event%3Apush+branch%3Amain) | [![linux_23.lts.1+](https://github.com/youtube/cobalt/actions/workflows/linux_23.lts.1+.yaml/badge.svg?branch=23.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/linux_23.lts.1+.yaml?query=event%3Apush+branch%3A23.lts.1%2B) | [![linux_22.lts.1+](https://github.com/youtube/cobalt/actions/workflows/linux_22.lts.1+.yaml/badge.svg?branch=22.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/linux_22.lts.1+.yaml?query=branch%3A22.lts.1%2B+event%3Apush) | [![linux_21.lts.1+](https://github.com/youtube/cobalt/actions/workflows/linux_21.lts.1+.yaml/badge.svg?branch=21.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/linux_21.lts.1+.yaml) | [![linux_20.lts.1+](https://github.com/youtube/cobalt/actions/workflows/linux_20.lts.1+.yaml/badge.svg?branch=20.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/linux_20.lts.1+.yaml?query=branch%3A20.lts.1%2B+event%3Apush) | [![linux_19.lts.1+](https://github.com/youtube/cobalt/actions/workflows/linux_19.lts.1+.yaml/badge.svg?branch=19.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/linux_19.lts.1+.yaml?query=branch%3A19.lts.1%2B+event%3Apush) | [![linux_rc_11](https://github.com/youtube/cobalt/actions/workflows/linux_rc_11.yaml/badge.svg?branch=rc_11&event=push)](https://github.com/youtube/cobalt/actions/workflows/linux_rc_11.yaml?query=event%3Apush+branch%3Arc_11) | [![linux_COBALT_9](https://github.com/youtube/cobalt/actions/workflows/linux_COBALT_9.yaml/badge.svg?branch=COBALT_9&event=push)](https://github.com/youtube/cobalt/actions/workflows/linux_COBALT_9.yaml?query=event%3Apush+branch%3ACOBALT_9) |
+| raspi-2   | [![raspi-2](https://github.com/youtube/cobalt/actions/workflows/raspi-2.yaml/badge.svg?branch=main&event=push)](https://github.com/youtube/cobalt/actions/workflows/raspi-2.yaml?query=event%3Apush+branch%3Amain) | [![raspi-2_23.lts.1+](https://github.com/youtube/cobalt/actions/workflows/raspi-2_23.lts.1+.yaml/badge.svg?branch=23.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_23.lts.1+.yaml?query=event%3Apush+branch%3A23.lts.1%2B) | [![raspi-2_22.lts.1+](https://github.com/youtube/cobalt/actions/workflows/raspi-2_22.lts.1+.yaml/badge.svg?branch=22.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_22.lts.1+.yaml?query=branch%3A22.lts.1%2B+event%3Apush) | [![raspi-2_21.lts.1+](https://github.com/youtube/cobalt/actions/workflows/raspi-2_21.lts.1+.yaml/badge.svg?branch=21.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_21.lts.1+.yaml) | [![raspi-2_20.lts.1+](https://github.com/youtube/cobalt/actions/workflows/raspi-2_20.lts.1+.yaml/badge.svg?branch=20.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_20.lts.1+.yaml?query=branch%3A20.lts.1%2B+event%3Apush) | [![raspi-2_19.lts.1+](https://github.com/youtube/cobalt/actions/workflows/raspi-2_19.lts.1+.yaml/badge.svg?branch=19.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_19.lts.1+.yaml?query=branch%3A19.lts.1%2B+event%3Apush) | [![raspi-2_rc_11](https://github.com/youtube/cobalt/actions/workflows/raspi-2_rc_11.yaml/badge.svg?branch=rc_11&event=push)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_rc_11.yaml?query=event%3Apush+branch%3Arc_11) | [![raspi-2_COBALT_9](https://github.com/youtube/cobalt/actions/workflows/raspi-2_COBALT_9.yaml/badge.svg?branch=COBALT_9&event=push)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_COBALT_9.yaml?query=event%3Apush+branch%3ACOBALT_9) |
+| stub      | [![stub](https://github.com/youtube/cobalt/actions/workflows/stub.yaml/badge.svg?branch=main&event=push)](https://github.com/youtube/cobalt/actions/workflows/stub.yaml?query=event%3Apush+branch%3Amain) | [![stub_23.lts.1+](https://github.com/youtube/cobalt/actions/workflows/stub_23.lts.1+.yaml/badge.svg?branch=23.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/stub_23.lts.1+.yaml?query=event%3Apush+branch%3A23.lts.1%2B) | | | | | | |
+| Win32     | [![win32](https://github.com/youtube/cobalt/actions/workflows/win32.yaml/badge.svg?branch=main&event=push)](https://github.com/youtube/cobalt/actions/workflows/win32.yaml?query=event%3Apush+branch%3Amain) | [![win32_23.lts.1+](https://github.com/youtube/cobalt/actions/workflows/win32_23.lts.1+.yaml/badge.svg?branch=23.lts.1%2B&event=push)](https://github.com/youtube/cobalt/actions/workflows/win32_23.lts.1+.yaml?query=event%3Apush+branch%3A23.lts.1%2B) | | | | | | |
+
+
+# Nightly builds
+| Workflow  | main | 23.lts.1+ | 22.lts.1+ | 21.lts.1+ | 20.lts.1+ | 19.lts.1+ | RC11 | COBALT 9 |
+| --------- | ---- | --------- | --------- | --------- | --------- | --------- | ---- | ---------|
+| Android   | [![android](https://github.com/youtube/cobalt/actions/workflows/android.yaml/badge.svg?branch=main&event=schedule)](https://github.com/youtube/cobalt/actions/workflows/android.yaml?query=event%3Aschedule+branch%3Amain) | [![android_23.lts.1+](https://github.com/youtube/cobalt/actions/workflows/android_23.lts.1+.yaml/badge.svg?branch=23.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/android_23.lts.1+.yaml?query=event%3Aworkflow_dispatch+branch%3A23.lts.1%2B) | [![android_22.lts.1+](https://github.com/youtube/cobalt/actions/workflows/android_22.lts.1+.yaml/badge.svg?branch=22.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/android_22.lts.1+.yaml?query=branch%3A22.lts.1%2B+event%3Aworkflow_dispatch) | | | | | |
+| Evergreen | [![evergreen](https://github.com/youtube/cobalt/actions/workflows/evergreen.yaml/badge.svg?branch=main&event=schedule)](https://github.com/youtube/cobalt/actions/workflows/evergreen.yaml?query=event%3Aschedule+branch%3Amain) | [![evergreen_23.lts.1+](https://github.com/youtube/cobalt/actions/workflows/evergreen_23.lts.1+.yaml/badge.svg?branch=23.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/evergreen_23.lts.1+.yaml?query=event%3Aworkflow_dispatch+branch%3A23.lts.1%2B) | [![evergreen_22.lts.1+](https://github.com/youtube/cobalt/actions/workflows/evergreen_22.lts.1+.yaml/badge.svg?branch=22.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/evergreen_22.lts.1+.yaml?query=branch%3A22.lts.1%2B+event%3Aworkflow_dispatch) | [![evergreen_21.lts.1+](https://github.com/youtube/cobalt/actions/workflows/evergreen_21.lts.1+.yaml/badge.svg?branch=21.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/evergreen_21.lts.1+.yaml?query=event%3Aworkflow_dispatch+branch%3A21.lts.1%2B) | | | | |
+| Linux | [![linux](https://github.com/youtube/cobalt/actions/workflows/linux.yaml/badge.svg?branch=main&event=schedule)](https://github.com/youtube/cobalt/actions/workflows/linux.yaml?query=event%3Aschedule+branch%3Amain) | [![linux_23.lts.1+](https://github.com/youtube/cobalt/actions/workflows/linux_23.lts.1+.yaml/badge.svg?branch=23.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/linux_23.lts.1+.yaml?query=event%3Aworkflow_dispatch+branch%3A23.lts.1%2B) | [![linux_22.lts.1+](https://github.com/youtube/cobalt/actions/workflows/linux_22.lts.1+.yaml/badge.svg?branch=22.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/linux_22.lts.1+.yaml?query=branch%3A22.lts.1%2B+event%3Aworkflow_dispatch) | [![linux_21.lts.1+](https://github.com/youtube/cobalt/actions/workflows/linux_21.lts.1+.yaml/badge.svg?branch=21.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/linux_21.lts.1+.yaml?query=event%3Aworkflow_dispatch+branch%3A21.lts.1%2B) | [![linux_20.lts.1+](https://github.com/youtube/cobalt/actions/workflows/linux_20.lts.1+.yaml/badge.svg?branch=20.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/linux_20.lts.1+.yaml?query=event%3Aworkflow_dispatch+branch%3A20.lts.1%2B) | [![linux_19.lts.1+](https://github.com/youtube/cobalt/actions/workflows/linux_19.lts.1+.yaml/badge.svg?branch=19.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/linux_19.lts.1+.yaml?query=event%3Aworkflow_dispatch+branch%3A19.lts.1%2B) | [![linux_rc_11](https://github.com/youtube/cobalt/actions/workflows/linux_rc_11.yaml/badge.svg?branch=rc_11&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/linux_rc_11.yaml?query=event%3Aworkflow_dispatch+branch%3Arc_11) | [![linux_COBALT_9](https://github.com/youtube/cobalt/actions/workflows/linux_COBALT_9.yaml/badge.svg?branch=COBALT_9&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/linux_COBALT_9.yaml?query=event%3Aworkflow_dispatch+branch%3ACOBALT_9) |
+| raspi-2 | [![raspi-2](https://github.com/youtube/cobalt/actions/workflows/raspi-2.yaml/badge.svg?branch=main&event=schedule)](https://github.com/youtube/cobalt/actions/workflows/raspi-2.yaml?query=event%3Aschedule+branch%3Amain) | [![raspi-2_23.lts.1+](https://github.com/youtube/cobalt/actions/workflows/raspi-2_23.lts.1+.yaml/badge.svg?branch=23.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_23.lts.1+.yaml?query=event%3Aworkflow_dispatch+branch%3A23.lts.1%2B) | [![raspi-2_22.lts.1+](https://github.com/youtube/cobalt/actions/workflows/raspi-2_22.lts.1+.yaml/badge.svg?branch=22.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_22.lts.1+.yaml?query=branch%3A22.lts.1%2B+event%3Aworkflow_dispatch) | [![raspi-2_21.lts.1+](https://github.com/youtube/cobalt/actions/workflows/raspi-2_21.lts.1+.yaml/badge.svg?branch=21.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_21.lts.1+.yaml?query=event%3Aworkflow_dispatch+branch%3A21.lts.1%2B) | [![raspi-2_20.lts.1+](https://github.com/youtube/cobalt/actions/workflows/raspi-2_20.lts.1+.yaml/badge.svg?branch=20.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_20.lts.1+.yaml?query=event%3Aworkflow_dispatch+branch%3A20.lts.1%2B) | [![raspi-2_19.lts.1+](https://github.com/youtube/cobalt/actions/workflows/raspi-2_19.lts.1+.yaml/badge.svg?branch=19.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_19.lts.1+.yaml?query=event%3Aworkflow_dispatch+branch%3A19.lts.1%2B) | [![raspi-2_rc_11](https://github.com/youtube/cobalt/actions/workflows/raspi-2_rc_11.yaml/badge.svg?branch=rc_11&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_rc_11.yaml?query=event%3Aworkflow_dispatch+branch%3Arc_11) | [![raspi-2_COBALT_9](https://github.com/youtube/cobalt/actions/workflows/raspi-2_COBALT_9.yaml/badge.svg?branch=COBALT_9&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/raspi-2_COBALT_9.yaml?query=event%3Aworkflow_dispatch+branch%3ACOBALT_9) |
+| Win32 | [![win32](https://github.com/youtube/cobalt/actions/workflows/win32.yaml/badge.svg?branch=main&event=schedule)](https://github.com/youtube/cobalt/actions/workflows/win32.yaml?query=event%3Aschedule+branch%3Amain) | [![win32_23.lts.1+](https://github.com/youtube/cobalt/actions/workflows/win32_23.lts.1+.yaml/badge.svg?branch=23.lts.1%2B&event=workflow_dispatch)](https://github.com/youtube/cobalt/actions/workflows/win32_23.lts.1+.yaml?query=event%3Aworkflow_dispatch+branch%3A23.lts.1%2B) | | | | | | |
diff --git a/README.md b/README.md
index 6c96aa9..1ffff01 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Cobalt
+# Cobalt [![Build Status](https://img.shields.io/badge/-Build%20Status-blueviolet)](https://github.com/youtube/cobalt/blob/main/BUILD_STATUS.md)
 
 ## Overview
 
diff --git a/base/BUILD.gn b/base/BUILD.gn
index e6ccec8..93f6256 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -3197,6 +3197,7 @@
   if (is_starboard){
     data_deps += [
       ":base_unittests_bundle_data",
+      "//cobalt/network:copy_ssl_certificates",
       "//third_party/icu:icudata",
     ]
   }
diff --git a/base/message_loop/message_pump_ui_starboard.h b/base/message_loop/message_pump_ui_starboard.h
index 12e6e38..214e18c 100644
--- a/base/message_loop/message_pump_ui_starboard.h
+++ b/base/message_loop/message_pump_ui_starboard.h
@@ -40,7 +40,11 @@
 class BASE_EXPORT MessagePumpUIStarboard : public MessagePump {
  public:
   MessagePumpUIStarboard();
-  virtual ~MessagePumpUIStarboard() {}
+  virtual ~MessagePumpUIStarboard() {
+    // There is probability that MessagePump may send event to MessageLoop that
+    // was already destroyed. To avoid this delete all tasks in pump_
+    Quit();
+  }
 
   // Runs one iteration of the run loop, and reschedules another call, if
   // necessary.
diff --git a/build/config/clang/clang.gni b/build/config/clang/clang.gni
index e8f794c..9cfbf6b 100644
--- a/build/config/clang/clang.gni
+++ b/build/config/clang/clang.gni
@@ -4,15 +4,7 @@
 
 import("//build/toolchain/toolchain.gni")
 
-if (is_starboard) {
-  import("//starboard/build/toolchain/starboard_toolchains.gni")
-
-  declare_args() {
-    clang_revision = "365097-f7e52fbd-8"
-  }
-
-  default_clang_base_path = "$starboard_toolchains_path/x86_64-linux-gnu-clang-chromium-${clang_revision}"  
-} else {
+if (!use_cobalt_customizations) {
   default_clang_base_path = "//third_party/llvm-build/Release+Asserts"
 }
 
@@ -24,5 +16,7 @@
       is_clang && !is_nacl && !use_xcode_clang &&
       default_toolchain != "//build/toolchain/cros:target"
 
-  clang_base_path = default_clang_base_path
+  if (!use_cobalt_customizations) {
+    clang_base_path = default_clang_base_path
+  }
 }
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 157c841..838ebcd 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -13,7 +13,7 @@
 import("//build/config/compiler/compiler.gni")
 import("//build/config/coverage/coverage.gni")
 import("//build/config/dcheck_always_on.gni")
-if (!is_starboard) {
+if (!use_cobalt_customizations) {
   import("//build/config/gclient_args.gni")
 }
 import("//build/config/host_byteorder.gni")
@@ -1230,7 +1230,8 @@
 }
 
 config("clang_revision") {
-  if (!is_starboard && is_clang && clang_base_path == default_clang_base_path) {
+  if (!use_cobalt_customizations && is_clang &&
+      clang_base_path == default_clang_base_path) {
     update_args = [
       "--print-revision",
       "--verify-version=$clang_version",
@@ -1292,7 +1293,7 @@
   # android:runtime_library.  This is to ensure libc++ appears before
   # libandroid_support in the -isystem include order.  Otherwise, there will be
   # build errors related to symbols declared in math.h.
-  if (!is_starboard && use_custom_libcxx) {
+  if (!use_cobalt_customizations && use_custom_libcxx) {
     configs += [ "//build/config/c++:runtime_library" ]
   }
 
@@ -1585,7 +1586,8 @@
         cflags += [ "-Wno-nonportable-include-path" ]
       }
 
-      if ((current_toolchain == host_toolchain || !use_xcode_clang) && !using_old_compiler) {
+      if ((current_toolchain == host_toolchain || !use_xcode_clang) &&
+          !using_old_compiler) {
         # Flags NaCl (Clang 3.7) and Xcode 9.2 (Clang clang-900.0.39.2) do not
         # recognize.
         cflags += [
@@ -1593,7 +1595,7 @@
           # TODO(thakis): Only for no_chromium_code? http://crbug.com/912662
           "-Wno-ignored-pragma-optimize",
         ]
-        if (!is_starboard) {
+        if (!use_cobalt_customizations) {
           cflags += [
             # An ABI compat warning we don't care about, https://crbug.com/1102157
             # TODO(thakis): Push this to the (few) targets that need it,
@@ -1622,7 +1624,7 @@
           "-Wno-implicit-fallthrough",
         ]
 
-        if (!is_starboard) {
+        if (!use_cobalt_customizations) {
           if (enable_wmax_tokens) {
             cflags += [ "-Wmax-tokens" ]
           } else {
@@ -1781,7 +1783,7 @@
       # suppressing them individually, we just blanket suppress them here.
       "-Wno-unused-variable",
     ]
-    if (!is_starboard && !is_nacl &&
+    if (!use_cobalt_customizations && !is_nacl &&
         (current_toolchain == host_toolchain || !use_xcode_clang)) {
       cflags += [
         # TODO(https://crbug.com/1202159): Clean up and enable.
diff --git a/build/config/sanitizers/BUILD.gn b/build/config/sanitizers/BUILD.gn
index 2fbfe97..50aa4c9 100644
--- a/build/config/sanitizers/BUILD.gn
+++ b/build/config/sanitizers/BUILD.gn
@@ -115,7 +115,7 @@
   ]
   sources = [ "//build/sanitizers/sanitizer_options.cc" ]
 
-  if (!is_starboard) {
+  if (!use_cobalt_customizations) {
     # Don't compile this target with any sanitizer code. It can be called from
     # the sanitizer runtimes, so instrumenting these functions could cause
     # recursive calls into the runtime if there is an error.
diff --git a/build/config/sysroot.gni b/build/config/sysroot.gni
index 9f616b7..765623b 100644
--- a/build/config/sysroot.gni
+++ b/build/config/sysroot.gni
@@ -25,7 +25,7 @@
                 current_cpu == "arm" || current_cpu == "arm64" ||
                 current_cpu == "mipsel" || current_cpu == "mips64el"
 
-  if (is_starboard) {
+  if (use_cobalt_customizations) {
     use_sysroot = false
   }
 }
diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni
index f325e56..891cf34 100644
--- a/build/toolchain/gcc_toolchain.gni
+++ b/build/toolchain/gcc_toolchain.gni
@@ -150,7 +150,7 @@
       # needs to be passed through unchanged to all secondary toolchains to
       # ensure that it's always the same, regardless of the values that may be
       # set on those toolchains.
-      if (!is_starboard) {
+      if (!use_cobalt_customizations) {
         host_toolchain = host_toolchain
 
         if (!defined(invoker_toolchain_args.v8_current_cpu)) {
diff --git a/cobalt/BUILD.gn b/cobalt/BUILD.gn
index 23b7aca..2c221a3 100644
--- a/cobalt/BUILD.gn
+++ b/cobalt/BUILD.gn
@@ -28,6 +28,7 @@
     "//cobalt/layout_tests:web_platform_tests",
     "//cobalt/loader:loader_test",
     "//cobalt/loader/image/sandbox:image_decoder_sandbox",
+    "//cobalt/media:media_test",
     "//cobalt/media/sandbox:media_sandbox",
     "//cobalt/media/sandbox:web_media_player_sandbox",
     "//cobalt/media_capture:media_capture_test",
diff --git a/cobalt/audio/audio_node_input_output_test.cc b/cobalt/audio/audio_node_input_output_test.cc
index 12cb069..2723382 100644
--- a/cobalt/audio/audio_node_input_output_test.cc
+++ b/cobalt/audio/audio_node_input_output_test.cc
@@ -94,9 +94,10 @@
  public:
   AudioNodeInputOutputTest() {
     web_context_.reset(web::Agent::CreateContext("AudioNodeInputOutputTest"));
-    web_context_->setup_environment_settings(
+    web_context_->SetupEnvironmentSettings(
         new dom::testing::StubEnvironmentSettings);
     web_context_->global_environment()->CreateGlobalObject();
+    web_context_->SetupFinished();
   }
 
   ~AudioNodeInputOutputTest() {}
diff --git a/cobalt/base/BUILD.gn b/cobalt/base/BUILD.gn
index 898475d..e335403 100644
--- a/cobalt/base/BUILD.gn
+++ b/cobalt/base/BUILD.gn
@@ -124,5 +124,8 @@
     "//testing/gmock",
     "//testing/gtest",
   ]
-  data_deps = [ "//third_party/icu:icudata" ]
+  data_deps = [
+    "//cobalt/network:copy_ssl_certificates",
+    "//third_party/icu:icudata",
+  ]
 }
diff --git a/cobalt/black_box_tests/black_box_tests.py b/cobalt/black_box_tests/black_box_tests.py
index 129c8a8..079b829 100644
--- a/cobalt/black_box_tests/black_box_tests.py
+++ b/cobalt/black_box_tests/black_box_tests.py
@@ -36,6 +36,8 @@
     'android-arm/devel',
     'android-arm64/devel',
     'android-x86/devel',
+    'evergreen-arm/devel',
+    'evergreen-x64/devel',
     'raspi-0/devel',
 ]
 
@@ -53,7 +55,8 @@
     'preload_font',
     'preload_visibility',
     'preload_launch_parameter',
-    'signal_handler_doesnt_crash',
+    # TODO(b/254502632): Investigate the cause of the flakiness from this test.
+    # 'signal_handler_doesnt_crash',
     'suspend_visibility',
     'timer_hit_after_preload',
     'timer_hit_in_preload',
@@ -67,14 +70,14 @@
     'h5vcc_storage_write_verify_test',
     'http_cache',
     'persistent_cookie',
+    'service_worker_add_to_cache_test',
     'service_worker_cache_keys_test',
     'service_worker_controller_activation_test',
     'service_worker_get_registrations_test',
+    'service_worker_fetch_main_resource_test',
     'service_worker_fetch_test',
     'service_worker_message_test',
     'service_worker_test',
-    # TODO(b/259731731) disable for now until persisted registrations
-    # activate correctly.
     'service_worker_persist_test',
     'soft_mic_platform_service_test',
     'text_encoding_test',
@@ -225,13 +228,8 @@
     if self.proxy_port == '-1':
       return 1
 
-    # Temporary means to determine if we are running on CI
-    # TODO: Update to IS_CI environment variable or similar
-    out_dir = _launcher_params.out_directory
-    is_ci = out_dir and 'mh_lab' in out_dir  # pylint: disable=unsupported-membership-test
-
-    if is_ci and (f'{_launcher_params.platform}/{_launcher_params.config}'
-                  in _DISABLED_BLACKBOXTEST_CONFIGS):
+    if (f'{_launcher_params.platform}/{_launcher_params.config}'
+        in _DISABLED_BLACKBOXTEST_CONFIGS):
       logging.warning('Blackbox tests disabled for platform:%s config:%s',
                       _launcher_params.platform, _launcher_params.config)
       return 0
diff --git a/cobalt/black_box_tests/testdata/service_worker_add_to_cache_test.html b/cobalt/black_box_tests/testdata/service_worker_add_to_cache_test.html
new file mode 100644
index 0000000..c8a0a85
--- /dev/null
+++ b/cobalt/black_box_tests/testdata/service_worker_add_to_cache_test.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<!--
+  Copyright 2023 The Cobalt Authors. All Rights Reserved.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<html>
+<head>
+  <title>Cobalt Service Worker Add to Cache Test</title>
+  <script src='black_box_js_test_utils.js'></script>
+</head>
+<body>
+  <script>
+    h5vcc.storage.clearServiceWorkerCache();
+
+    const unregisterAll = () => navigator.serviceWorker.getRegistrations().then(registrations =>
+        Promise.all(registrations.map(r => r.unregister())));
+    const fail = msg => {
+      if (msg) {
+        console.error(msg);
+      }
+      unregisterAll().then(notReached);
+    };
+    const timeoutId = window.setTimeout(fail, 10000);
+    const success = () => unregisterAll().then(() => {
+      clearTimeout(timeoutId);
+      onEndTest();
+    });
+    navigator.serviceWorker.onmessage = event => {
+      if (event.data === 'SUCCESS') {
+        success();
+        return;
+      }
+      fail(event.data);
+    };
+
+    navigator.serviceWorker.ready.then(registration => {
+      registration.active.postMessage('start-test');
+    });
+
+    unregisterAll().then(() => {
+      navigator.serviceWorker.register('service_worker_add_to_cache_test.js').catch(fail);
+    });
+
+    setupFinished();
+  </script>
+</body>
+</html>
diff --git a/cobalt/black_box_tests/testdata/service_worker_add_to_cache_test.js b/cobalt/black_box_tests/testdata/service_worker_add_to_cache_test.js
new file mode 100644
index 0000000..5a259e7
--- /dev/null
+++ b/cobalt/black_box_tests/testdata/service_worker_add_to_cache_test.js
@@ -0,0 +1,97 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+const interceptedBody = 'window.activeServiceWorker.postMessage("script-intercepted");';
+let shouldIntercept = false;
+
+const postMessage = message => {
+  const options = {
+    includeUncontrolled: false, type: 'window'
+  };
+  self.clients.matchAll(options).then(clients => {
+    clients.forEach(c => {
+      c.postMessage(message);
+    });
+  });
+};
+
+self.addEventListener("install", event => {
+  self.skipWaiting();
+});
+
+self.addEventListener('activate', event => {
+  self.clients.claim();
+});
+
+const noop = () => {};
+const fail = msg => {
+  if (msg) {
+    console.error(msg);
+  }
+  postMessage('FAIL');
+};
+const assertEquals = (expected, actual, msg) => {
+  if (expected === actual) {
+    return;
+  }
+  const errorMessage = `Expected: '${expected}', but was '${actual}'`;
+  fail(msg ? `${msg}(${errorMessage})` : errorMessage);
+};
+const assertNotEquals = (notExpected, actual, msg) => {
+  if (notExpected !== actual) {
+    return;
+  }
+  const errorMessage = `Not expected: '${notExpected}'`;
+  fail(msg ? `${msg}(${errorMessage})` : errorMessage);
+};
+
+const ASSET_CACHE_NAME = 'asset-cache-name';
+const RESOURCE = self.location.pathname;
+const RESOURCE_WITH_QUERY = self.location.pathname + '?foo=bar';
+const RESOURCE_NOT_INDIRECTLY_CACHED = self.location.pathname + '?should_not_resolve_to_resource1';
+const RESOURCE_NOT_PRESENT = self.location.pathname + '.not_present';
+
+let assetCache = null;
+const getAssetCache = async () => {
+  if (!assetCache) {
+    assetCache = await self.caches.open(ASSET_CACHE_NAME);
+  }
+  return assetCache;
+};
+const cacheUrl = async (cache, url) => {
+  if (await cache.match(url)) {
+    return;
+  }
+  return cache.add(url);
+};
+const cacheAssetUrls = async urls => {
+  const cache = await getAssetCache();
+  return Promise.all(urls.map(url => cacheUrl(cache, url).catch(noop)));
+};
+
+self.addEventListener('message', async event => {
+  if (event.data === 'start-test') {
+    await self.caches.delete(ASSET_CACHE_NAME);
+    await cacheAssetUrls([RESOURCE, RESOURCE_WITH_QUERY, RESOURCE_NOT_PRESENT]);
+    const cache = await self.caches.open(ASSET_CACHE_NAME);
+    assertEquals(2, (await cache.keys()).length);
+    assertNotEquals(undefined, await cache.match(RESOURCE));
+    assertNotEquals(undefined, await cache.match(RESOURCE_WITH_QUERY));
+    assertEquals(undefined, await cache.match(RESOURCE_NOT_INDIRECTLY_CACHED));
+    assertEquals(undefined, await cache.match(RESOURCE_NOT_PRESENT));
+    postMessage('SUCCESS');
+    return;
+  }
+  postMessage(`${JSON.stringify(event.data)}-unexpected-message`);
+});
diff --git a/cobalt/black_box_tests/testdata/service_worker_cache_keys_test.html b/cobalt/black_box_tests/testdata/service_worker_cache_keys_test.html
index c5a57e9..0bedc3e 100644
--- a/cobalt/black_box_tests/testdata/service_worker_cache_keys_test.html
+++ b/cobalt/black_box_tests/testdata/service_worker_cache_keys_test.html
@@ -25,6 +25,7 @@
 </head>
 <body>
   <script>
+    h5vcc.storage.clearServiceWorkerCache();
     const unregisterAll = () => navigator.serviceWorker.getRegistrations().then(registrations =>
         Promise.all(registrations.map(r => r.unregister())));
     const fail = msg => {
diff --git a/cobalt/black_box_tests/testdata/service_worker_controller_activation_test_script.js b/cobalt/black_box_tests/testdata/service_worker_controller_activation_test_script.js
index d373dba..b5d6ee9 100644
--- a/cobalt/black_box_tests/testdata/service_worker_controller_activation_test_script.js
+++ b/cobalt/black_box_tests/testdata/service_worker_controller_activation_test_script.js
@@ -12,9 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-/**
-* @param {KeyboardEvent} event
-*/
+h5vcc.storage.clearServiceWorkerCache();
 
 const unregisterAll = () => navigator.serviceWorker.getRegistrations().then(registrations =>
   Promise.all(registrations.map(r => r.unregister())));
@@ -25,6 +23,9 @@
   test();
 }
 
+/**
+* @param {KeyboardEvent} event
+*/
 window.onkeydown = function (event) {
   assertEqual(undefined, self.clients);
 
diff --git a/cobalt/black_box_tests/testdata/service_worker_csp_test.html b/cobalt/black_box_tests/testdata/service_worker_csp_test.html
index ff058e3..7e6b711 100644
--- a/cobalt/black_box_tests/testdata/service_worker_csp_test.html
+++ b/cobalt/black_box_tests/testdata/service_worker_csp_test.html
@@ -22,6 +22,8 @@
 
 <body>
   <script>
+  h5vcc.storage.clearServiceWorkerCache();
+
   var window_onerror_count = 0;
   window.onerror = (message, filename, lineno, colno, error) => {
     ++window_onerror_count;
diff --git a/cobalt/black_box_tests/testdata/service_worker_fetch_main_resource.html b/cobalt/black_box_tests/testdata/service_worker_fetch_main_resource.html
new file mode 100644
index 0000000..244cc4c
--- /dev/null
+++ b/cobalt/black_box_tests/testdata/service_worker_fetch_main_resource.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+  Copyright 2023 The Cobalt Authors. All Rights Reserved.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<html>
+<head>
+  <title>Cobalt Service Worker Fetch Main Resource</title>
+  <script src='black_box_js_test_utils.js'></script>
+</head>
+<body>
+  <script>
+    const unregisterAll = () => navigator.serviceWorker.getRegistrations().then(registrations =>
+        Promise.all(registrations.map(r => r.unregister())));
+    const fail = msg => {
+      if (msg) {
+        console.error(msg);
+      }
+      unregisterAll().then(notReached);
+    };
+    const success = () => unregisterAll().then(() => {
+      clearTimeout(timeoutId);
+      onEndTest();
+    });
+    const assertEquals = (expected, actual, msg) => {
+      if (expected === actual) {
+        return;
+      }
+      const errorMessage = `Expected: '${expected}', but was '${actual}'`;
+      fail(msg ? `${msg}(${errorMessage})` : errorMessage);
+    };
+    const timeoutId = window.setTimeout(fail, 5000);
+    navigator.serviceWorker.onmessage = event => {
+      const requests = event.data;
+      assertEquals(2, requests.length);
+      // The sub resource is black_box_js_test_utils.js.
+      const [mainResourceRequest, subResourceRequest] = requests;
+      assertEquals('navigate', mainResourceRequest.mode);
+      assertEquals('cors', subResourceRequest.mode);
+      success();
+    };
+
+    navigator.serviceWorker.getRegistration().then(registration => {
+      if (!registration || !registration.active) {
+        fail('Expected active registration, but none present.');
+      }
+      registration.active.postMessage('start');
+    });
+
+    setupFinished();
+  </script>
+</body>
+</html>
diff --git a/cobalt/black_box_tests/testdata/service_worker_fetch_main_resource_test.html b/cobalt/black_box_tests/testdata/service_worker_fetch_main_resource_test.html
new file mode 100644
index 0000000..eb9d331
--- /dev/null
+++ b/cobalt/black_box_tests/testdata/service_worker_fetch_main_resource_test.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<!--
+  Copyright 2023 The Cobalt Authors. All Rights Reserved.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<html>
+<head>
+  <title>Cobalt Service Worker Fetch Main Resource Test</title>
+  <script src='black_box_js_test_utils.js'></script>
+</head>
+<body>
+  <script>
+    h5vcc.storage.enableCache();
+    const mebibyte = 1024 * 1024;
+    const res = h5vcc.storage.setQuota({
+      other: 14 * mebibyte,
+      html: mebibyte,
+      css: mebibyte,
+      image: mebibyte,
+      font: mebibyte,
+      splash: mebibyte,
+      uncompiled_js: mebibyte,
+      compiled_js: mebibyte,
+      cache_api: mebibyte,
+      service_worker_js: mebibyte,
+      total: 23 * mebibyte,
+    });
+    h5vcc.storage.clearServiceWorkerCache();
+
+    const unregisterAll = () => navigator.serviceWorker.getRegistrations().then(registrations =>
+        Promise.all(registrations.map(r => r.unregister())));
+    const fail = msg => {
+      if (msg) {
+        console.error(msg);
+      }
+      unregisterAll().then(notReached);
+    };
+    const timeoutId = window.setTimeout(fail, 5000);
+    navigator.serviceWorker.ready.then(async () => {
+      clearTimeout(timeoutId);
+      window.location = 'service_worker_fetch_main_resource.html';
+    }).catch(fail);
+
+    unregisterAll().then(() =>
+      navigator.serviceWorker.register('service_worker_fetch_main_resource_test.js')).catch(fail);
+  </script>
+</body>
+</html>
diff --git a/cobalt/black_box_tests/testdata/service_worker_fetch_main_resource_test.js b/cobalt/black_box_tests/testdata/service_worker_fetch_main_resource_test.js
new file mode 100644
index 0000000..19e761f
--- /dev/null
+++ b/cobalt/black_box_tests/testdata/service_worker_fetch_main_resource_test.js
@@ -0,0 +1,36 @@
+// Copyright 2023 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+const postMessage = message => {
+  const options = {
+    includeUncontrolled: false,
+    type: 'window',
+  };
+  self.clients.matchAll(options).then(clients => {
+    clients.forEach(c => {
+      c.postMessage(message);
+    });
+  });
+};
+
+self.addEventListener("install", () => self.skipWaiting());
+self.addEventListener('activate', () => self.clients.claim());
+
+const fetchRequests = [];
+self.addEventListener('message', () => postMessage(fetchRequests));
+self.addEventListener('fetch', ({request: {url, method, mode, headers}}) => {
+  fetchRequests.push({
+    url, method, mode, headers: Array.from(headers.entries()),
+  });
+});
diff --git a/cobalt/black_box_tests/testdata/service_worker_fetch_test.html b/cobalt/black_box_tests/testdata/service_worker_fetch_test.html
index a325b69..1dcc7b7 100644
--- a/cobalt/black_box_tests/testdata/service_worker_fetch_test.html
+++ b/cobalt/black_box_tests/testdata/service_worker_fetch_test.html
@@ -25,11 +25,13 @@
 </head>
 <body>
   <script>
+    h5vcc.storage.clearServiceWorkerCache();
+
     const unregisterAll = () => navigator.serviceWorker.getRegistrations().then(registrations =>
         Promise.all(registrations.map(r => r.unregister())));
     const unregisterAndNotReached = () => unregisterAll().then(notReached);
 
-    const fetch_resource = () => fetch('service_worker_fetch_resource.js').then(r => r.text());
+    const fetchResource = () => fetch('service_worker_fetch_resource.js').then(r => r.text());
     const timeoutId = window.setTimeout(unregisterAndNotReached, 10000);
     window.activeServiceWorker = null;
     navigator.serviceWorker.onmessage = event => {
@@ -44,7 +46,7 @@
           unregisterAndNotReached();
           return;
         }
-        fetch_resource().then(body => {
+        fetchResource().then(body => {
           window.activeServiceWorker.postMessage({test: event.data.test, result: body});
         });
         return;
@@ -64,7 +66,7 @@
       window.activeServiceWorker.postMessage('start-test');
     });
 
-    unregisterAll().then(fetch_resource).then(body => {
+    unregisterAll().then(fetchResource).then(body => {
       if ('window.activeServiceWorker.postMessage("script-not-intercepted");\n' !== body) {
         unregisterAndNotReached();
         return;
diff --git a/cobalt/black_box_tests/testdata/service_worker_get_registrations_test.html b/cobalt/black_box_tests/testdata/service_worker_get_registrations_test.html
index 21cf71d..2c8283b 100644
--- a/cobalt/black_box_tests/testdata/service_worker_get_registrations_test.html
+++ b/cobalt/black_box_tests/testdata/service_worker_get_registrations_test.html
@@ -25,6 +25,8 @@
 </head>
 <body>
   <script>
+    h5vcc.storage.clearServiceWorkerCache();
+
     // TODO: check multiple registrations.
     const unregisterAll = () => navigator.serviceWorker.getRegistrations().then(registrations =>
         Promise.all(registrations.map(r => r.unregister())));
diff --git a/cobalt/black_box_tests/testdata/service_worker_message_test.html b/cobalt/black_box_tests/testdata/service_worker_message_test.html
index 8b74c05..4eb4cf4 100644
--- a/cobalt/black_box_tests/testdata/service_worker_message_test.html
+++ b/cobalt/black_box_tests/testdata/service_worker_message_test.html
@@ -27,6 +27,8 @@
 
 <body>
     <script>
+        h5vcc.storage.clearServiceWorkerCache();
+
         var expected_event_count = 0;
 
         function count_event(expected_value) {
diff --git a/cobalt/black_box_tests/testdata/service_worker_persist_test_script.js b/cobalt/black_box_tests/testdata/service_worker_persist_test_script.js
index 82d19b4..888aec0 100644
--- a/cobalt/black_box_tests/testdata/service_worker_persist_test_script.js
+++ b/cobalt/black_box_tests/testdata/service_worker_persist_test_script.js
@@ -12,6 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+h5vcc.storage.clearServiceWorkerCache();
 
 /**
 * @param {KeyboardEvent} event
diff --git a/cobalt/black_box_tests/testdata/service_worker_test.html b/cobalt/black_box_tests/testdata/service_worker_test.html
index 34782ec..d50434c 100644
--- a/cobalt/black_box_tests/testdata/service_worker_test.html
+++ b/cobalt/black_box_tests/testdata/service_worker_test.html
@@ -22,12 +22,12 @@
 <html>
 
 <head>
-    <title>Cobalt Service Worker Test</title>
-    <script src='black_box_js_test_utils.js'></script>
+  <title>Cobalt Service Worker Test</title>
+  <script nonce="blackboxtest" src='black_box_js_test_utils.js'></script>
 </head>
 
 <body>
-    <script src='service_worker_test_script.js'></script>
+  <script nonce="blackboxtest" src='service_worker_test_script.js'></script>
 </body>
 
 </html>
diff --git a/cobalt/black_box_tests/testdata/service_worker_test_persisted_worker.js b/cobalt/black_box_tests/testdata/service_worker_test_persisted_worker.js
index 003deda..c808e3c 100644
--- a/cobalt/black_box_tests/testdata/service_worker_test_persisted_worker.js
+++ b/cobalt/black_box_tests/testdata/service_worker_test_persisted_worker.js
@@ -12,4 +12,4 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-console.log('Service Worker Script Started');
+console.log('Service Worker Persist Script Started');
diff --git a/cobalt/black_box_tests/testdata/service_worker_test_script.js b/cobalt/black_box_tests/testdata/service_worker_test_script.js
index 55d40eb..3b5f371 100644
--- a/cobalt/black_box_tests/testdata/service_worker_test_script.js
+++ b/cobalt/black_box_tests/testdata/service_worker_test_script.js
@@ -12,6 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+h5vcc.storage.clearServiceWorkerCache();
+
 const eventCounts = {};
 const countEvent = (fnName, expectedEventCount) => {
   if (fnName in eventCounts) {
@@ -292,7 +294,7 @@
   () => navigator.serviceWorker.register('service_worker_test_nonexist.js')
       .then(fail(`Unknown script did not raise error.`))
       .catch(error => {
-        assertEqual('NetworkError', error.name);
+        assertEqual('SecurityError', error.name);
       }),
   checkSuccessfulRegistration,
   unregisterAll,
diff --git a/cobalt/black_box_tests/tests/service_worker_add_to_cache_test.py b/cobalt/black_box_tests/tests/service_worker_add_to_cache_test.py
new file mode 100644
index 0000000..eaa8051
--- /dev/null
+++ b/cobalt/black_box_tests/tests/service_worker_add_to_cache_test.py
@@ -0,0 +1,28 @@
+# Copyright 2023 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Tests Service Worker Add to Cache functionality."""
+
+from cobalt.black_box_tests import black_box_tests
+from cobalt.black_box_tests.threaded_web_server import ThreadedWebServer
+
+
+class ServiceWorkerAddToCacheTest(black_box_tests.BlackBoxTestCase):
+
+  def test_service_worker_add_to_cache(self):
+    with ThreadedWebServer(binding_address=self.GetBindingAddress()) as server:
+      url = server.GetURL(
+          file_name='testdata/service_worker_add_to_cache_test.html')
+      with self.CreateCobaltRunner(url=url) as runner:
+        runner.WaitForJSTestsSetup()
+        self.assertTrue(runner.JSTestsSucceeded())
diff --git a/cobalt/black_box_tests/tests/service_worker_fetch_main_resource_test.py b/cobalt/black_box_tests/tests/service_worker_fetch_main_resource_test.py
new file mode 100644
index 0000000..aeec28d
--- /dev/null
+++ b/cobalt/black_box_tests/tests/service_worker_fetch_main_resource_test.py
@@ -0,0 +1,28 @@
+# Copyright 2023 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Tests Service Worker Fetch Main Resource functionality."""
+
+from cobalt.black_box_tests import black_box_tests
+from cobalt.black_box_tests.threaded_web_server import ThreadedWebServer
+
+
+class ServiceWorkerFetchMainResourceTest(black_box_tests.BlackBoxTestCase):
+
+  def test_service_worker_fetch_main_resource(self):
+    with ThreadedWebServer(binding_address=self.GetBindingAddress()) as server:
+      url = server.GetURL(
+          file_name='testdata/service_worker_fetch_main_resource_test.html')
+      with self.CreateCobaltRunner(url=url) as runner:
+        runner.WaitForJSTestsSetup()
+        self.assertTrue(runner.JSTestsSucceeded())
diff --git a/cobalt/black_box_tests/tests/service_worker_test.py b/cobalt/black_box_tests/tests/service_worker_test.py
index d06fecb..fc5c7e5 100644
--- a/cobalt/black_box_tests/tests/service_worker_test.py
+++ b/cobalt/black_box_tests/tests/service_worker_test.py
@@ -23,6 +23,19 @@
 # The base path of the requested assets is the parent directory.
 _SERVER_ROOT_PATH = os.path.join(os.path.dirname(__file__), os.pardir)
 
+paths_to_headers = {
+    'service_worker_test.html': {
+        'Content-Security-Policy':
+            "script-src 'nonce-blackboxtest' ; worker-src 'self'"
+    },
+    'service_worker_test_worker.js': {
+        'Content-Security-Policy':
+            "connect-src 'self' ; script-src 'none' ; worker-src 'self'"
+    }
+}
+
+#path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
+
 
 class ServiceWorkerRequestDetector(MakeRequestHandlerClass(_SERVER_ROOT_PATH)):
   """Proxies everything to SimpleHTTPRequestHandler, except some paths."""
@@ -32,6 +45,11 @@
     SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self)
 
   def send_header(self, header, value):
+    for partial_path, headers in paths_to_headers.items():
+      if partial_path in self.path:
+        for header_key, header_value in headers.items():
+          SimpleHTTPServer.SimpleHTTPRequestHandler.send_header(
+              self, header_key, header_value)
     # Ensure that the Content-Type for paths ending in '.js' are always
     # 'text/javascript'.
     if header == 'Content-Type' and self.path.endswith('.js'):
diff --git a/cobalt/browser/BUILD.gn b/cobalt/browser/BUILD.gn
index e8cf8d3..72217bd 100644
--- a/cobalt/browser/BUILD.gn
+++ b/cobalt/browser/BUILD.gn
@@ -70,6 +70,9 @@
       "//cobalt/content/fonts:fonts_xml",
     ]
   }
+  if (sb_is_evergreen) {
+    data_deps += [ "//cobalt/updater/version_manifest:copy_version_manifest" ]
+  }
   if (!is_gold) {
     data_deps += [
       "//cobalt/debug/backend/content:copy_backend_web_files",
@@ -209,10 +212,7 @@
       "lifecycle_console_commands.cc",
       "lifecycle_console_commands.h",
     ]
-    defines = [
-      "ENABLE_ABOUT_SCHEME",
-      "COBALT_ENABLE_JAVASCRIPT_ERROR_LOGGING",
-    ]
+    defines = [ "ENABLE_ABOUT_SCHEME" ]
     deps += [
       "//cobalt/debug",
       "//cobalt/debug:console_command_manager",
diff --git a/cobalt/browser/application.cc b/cobalt/browser/application.cc
index 37c304c..4156bdd 100644
--- a/cobalt/browser/application.cc
+++ b/cobalt/browser/application.cc
@@ -852,8 +852,9 @@
 #endif  // defined(COBALT_FORCE_CSP)
 
   network_module_options.https_requirement = security_flags.https_requirement;
-  options.web_module_options.require_csp = security_flags.csp_header_policy;
-  options.web_module_options.csp_enforcement_mode = web::kCspEnforcementEnable;
+  options.web_module_options.csp_header_policy =
+      security_flags.csp_header_policy;
+  options.web_module_options.csp_enforcement_type = web::kCspEnforcementEnable;
 
   options.requested_viewport_size = requested_viewport_size;
 
diff --git a/cobalt/browser/browser_module.cc b/cobalt/browser/browser_module.cc
index f694893..e4e1481 100644
--- a/cobalt/browser/browser_module.cc
+++ b/cobalt/browser/browser_module.cc
@@ -293,7 +293,7 @@
 
   platform_info_.reset(new browser::UserAgentPlatformInfo());
   service_worker_registry_.reset(new ServiceWorkerRegistry(
-      &web_settings_, network_module, platform_info_.get()));
+      &web_settings_, network_module, platform_info_.get(), url));
 
 #if SB_HAS(CORE_DUMP_HANDLER_SUPPORT)
   SbCoreDumpRegisterHandler(BrowserModule::CoreDumpHandler, this);
@@ -529,6 +529,15 @@
 
   main_web_module_layer_->Reset();
 
+  // Service worker should only start for HTTP or HTTPS fetches.
+  // https://fetch.spec.whatwg.org/commit-snapshots/8f8ab504da6ca9681db5c7f8aa3d1f4b6bf8840c/#http-fetch
+  bool can_start_service_worker = url.SchemeIsHTTPOrHTTPS();
+  auto service_worker_started_event = std::make_unique<base::WaitableEvent>();
+  if (can_start_service_worker) {
+    service_worker_registry_->EnsureServiceWorkerStarted(
+        url::Origin::Create(url), url, service_worker_started_event.get());
+  }
+
   // Wait until after the old WebModule is destroyed before setting the navigate
   // time so that it won't be included in the time taken to load the URL.
   navigate_time_ = base::TimeTicks::Now().ToInternalValue();
@@ -617,6 +626,10 @@
       service_worker_registry_->service_worker_jobs();
   options.web_options.platform_info = platform_info_.get();
   web_module_.reset(new WebModule("MainWebModule"));
+  // Wait for service worker to start if one exists.
+  if (can_start_service_worker) {
+    service_worker_started_event->Wait();
+  }
   web_module_->Run(
       url, application_state_, scroll_engine_.get(),
       base::Bind(&BrowserModule::QueueOnRenderTreeProduced,
@@ -1191,6 +1204,7 @@
 
 void BrowserModule::OnError(const GURL& url, const std::string& error) {
   TRACE_EVENT0("cobalt::browser", "BrowserModule::OnError()");
+  LOG(ERROR) << error;
   if (base::MessageLoop::current() != self_message_loop_) {
     self_message_loop_->task_runner()->PostTask(
         FROM_HERE, base::Bind(&BrowserModule::OnError, weak_this_, url, error));
@@ -2084,6 +2098,7 @@
                                        ->user_agent_data();
   h5vcc_settings.global_environment = settings->context()->global_environment();
   h5vcc_settings.persistent_settings = options_.persistent_settings;
+  h5vcc_settings.can_play_type_handler = can_play_type_handler_.get();
 
   auto* h5vcc_object = new h5vcc::H5vcc(h5vcc_settings);
   if (!web_module_created_callback_.is_null()) {
diff --git a/cobalt/browser/debug_console.cc b/cobalt/browser/debug_console.cc
index 197233b..b08fed0 100644
--- a/cobalt/browser/debug_console.cc
+++ b/cobalt/browser/debug_console.cc
@@ -121,7 +121,7 @@
   web_module_options.image_cache_capacity = 0;
   // Disable CSP for the Debugger's WebModule. This will also allow eval() in
   // javascript.
-  web_module_options.csp_enforcement_mode = web::kCspEnforcementDisable;
+  web_module_options.csp_enforcement_type = web::kCspEnforcementDisable;
   web_module_options.csp_insecure_allowed_token =
       web::CspDelegateFactory::GetInsecureAllowedToken();
 
diff --git a/cobalt/browser/memory_tracker/tool/malloc_logger_tool.cc b/cobalt/browser/memory_tracker/tool/malloc_logger_tool.cc
index ddaca24..1bae210 100644
--- a/cobalt/browser/memory_tracker/tool/malloc_logger_tool.cc
+++ b/cobalt/browser/memory_tracker/tool/malloc_logger_tool.cc
@@ -22,7 +22,6 @@
 #include "cobalt/browser/memory_tracker/tool/params.h"
 #include "cobalt/browser/memory_tracker/tool/util.h"
 #include "nb/memory_scope.h"
-#include "starboard/atomic.h"
 #include "starboard/common/string.h"
 #include "starboard/types.h"
 
diff --git a/cobalt/browser/memory_tracker/tool/malloc_logger_tool.h b/cobalt/browser/memory_tracker/tool/malloc_logger_tool.h
index add5271..2086d79 100644
--- a/cobalt/browser/memory_tracker/tool/malloc_logger_tool.h
+++ b/cobalt/browser/memory_tracker/tool/malloc_logger_tool.h
@@ -23,7 +23,7 @@
 #include "cobalt/browser/memory_tracker/tool/params.h"
 #include "cobalt/browser/memory_tracker/tool/tool_impl.h"
 #include "nb/memory_scope.h"
-#include "starboard/atomic.h"
+#include "starboard/common/atomic.h"
 #include "starboard/memory_reporter.h"
 
 namespace cobalt {
diff --git a/cobalt/browser/service_worker_registry.cc b/cobalt/browser/service_worker_registry.cc
index 2fdd068..23a1a1c 100644
--- a/cobalt/browser/service_worker_registry.cc
+++ b/cobalt/browser/service_worker_registry.cc
@@ -39,7 +39,7 @@
 
 ServiceWorkerRegistry::ServiceWorkerRegistry(
     web::WebSettings* web_settings, network::NetworkModule* network_module,
-    web::UserAgentPlatformInfo* platform_info)
+    web::UserAgentPlatformInfo* platform_info, const GURL& url)
     : thread_("ServiceWorkerRegistry") {
   if (!thread_.Start()) return;
   DCHECK(message_loop());
@@ -47,7 +47,7 @@
   message_loop()->task_runner()->PostTask(
       FROM_HERE,
       base::Bind(&ServiceWorkerRegistry::Initialize, base::Unretained(this),
-                 web_settings, network_module, platform_info));
+                 web_settings, network_module, platform_info, url));
 
   // Register as a destruction observer to shut down the Web Agent once all
   // pending tasks have been executed and the message loop is about to be
@@ -73,8 +73,16 @@
   // Ensure that the destruction observer got added before stopping the thread.
   // Stop the thread. This will cause the destruction observer to be notified.
   destruction_observer_added_.Wait();
-  service_worker_jobs_->Stop();
+  DCHECK_NE(thread_.message_loop(), base::MessageLoop::current());
   thread_.Stop();
+  DCHECK(!service_worker_jobs_);
+}
+
+void ServiceWorkerRegistry::EnsureServiceWorkerStarted(
+    const url::Origin& storage_key, const GURL& client_url,
+    base::WaitableEvent* done_event) {
+  service_worker_jobs()->EnsureServiceWorkerStarted(storage_key, client_url,
+                                                    done_event);
 }
 
 worker::ServiceWorkerJobs* ServiceWorkerRegistry::service_worker_jobs() {
@@ -85,11 +93,11 @@
 
 void ServiceWorkerRegistry::Initialize(
     web::WebSettings* web_settings, network::NetworkModule* network_module,
-    web::UserAgentPlatformInfo* platform_info) {
+    web::UserAgentPlatformInfo* platform_info, const GURL& url) {
   TRACE_EVENT0("cobalt::browser", "ServiceWorkerRegistry::Initialize()");
   DCHECK_EQ(base::MessageLoop::current(), message_loop());
   service_worker_jobs_.reset(new worker::ServiceWorkerJobs(
-      web_settings, network_module, platform_info, message_loop()));
+      web_settings, network_module, platform_info, message_loop(), url));
 }
 
 }  // namespace browser
diff --git a/cobalt/browser/service_worker_registry.h b/cobalt/browser/service_worker_registry.h
index 14abedd..8c37083 100644
--- a/cobalt/browser/service_worker_registry.h
+++ b/cobalt/browser/service_worker_registry.h
@@ -34,7 +34,8 @@
  public:
   ServiceWorkerRegistry(web::WebSettings* web_settings,
                         network::NetworkModule* network_module,
-                        web::UserAgentPlatformInfo* platform_info);
+                        web::UserAgentPlatformInfo* platform_info,
+                        const GURL& url);
   ~ServiceWorkerRegistry();
 
   // The message loop this object is running on.
@@ -43,6 +44,10 @@
   // From base::MessageLoop::DestructionObserver.
   void WillDestroyCurrentMessageLoop() override;
 
+  void EnsureServiceWorkerStarted(const url::Origin& storage_key,
+                                  const GURL& client_url,
+                                  base::WaitableEvent* done_event);
+
   worker::ServiceWorkerJobs* service_worker_jobs();
 
  private:
@@ -50,7 +55,7 @@
   // the dedicated thread.
   void Initialize(web::WebSettings* web_settings,
                   network::NetworkModule* network_module,
-                  web::UserAgentPlatformInfo* platform_info);
+                  web::UserAgentPlatformInfo* platform_info, const GURL& url);
 
   // The thread created and owned by the Service Worker Registry.
   // All registry mutations occur on this thread. The thread has to outlive all
diff --git a/cobalt/browser/web_module.cc b/cobalt/browser/web_module.cc
index dc7ae32..f746098 100644
--- a/cobalt/browser/web_module.cc
+++ b/cobalt/browser/web_module.cc
@@ -27,11 +27,11 @@
 #include "base/optional.h"
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/threading/thread_checker.h"
 #include "base/trace_event/trace_event.h"
 #include "cobalt/base/c_val.h"
 #include "cobalt/base/debugger_hooks.h"
 #include "cobalt/base/language.h"
-#include "cobalt/base/startup_timer.h"
 #include "cobalt/base/tokens.h"
 #include "cobalt/base/type_id.h"
 #include "cobalt/browser/splash_screen_cache.h"
@@ -109,6 +109,25 @@
   }
 }
 
+void CancelScroll(ui_navigation::scroll_engine::ScrollEngine* scroll_engine,
+                  const scoped_refptr<ui_navigation::NavItem>& nav_item) {
+  auto nav_items = std::vector<scoped_refptr<ui_navigation::NavItem>>{nav_item};
+  scroll_engine->thread()->message_loop()->task_runner()->PostTask(
+      FROM_HERE, base::Bind(&ui_navigation::scroll_engine::ScrollEngine::
+                                CancelActiveScrollsForNavItems,
+                            base::Unretained(scroll_engine), nav_items));
+}
+
+dom::Window::NavItemCallback CancelScrollCallback(
+    ui_navigation::scroll_engine::ScrollEngine* scroll_engine) {
+  if (scroll_engine) {
+    return base::Bind(CancelScroll, base::Unretained(scroll_engine));
+  } else {
+    return base::Callback<void(
+        const scoped_refptr<cobalt::ui_navigation::NavItem>& nav_item)>();
+  }
+}
+
 }  // namespace
 
 // Private WebModule implementation. Each WebModule owns a single instance of
@@ -238,9 +257,6 @@
 
   void ReduceMemory();
 
-  void LogScriptError(const base::SourceLocation& source_location,
-                      const std::string& error_message);
-
   void IsReadyToFreeze(volatile bool* is_ready_to_freeze) {
     if (window_->media_session()->media_session_client() == NULL) {
       *is_ready_to_freeze = true;
@@ -291,8 +307,6 @@
   void ProcessOnRenderTreeRasterized(const base::TimeTicks& produced_time,
                                      const base::TimeTicks& rasterized_time);
 
-  void OnCspPolicyChanged();
-
   scoped_refptr<script::GlobalEnvironment> global_environment() {
     DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
     return web_context_->global_environment();
@@ -318,10 +332,6 @@
     }
   }
 
-  // Report an error encountered while running JS.
-  // Returns whether or not the error was handled.
-  bool ReportScriptError(const script::ErrorReport& error_report);
-
   // Inject the DOM event object into the window or the element.
   void InjectInputEvent(scoped_refptr<dom::Element> element,
                         const scoped_refptr<web::Event>& event);
@@ -498,11 +508,6 @@
 #endif  // defined(ENABLE_DEBUGGER)
       synchronous_loader_interrupt_(data.synchronous_loader_interrupt) {
   DCHECK(web_context_);
-#if defined(COBALT_ENABLE_JAVASCRIPT_ERROR_LOGGING)
-  script::JavaScriptEngine::ErrorHandler error_handler =
-      base::Bind(&WebModule::Impl::LogScriptError, base::Unretained(this));
-  web_context_->javascript_engine()->RegisterErrorHandler(error_handler);
-#endif
   css_parser::Parser::SupportsMapToMeshFlag supports_map_to_mesh =
       data.options.enable_map_to_mesh
           ? css_parser::Parser::kSupportsMapToMesh
@@ -514,7 +519,7 @@
   dom_parser_.reset(new dom_parser::Parser(
       kDOMMaxElementDepth,
       base::Bind(&WebModule::Impl::OnLoadComplete, base::Unretained(this)),
-      data.options.require_csp));
+      data.options.csp_header_policy));
   DCHECK(dom_parser_);
 
   on_before_unload_fired_but_not_handled_ =
@@ -581,7 +586,7 @@
     memory_info = stub_decoder_buffer_memory_info_.get();
   }
 
-  web_context_->setup_environment_settings(new dom::DOMSettings(
+  web_context_->SetupEnvironmentSettings(new dom::DOMSettings(
       debugger_hooks_, kDOMMaxElementDepth, media_source_registry_.get(),
       data.can_play_type_handler, memory_info, &mutation_observer_task_manager_,
       data.options.dom_settings_options));
@@ -597,6 +602,9 @@
   dom::Window::CacheCallback splash_screen_cache_callback =
       CacheUrlContentCallback(data.options.splash_screen_cache);
 
+  dom::Window::NavItemCallback cancel_scroll_callback =
+      CancelScrollCallback(data.scroll_engine);
+
   // These members will reference other |Traceable|s, however are not
   // accessible from |Window|, so we must explicitly add them as roots.
   web_context_->global_environment()->AddRoot(&mutation_observer_task_manager_);
@@ -635,9 +643,10 @@
       base::GetSystemLanguageScript(), data.options.navigation_callback,
       base::Bind(&WebModule::Impl::OnLoadComplete, base::Unretained(this)),
       web_context_->network_module()->cookie_jar(),
-      web_context_->network_module()->GetPostSender(), data.options.require_csp,
-      data.options.csp_enforcement_mode,
-      base::Bind(&WebModule::Impl::OnCspPolicyChanged, base::Unretained(this)),
+      web::CspDelegate::Options(web_context_->network_module()->GetPostSender(),
+                                data.options.csp_header_policy,
+                                data.options.csp_enforcement_type,
+                                data.options.csp_insecure_allowed_token),
       base::Bind(&WebModule::Impl::OnRanAnimationFrameCallbacks,
                  base::Unretained(this)),
       data.window_close_callback, data.window_minimize_callback,
@@ -645,10 +654,11 @@
       base::Bind(&WebModule::Impl::OnStartDispatchEvent,
                  base::Unretained(this)),
       base::Bind(&WebModule::Impl::OnStopDispatchEvent, base::Unretained(this)),
-      data.options.provide_screenshot_function, synchronous_loader_interrupt_,
-      data.options.enable_inline_script_warnings, data.ui_nav_root,
-      data.options.enable_map_to_mesh, data.options.csp_insecure_allowed_token,
-      data.dom_max_element_depth, data.options.video_playback_rate_multiplier,
+      data.options.provide_screenshot_function, cancel_scroll_callback,
+      synchronous_loader_interrupt_, data.options.enable_inline_script_warnings,
+      data.ui_nav_root, data.options.enable_map_to_mesh,
+      data.options.csp_insecure_allowed_token, data.dom_max_element_depth,
+      data.options.video_playback_rate_multiplier,
 #if defined(ENABLE_TEST_RUNNER)
       data.options.layout_trigger == layout::LayoutManager::kTestRunnerMode
           ? dom::Window::kClockTypeTestRunner
@@ -699,21 +709,6 @@
       data.options.clear_window_with_background_color));
   DCHECK(layout_manager_);
 
-#if !defined(COBALT_FORCE_CSP)
-  if (data.options.csp_enforcement_mode == web::kCspEnforcementDisable) {
-    // If CSP is disabled, enable eval(). Otherwise, it will be enabled by
-    // a CSP directive.
-    web_context_->global_environment()->EnableEval();
-  }
-#endif
-
-  web_context_->global_environment()->SetReportEvalCallback(
-      base::Bind(&web::CspDelegate::ReportEval,
-                 base::Unretained(window_->csp_delegate())));
-
-  web_context_->global_environment()->SetReportErrorCallback(
-      base::Bind(&WebModule::Impl::ReportScriptError, base::Unretained(this)));
-
   if (!data.options.loaded_callbacks.empty()) {
     document_load_observer_.reset(
         new DocumentLoadedObserver(data.options.loaded_callbacks));
@@ -733,6 +728,7 @@
   report_unload_timing_info_callback_ =
       data.options.collect_unload_event_time_callback;
 
+  web_context_->SetupFinished();
   is_running_ = true;
 }
 
@@ -1015,29 +1011,6 @@
   }
 }
 
-void WebModule::Impl::OnCspPolicyChanged() {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  DCHECK(is_running_);
-  DCHECK(window_);
-  DCHECK(window_->csp_delegate());
-
-  std::string eval_disabled_message;
-  bool allow_eval = window_->csp_delegate()->AllowEval(&eval_disabled_message);
-  if (allow_eval) {
-    web_context_->global_environment()->EnableEval();
-  } else {
-    web_context_->global_environment()->DisableEval(eval_disabled_message);
-  }
-}
-
-bool WebModule::Impl::ReportScriptError(
-    const script::ErrorReport& error_report) {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  DCHECK(is_running_);
-  DCHECK(window_);
-  return window_->ReportScriptError(error_report);
-}
-
 #if defined(ENABLE_WEBDRIVER)
 void WebModule::Impl::CreateWindowDriver(
     const webdriver::protocol::WindowId& window_id,
@@ -1235,25 +1208,6 @@
   }
 }
 
-void WebModule::Impl::LogScriptError(
-    const base::SourceLocation& source_location,
-    const std::string& error_message) {
-  std::string file_name =
-      base::FilePath(source_location.file_path).BaseName().value();
-
-  std::stringstream ss;
-  base::TimeDelta dt = base::StartupTimer::TimeElapsed();
-
-  // Create the error output.
-  // Example:
-  //   JS:50250:file.js(29,80): ka(...) is not iterable
-  //   JS:<time millis><js-file-name>(<line>,<column>):<message>
-  ss << "JS:" << dt.InMilliseconds() << ":" << file_name << "("
-     << source_location.line_number << "," << source_location.column_number
-     << "): " << error_message << "\n";
-  SbLogRaw(ss.str().c_str());
-}
-
 void WebModule::Impl::InjectBeforeUnloadEvent() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (window_ && window_->HasEventListener(base::Tokens::beforeunload())) {
diff --git a/cobalt/browser/web_module.h b/cobalt/browser/web_module.h
index d3fa41c..8c28dce 100644
--- a/cobalt/browser/web_module.h
+++ b/cobalt/browser/web_module.h
@@ -24,7 +24,6 @@
 #include "base/message_loop/message_loop.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/thread.h"
-#include "base/threading/thread_checker.h"
 #include "cobalt/base/address_sanitizer.h"
 #include "cobalt/base/source_location.h"
 #include "cobalt/browser/lifecycle_observer.h"
@@ -59,7 +58,7 @@
 #include "cobalt/web/environment_settings.h"
 #include "cobalt/web/user_agent_platform_info.h"
 #include "cobalt/webdriver/session_driver.h"
-#include "starboard/atomic.h"
+#include "starboard/common/atomic.h"
 #include "url/gurl.h"
 
 #if defined(ENABLE_DEBUGGER)
@@ -121,7 +120,7 @@
     dom::DOMSettings::Options dom_settings_options;
 
     // Whether Cobalt is forbidden to render without receiving CSP headers.
-    csp::CSPHeaderPolicy require_csp;
+    csp::CSPHeaderPolicy csp_header_policy;
 
     // If true, Cobalt will log a warning each time it parses a non-async
     // <script> tag inlined in HTML.  Cobalt has a known issue where if it is
@@ -149,7 +148,7 @@
     bool enable_map_to_mesh = true;
 
     // Content Security Policy enforcement mode for this web module.
-    web::CspEnforcementType csp_enforcement_mode = web::kCspEnforcementEnable;
+    web::CspEnforcementType csp_enforcement_type = web::kCspEnforcementEnable;
 
     // Token obtained from CSP to allow creation of insecure delegates.
     int csp_insecure_allowed_token = 0;
diff --git a/cobalt/cache/cache.cc b/cobalt/cache/cache.cc
index f275abb..d88a6ec 100644
--- a/cobalt/cache/cache.cc
+++ b/cobalt/cache/cache.cc
@@ -22,6 +22,7 @@
 #include "base/files/file_util.h"
 #include "base/memory/singleton.h"
 #include "base/optional.h"
+#include "base/strings/string_number_conversions.h"
 #include "base/values.h"
 #include "cobalt/configuration/configuration.h"
 #include "cobalt/persistent_storage/persistent_settings.h"
@@ -246,7 +247,8 @@
 
 void Cache::Resize(disk_cache::ResourceType resource_type, uint32_t bytes) {
   if (resource_type != disk_cache::ResourceType::kCacheApi &&
-      resource_type != disk_cache::ResourceType::kCompiledScript)
+      resource_type != disk_cache::ResourceType::kCompiledScript &&
+      resource_type != disk_cache::ResourceType::kServiceWorkerScript)
     return;
   if (bytes == disk_cache::kTypeMetadata[resource_type].max_size_bytes) return;
 
@@ -322,12 +324,24 @@
 
 bool Cache::CanCache(disk_cache::ResourceType resource_type,
                      uint32_t data_size) {
-  return enabled_ &&
-         cobalt::configuration::Configuration::GetInstance()
-             ->CobaltCanStoreCompiledJavascript() &&
-         data_size > 0u &&
-         data_size >= GetMinSizeToCacheInBytes(resource_type) &&
-         data_size <= GetMaxCacheStorageInBytes(resource_type);
+  bool size_okay = data_size > 0u &&
+                   data_size >= GetMinSizeToCacheInBytes(resource_type) &&
+                   data_size <= GetMaxCacheStorageInBytes(resource_type);
+  if (!size_okay) {
+    return false;
+  }
+  if (resource_type == disk_cache::ResourceType::kServiceWorkerScript ||
+      resource_type == disk_cache::ResourceType::kCacheApi) {
+    return true;
+  }
+  if (!enabled_) {
+    return false;
+  }
+  if (resource_type == disk_cache::ResourceType::kCompiledScript) {
+    return cobalt::configuration::Configuration::GetInstance()
+        ->CobaltCanStoreCompiledJavascript();
+  }
+  return true;
 }
 
 }  // namespace cache
diff --git a/cobalt/content/fonts/config/android/fonts.xml b/cobalt/content/fonts/config/android/fonts.xml
index 9ced68c..dcdfb2b 100644
--- a/cobalt/content/fonts/config/android/fonts.xml
+++ b/cobalt/content/fonts/config/android/fonts.xml
@@ -170,15 +170,13 @@
     -->
     <family fallback_priority="0" name="Noto Naskh Arabic UI">
         <font weight="400" style="normal">NotoNaskhArabicUI-Regular.ttf</font>
-        <font weight="400" style="normal">NotoNaskhUI-Regular.ttf</font>
         <font weight="700" style="normal">NotoNaskhArabicUI-Bold.ttf</font>
-        <font weight="700" style="normal">NotoNaskhUI-Bold.ttf</font>
     </family>
     <family>
         <font weight="400" style="normal">NotoSansEthiopic-Regular.ttf</font>
         <font weight="700" style="normal">NotoSansEthiopic-Bold.ttf</font>
-        <font weight="400" style="normal">NotoSansEthiopic-VF.ttf</font>
-        <font weight="700" style="normal">NotoSansEthiopic-VF.ttf</font>
+        <font weight="400" style="normal" tag_wght="400" font_name="Noto Sans Ethiopic" postscript_name="NotoSansEthiopic-Regular">NotoSansEthiopic-VF.ttf</font>
+        <font weight="700" style="normal" tag_wght="700" font_name="Noto Sans Ethiopic Bold" postscript_name="NotoSansEthiopic-Bold">NotoSansEthiopic-VF.ttf</font>
     </family>
     <family>
         <font weight="400" style="normal">NotoSansHebrew-Regular.ttf</font>
@@ -193,22 +191,24 @@
         <font weight="400" style="normal">NotoSansArmenian-Regular.otf</font>
         <font weight="700" style="normal">NotoSansArmenian-Bold.ttf</font>
         <font weight="700" style="normal">NotoSansArmenian-Bold.otf</font>
-        <font weight="400" style="normal">NotoSansArmenian-VF.ttf</font>
-        <font weight="700" style="normal">NotoSansArmenian-VF.ttf</font>
+        <font weight="400" style="normal" tag_wght="400" font_name="Noto Sans Armenian" postscript_name="NotoSansArmenian-Regular">NotoSansArmenian-VF.ttf</font>
+        <font weight="700" style="normal" tag_wght="700" font_name="Noto Sans Armenian Bold" postscript_name="NotoSansArmenian-Bold">NotoSansArmenian-VF.ttf</font>
     </family>
     <family>
         <font weight="400" style="normal">NotoSansGeorgian-Regular.ttf</font>
         <font weight="400" style="normal">NotoSansGeorgian-Regular.otf</font>
         <font weight="700" style="normal">NotoSansGeorgian-Bold.ttf</font>
         <font weight="700" style="normal">NotoSansGeorgian-Bold.otf</font>
+        <font weight="400" style="normal" tag_wght="400" font_name="Noto Sans Georgian" postscript_name="NotoSansGeorgian-Regular">NotoSansGeorgian-VF.ttf</font>
+        <font weight="700" style="normal" tag_wght="700" font_name="Noto Sans Georgian Bold" postscript_name="NotoSansGeorgian-Bold">NotoSansGeorgian-VF.ttf</font>
     </family>
     <family>
         <font weight="400" style="normal">NotoSansDevanagariUI-Regular.ttf</font>
         <font weight="400" style="normal">NotoSansDevanagariUI-Regular.otf</font>
         <font weight="700" style="normal">NotoSansDevanagariUI-Bold.ttf</font>
         <font weight="700" style="normal">NotoSansDevanagariUI-Bold.otf</font>
-        <font weight="400" style="normal">NotoSansDevanagariUI-VF.ttf</font>
-        <font weight="700" style="normal">NotoSansDevanagariUI-VF.ttf</font>
+        <font weight="400" style="normal" tag_wght="400" font_name="Noto Sans Devanagari UI" postscript_name="NotoSansDevanagariUI-Regular">NotoSansDevanagariUI-VF.ttf</font>
+        <font weight="700" style="normal" tag_wght="700" font_name="Noto Sans Devanagari UI Bold" postscript_name="NotoSansDevanagariUI-Bold">NotoSansDevanagariUI-VF.ttf</font>
     </family>
     <!-- Gujarati should come after Devanagari -->
     <family>
@@ -219,44 +219,44 @@
     <family>
         <font weight="400" style="normal">NotoSansGurmukhiUI-Regular.ttf</font>
         <font weight="700" style="normal">NotoSansGurmukhiUI-Bold.ttf</font>
-        <font weight="400" style="normal">NotoSansGurmukhiUI-VF.ttf</font>
-        <font weight="700" style="normal">NotoSansGurmukhiUI-VF.ttf</font>
+        <font weight="400" style="normal" tag_wght="400" font_name="Noto Sans Gurmukhi UI" postscript_name="NotoSansGurmukhiUI-Regular">NotoSansGurmukhiUI-VF.ttf</font>
+        <font weight="700" style="normal" tag_wght="700" font_name="Noto Sans Gurmukhi UI Bold" postscript_name="NotoSansGurmukhiUI-Bold">NotoSansGurmukhiUI-VF.ttf</font>
     </family>
     <family>
         <font weight="400" style="normal">NotoSansTamilUI-Regular.ttf</font>
         <font weight="400" style="normal">NotoSansTamilUI-Regular.otf</font>
         <font weight="700" style="normal">NotoSansTamilUI-Bold.ttf</font>
         <font weight="700" style="normal">NotoSansTamilUI-Bold.otf</font>
-        <font weight="400" style="normal">NotoSansTamilUI-VF.ttf</font>
-        <font weight="700" style="normal">NotoSansTamilUI-VF.ttf</font>
+        <font weight="400" style="normal" tag_wght="400" font_name="Noto Sans Tamil UI" postscript_name="NotoSansTamilUI-Regular">NotoSansTamilUI-VF.ttf</font>
+        <font weight="700" style="normal" tag_wght="700" font_name="Noto Sans Tamil UI Bold" postscript_name="NotoSansTamilUI-Bold">NotoSansTamilUI-VF.ttf</font>
     </family>
     <family>
         <font weight="400" style="normal">NotoSansMalayalamUI-Regular.ttf</font>
         <font weight="400" style="normal">NotoSansMalayalamUI-Regular.otf</font>
         <font weight="700" style="normal">NotoSansMalayalamUI-Bold.ttf</font>
         <font weight="700" style="normal">NotoSansMalayalamUI-Bold.otf</font>
-        <font weight="400" style="normal">NotoSansMalayalamUI-VF.ttf</font>
-        <font weight="700" style="normal">NotoSansMalayalamUI-VF.ttf</font>
+        <font weight="400" style="normal" tag_wght="400" font_name="Noto Sans Malayalam UI" postscript_name="NotoSansMalayalamUI-Regular">NotoSansMalayalamUI-VF.ttf</font>
+        <font weight="700" style="normal" tag_wght="700" font_name="Noto Sans Malayalam UI Bold" postscript_name="NotoSansMalayalamUI-Bold">NotoSansMalayalamUI-VF.ttf</font>
     </family>
     <family>
         <font weight="400" style="normal">NotoSansBengaliUI-Regular.ttf</font>
         <font weight="400" style="normal">NotoSansBengaliUI-Regular.otf</font>
         <font weight="700" style="normal">NotoSansBengaliUI-Bold.ttf</font>
         <font weight="700" style="normal">NotoSansBengaliUI-Bold.otf</font>
-        <font weight="400" style="normal">NotoSansBengaliUI-VF.ttf</font>
-        <font weight="700" style="normal">NotoSansBengaliUI-VF.ttf</font>
+        <font weight="400" style="normal" tag_wght="400" font_name="Noto Sans Bengali UI" postscript_name="NotoSansBengaliUI-Regular">NotoSansBengaliUI-VF.ttf</font>
+        <font weight="700" style="normal" tag_wght="700" font_name="Noto Sans Bengali UI Bold" postscript_name="NotoSansBengaliUI-Bold">NotoSansBengaliUI-VF.ttf</font>
     </family>
     <family>
         <font weight="400" style="normal">NotoSansTeluguUI-Regular.ttf</font>
         <font weight="700" style="normal">NotoSansTeluguUI-Bold.ttf</font>
-        <font weight="400" style="normal">NotoSansTeluguUI-VF.ttf</font>
-        <font weight="700" style="normal">NotoSansTeluguUI-VF.ttf</font>
+        <font weight="400" style="normal" tag_wght="400" font_name="Noto Sans Telugu UI" postscript_name="NotoSansTeluguUI-Regular">NotoSansTeluguUI-VF.ttf</font>
+        <font weight="700" style="normal" tag_wght="700" font_name="Noto Sans Telugu UI Bold" postscript_name="NotoSansTeluguUI-Bold">NotoSansTeluguUI-VF.ttf</font>
     </family>
     <family>
         <font weight="400" style="normal">NotoSansKannadaUI-Regular.ttf</font>
         <font weight="700" style="normal">NotoSansKannadaUI-Bold.ttf</font>
-        <font weight="400" style="normal">NotoSansKannadaUI-VF.ttf</font>
-        <font weight="700" style="normal">NotoSansKannadaUI-VF.ttf</font>
+        <font weight="400" style="normal" tag_wght="400" font_name="Noto Sans Kannada UI" postscript_name="NotoSansKannadaUI-Regular">NotoSansKannadaUI-VF.ttf</font>
+        <font weight="700" style="normal" tag_wght="700" font_name="Noto Sans Kannada UI Bold" postscript_name="NotoSansKannadaUI-Bold">NotoSansKannadaUI-VF.ttf</font>
     </family>
     <family>
         <font weight="400" style="normal">NotoSansOriyaUI-Regular.ttf</font>
@@ -267,8 +267,8 @@
         <font weight="400" style="normal">NotoSansSinhala-Regular.otf</font>
         <font weight="700" style="normal">NotoSansSinhala-Bold.ttf</font>
         <font weight="700" style="normal">NotoSansSinhala-Bold.otf</font>
-        <font weight="400" style="normal">NotoSansSinhala-VF.ttf</font>
-        <font weight="700" style="normal">NotoSansSinhala-VF.ttf</font>
+        <font weight="400" style="normal" tag_wght="400" font_name="Noto Sans Sinhala" postscript_name="NotoSansSinhala-Regular">NotoSansSinhala-VF.ttf</font>
+        <font weight="700" style="normal" tag_wght="700" font_name="Noto Sans Sinhala Bold" postscript_name="NotoSansSinhala-Bold">NotoSansSinhala-VF.ttf</font>
     </family>
     <family>
         <font weight="400" style="normal">NotoSansKhmerUI-Regular.ttf</font>
@@ -294,6 +294,7 @@
     </family>
     <family>
         <font weight="400" style="normal">NotoSansAdlam-Regular.ttf</font>
+        <font weight="400" style="normal" tag_wght="400" font_name="Noto Sans Adlam" postscript_name="NotoSansAdlam-Regular">NotoSansAdlam-VF.ttf</font>
     </family>
     <family>
         <font weight="400" style="normal">NotoSansAvestan-Regular.ttf</font>
@@ -481,18 +482,11 @@
         <font weight="400" style="normal">NotoSansVai-Regular.ttf</font>
     </family>
     <family>
-        <font weight="400" style="normal">Lohit-Odia.ttf</font>
-    </family>
-    <family>
         <font weight="400" style="normal">NotoSansSymbols-Regular-Subsetted.ttf</font>
     </family>
     <family lang="zh-Hans">
         <font weight="400" style="normal" index="2">NotoSansCJK-Regular.ttc</font>
     </family>
-    <family lang="zh-Hans">
-        <font weight="400" style="normal">NotoSansSC-Regular.otf</font>
-        <font weight="400" style="normal">NotoSansHans-Regular.otf</font>
-    </family>
     <family lang="zh-Hant">
         <font weight="400" style="normal" index="3">NotoSansCJK-Regular.ttc</font>
     </family>
@@ -509,12 +503,6 @@
     <family lang="ko">
         <font weight="400" style="normal" index="1">NotoSansCJK-Regular.ttc</font>
     </family>
-    <family lang="ko">
-        <font weight="400" style="normal">NotoSansKR-Regular.otf</font>
-    </family>
-    <family>
-        <font weight="400" style="normal">NanumGothic.ttf</font>
-    </family>
     <family>
         <font weight="400" style="normal" disable_synthetic_bolding="true">NotoColorEmoji.ttf</font>
     </family>
@@ -529,9 +517,6 @@
     <family>
         <font weight="400" style="normal" disable_synthetic_bolding="true">DroidSansFallback.ttf</font>
     </family>
-    <family lang="ja">
-        <font weight="400" style="normal">MTLmr3m.ttf</font>
-    </family>
     <!--
         Tai Le, Yi, Mongolian, and Phags-pa are intentionally kept last, to make sure they don't
         override the East Asian punctuation for Chinese.
@@ -548,49 +533,4 @@
     <family>
         <font weight="400" style="normal">NotoSansPhagsPa-Regular.ttf</font>
     </family>
-
-
-    <!--
-        Include font files on android version R under /system/fonts directory.
-        The program will find the first font file that contains the glyph for the character,
-        when no font file has the glyph, it will show broken string, to avoid this, include fonts
-        files on the android OS.
-    -->
-    <family>
-            <font weight="400" style="normal">NotoSansAdlam-VF.ttf</font>
-            <font weight="700" style="normal">NotoSansAdlam-VF.ttf</font>
-    </family>
-    <family>
-            <font weight="400" style="normal">NotoSansGeorgian-VF.ttf</font>
-            <font weight="700" style="normal">NotoSansGeorgian-VF.ttf</font>
-    </family>
-    <family>
-            <font weight="400" style="normal">NotoSansOsage-Regular.ttf</font>
-    </family>
-    <family>
-            <font weight="400" style="normal">RobotoCondensed-Medium.ttf</font>
-    </family>
-    <family>
-            <font weight="400" style="normal">RobotoCondensed-MediumItalic.ttf</font>
-    </family>
-
-    <!--
-        Include font files on android version S under /system/fonts directory.
-    -->
-    <family lang="zh-Hans">
-        <font weight="400" style="normal" index="2">NotoSansCJKjp-Regular.otc</font>
-        <font weight="400" style="normal" index="2" fallbackFor="serif">NotoSerifCJKjp-Regular.otc</font>
-    </family>
-    <family lang="zh-Hant,zh-Bopo">
-        <font weight="400" style="normal" index="3">NotoSansCJKjp-Regular.otc</font>
-        <font weight="400" style="normal" index="3" fallbackFor="serif">NotoSerifCJKjp-Regular.otc</font>
-    </family>
-    <family lang="ja">
-        <font weight="400" style="normal" index="0">NotoSansCJKjp-Regular.otc</font>
-        <font weight="400" style="normal" index="0" fallbackFor="serif">NotoSerifCJKjp-Regular.otc</font>
-    </family>
-    <family lang="ko">
-        <font weight="400" style="normal" index="1">NotoSansCJKjp-Regular.otc</font>
-        <font weight="400" style="normal" index="1" fallbackFor="serif">NotoSerifCJKjp-Regular.otc</font>
-    </family>
 </familyset>
diff --git a/cobalt/content/licenses/platform/android/licenses_cobalt.txt b/cobalt/content/licenses/platform/android/licenses_cobalt.txt
index a286d10..8821b6d 100644
--- a/cobalt/content/licenses/platform/android/licenses_cobalt.txt
+++ b/cobalt/content/licenses/platform/android/licenses_cobalt.txt
@@ -1487,885 +1487,6 @@
 
 
 
-  nss
-
-
-    NSS is available under the Mozilla Public License, version 2, a copy of which
-  is below.
-
-  Note on GPL Compatibility
-  -------------------------
-
-  The MPL 2, section 3.3, permits you to combine NSS with code under the GNU
-  General Public License (GPL) version 2, or any later version of that
-  license, to make a Larger Work, and distribute the result under the GPL.
-  The only condition is that you must also make NSS, and any changes you
-  have made to it, available to recipients under the terms of the MPL 2 also.
-
-  Anyone who receives the combined code from you does not have to continue
-  to dual licence in this way, and may, if they wish, distribute under the
-  terms of either of the two licences - either the MPL alone or the GPL
-  alone. However, we discourage people from distributing copies of NSS under
-  the GPL alone, because it means that any improvements they make cannot be
-  reincorporated into the main version of NSS. There is never a need to do
-  this for license compatibility reasons.
-
-  Note on LGPL Compatibility
-  --------------------------
-
-  The above also applies to combining MPLed code in a single library with
-  code under the GNU Lesser General Public License (LGPL) version 2.1, or
-  any later version of that license. If the LGPLed code and the MPLed code
-  are not in the same library, then the copyleft coverage of the two
-  licences does not overlap, so no issues arise.
-
-
-  Mozilla Public License Version 2.0
-  ==================================
-
-  1. Definitions
-  --------------
-
-  1.1. "Contributor"
-      means each individual or legal entity that creates, contributes to
-      the creation of, or owns Covered Software.
-
-  1.2. "Contributor Version"
-      means the combination of the Contributions of others (if any) used
-      by a Contributor and that particular Contributor's Contribution.
-
-  1.3. "Contribution"
-      means Covered Software of a particular Contributor.
-
-  1.4. "Covered Software"
-      means Source Code Form to which the initial Contributor has attached
-      the notice in Exhibit A, the Executable Form of such Source Code
-      Form, and Modifications of such Source Code Form, in each case
-      including portions thereof.
-
-  1.5. "Incompatible With Secondary Licenses"
-      means
-
-      (a) that the initial Contributor has attached the notice described
-          in Exhibit B to the Covered Software; or
-
-      (b) that the Covered Software was made available under the terms of
-          version 1.1 or earlier of the License, but not also under the
-          terms of a Secondary License.
-
-  1.6. "Executable Form"
-      means any form of the work other than Source Code Form.
-
-  1.7. "Larger Work"
-      means a work that combines Covered Software with other material, in
-      a separate file or files, that is not Covered Software.
-
-  1.8. "License"
-      means this document.
-
-  1.9. "Licensable"
-      means having the right to grant, to the maximum extent possible,
-      whether at the time of the initial grant or subsequently, any and
-      all of the rights conveyed by this License.
-
-  1.10. "Modifications"
-      means any of the following:
-
-      (a) any file in Source Code Form that results from an addition to,
-          deletion from, or modification of the contents of Covered
-          Software; or
-
-      (b) any new file in Source Code Form that contains any Covered
-          Software.
-
-  1.11. "Patent Claims" of a Contributor
-      means any patent claim(s), including without limitation, method,
-      process, and apparatus claims, in any patent Licensable by such
-      Contributor that would be infringed, but for the grant of the
-      License, by the making, using, selling, offering for sale, having
-      made, import, or transfer of either its Contributions or its
-      Contributor Version.
-
-  1.12. "Secondary License"
-      means either the GNU General Public License, Version 2.0, the GNU
-      Lesser General Public License, Version 2.1, the GNU Affero General
-      Public License, Version 3.0, or any later versions of those
-      licenses.
-
-  1.13. "Source Code Form"
-      means the form of the work preferred for making modifications.
-
-  1.14. "You" (or "Your")
-      means an individual or a legal entity exercising rights under this
-      License. For legal entities, "You" includes any entity that
-      controls, is controlled by, or is under common control with You. For
-      purposes of this definition, "control" means (a) the power, direct
-      or indirect, to cause the direction or management of such entity,
-      whether by contract or otherwise, or (b) ownership of more than
-      fifty percent (50%) of the outstanding shares or beneficial
-      ownership of such entity.
-
-  2. License Grants and Conditions
-  --------------------------------
-
-  2.1. Grants
-
-  Each Contributor hereby grants You a world-wide, royalty-free,
-  non-exclusive license:
-
-  (a) under intellectual property rights (other than patent or trademark)
-      Licensable by such Contributor to use, reproduce, make available,
-      modify, display, perform, distribute, and otherwise exploit its
-      Contributions, either on an unmodified basis, with Modifications, or
-      as part of a Larger Work; and
-
-  (b) under Patent Claims of such Contributor to make, use, sell, offer
-      for sale, have made, import, and otherwise transfer either its
-      Contributions or its Contributor Version.
-
-  2.2. Effective Date
-
-  The licenses granted in Section 2.1 with respect to any Contribution
-  become effective for each Contribution on the date the Contributor first
-  distributes such Contribution.
-
-  2.3. Limitations on Grant Scope
-
-  The licenses granted in this Section 2 are the only rights granted under
-  this License. No additional rights or licenses will be implied from the
-  distribution or licensing of Covered Software under this License.
-  Notwithstanding Section 2.1(b) above, no patent license is granted by a
-  Contributor:
-
-  (a) for any code that a Contributor has removed from Covered Software;
-      or
-
-  (b) for infringements caused by: (i) Your and any other third party's
-      modifications of Covered Software, or (ii) the combination of its
-      Contributions with other software (except as part of its Contributor
-      Version); or
-
-  (c) under Patent Claims infringed by Covered Software in the absence of
-      its Contributions.
-
-  This License does not grant any rights in the trademarks, service marks,
-  or logos of any Contributor (except as may be necessary to comply with
-  the notice requirements in Section 3.4).
-
-  2.4. Subsequent Licenses
-
-  No Contributor makes additional grants as a result of Your choice to
-  distribute the Covered Software under a subsequent version of this
-  License (see Section 10.2) or under the terms of a Secondary License (if
-  permitted under the terms of Section 3.3).
-
-  2.5. Representation
-
-  Each Contributor represents that the Contributor believes its
-  Contributions are its original creation(s) or it has sufficient rights
-  to grant the rights to its Contributions conveyed by this License.
-
-  2.6. Fair Use
-
-  This License is not intended to limit any rights You have under
-  applicable copyright doctrines of fair use, fair dealing, or other
-  equivalents.
-
-  2.7. Conditions
-
-  Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
-  in Section 2.1.
-
-  3. Responsibilities
-  -------------------
-
-  3.1. Distribution of Source Form
-
-  All distribution of Covered Software in Source Code Form, including any
-  Modifications that You create or to which You contribute, must be under
-  the terms of this License. You must inform recipients that the Source
-  Code Form of the Covered Software is governed by the terms of this
-  License, and how they can obtain a copy of this License. You may not
-  attempt to alter or restrict the recipients' rights in the Source Code
-  Form.
-
-  3.2. Distribution of Executable Form
-
-  If You distribute Covered Software in Executable Form then:
-
-  (a) such Covered Software must also be made available in Source Code
-      Form, as described in Section 3.1, and You must inform recipients of
-      the Executable Form how they can obtain a copy of such Source Code
-      Form by reasonable means in a timely manner, at a charge no more
-      than the cost of distribution to the recipient; and
-
-  (b) You may distribute such Executable Form under the terms of this
-      License, or sublicense it under different terms, provided that the
-      license for the Executable Form does not attempt to limit or alter
-      the recipients' rights in the Source Code Form under this License.
-
-  3.3. Distribution of a Larger Work
-
-  You may create and distribute a Larger Work under terms of Your choice,
-  provided that You also comply with the requirements of this License for
-  the Covered Software. If the Larger Work is a combination of Covered
-  Software with a work governed by one or more Secondary Licenses, and the
-  Covered Software is not Incompatible With Secondary Licenses, this
-  License permits You to additionally distribute such Covered Software
-  under the terms of such Secondary License(s), so that the recipient of
-  the Larger Work may, at their option, further distribute the Covered
-  Software under the terms of either this License or such Secondary
-  License(s).
-
-  3.4. Notices
-
-  You may not remove or alter the substance of any license notices
-  (including copyright notices, patent notices, disclaimers of warranty,
-  or limitations of liability) contained within the Source Code Form of
-  the Covered Software, except that You may alter any license notices to
-  the extent required to remedy known factual inaccuracies.
-
-  3.5. Application of Additional Terms
-
-  You may choose to offer, and to charge a fee for, warranty, support,
-  indemnity or liability obligations to one or more recipients of Covered
-  Software. However, You may do so only on Your own behalf, and not on
-  behalf of any Contributor. You must make it absolutely clear that any
-  such warranty, support, indemnity, or liability obligation is offered by
-  You alone, and You hereby agree to indemnify every Contributor for any
-  liability incurred by such Contributor as a result of warranty, support,
-  indemnity or liability terms You offer. You may include additional
-  disclaimers of warranty and limitations of liability specific to any
-  jurisdiction.
-
-  4. Inability to Comply Due to Statute or Regulation
-  ---------------------------------------------------
-
-  If it is impossible for You to comply with any of the terms of this
-  License with respect to some or all of the Covered Software due to
-  statute, judicial order, or regulation then You must: (a) comply with
-  the terms of this License to the maximum extent possible; and (b)
-  describe the limitations and the code they affect. Such description must
-  be placed in a text file included with all distributions of the Covered
-  Software under this License. Except to the extent prohibited by statute
-  or regulation, such description must be sufficiently detailed for a
-  recipient of ordinary skill to be able to understand it.
-
-  5. Termination
-  --------------
-
-  5.1. The rights granted under this License will terminate automatically
-  if You fail to comply with any of its terms. However, if You become
-  compliant, then the rights granted under this License from a particular
-  Contributor are reinstated (a) provisionally, unless and until such
-  Contributor explicitly and finally terminates Your grants, and (b) on an
-  ongoing basis, if such Contributor fails to notify You of the
-  non-compliance by some reasonable means prior to 60 days after You have
-  come back into compliance. Moreover, Your grants from a particular
-  Contributor are reinstated on an ongoing basis if such Contributor
-  notifies You of the non-compliance by some reasonable means, this is the
-  first time You have received notice of non-compliance with this License
-  from such Contributor, and You become compliant prior to 30 days after
-  Your receipt of the notice.
-
-  5.2. If You initiate litigation against any entity by asserting a patent
-  infringement claim (excluding declaratory judgment actions,
-  counter-claims, and cross-claims) alleging that a Contributor Version
-  directly or indirectly infringes any patent, then the rights granted to
-  You by any and all Contributors for the Covered Software under Section
-  2.1 of this License shall terminate.
-
-  5.3. In the event of termination under Sections 5.1 or 5.2 above, all
-  end user license agreements (excluding distributors and resellers) which
-  have been validly granted by You or Your distributors under this License
-  prior to termination shall survive termination.
-
-  ************************************************************************
-  *                                                                      *
-  *  6. Disclaimer of Warranty                                           *
-  *  -------------------------                                           *
-  *                                                                      *
-  *  Covered Software is provided under this License on an "as is"       *
-  *  basis, without warranty of any kind, either expressed, implied, or  *
-  *  statutory, including, without limitation, warranties that the       *
-  *  Covered Software is free of defects, merchantable, fit for a        *
-  *  particular purpose or non-infringing. The entire risk as to the     *
-  *  quality and performance of the Covered Software is with You.        *
-  *  Should any Covered Software prove defective in any respect, You     *
-  *  (not any Contributor) assume the cost of any necessary servicing,   *
-  *  repair, or correction. This disclaimer of warranty constitutes an   *
-  *  essential part of this License. No use of any Covered Software is   *
-  *  authorized under this License except under this disclaimer.         *
-  *                                                                      *
-  ************************************************************************
-
-  ************************************************************************
-  *                                                                      *
-  *  7. Limitation of Liability                                          *
-  *  --------------------------                                          *
-  *                                                                      *
-  *  Under no circumstances and under no legal theory, whether tort      *
-  *  (including negligence), contract, or otherwise, shall any           *
-  *  Contributor, or anyone who distributes Covered Software as          *
-  *  permitted above, be liable to You for any direct, indirect,         *
-  *  special, incidental, or consequential damages of any character      *
-  *  including, without limitation, damages for lost profits, loss of    *
-  *  goodwill, work stoppage, computer failure or malfunction, or any    *
-  *  and all other commercial damages or losses, even if such party      *
-  *  shall have been informed of the possibility of such damages. This   *
-  *  limitation of liability shall not apply to liability for death or   *
-  *  personal injury resulting from such party's negligence to the       *
-  *  extent applicable law prohibits such limitation. Some               *
-  *  jurisdictions do not allow the exclusion or limitation of           *
-  *  incidental or consequential damages, so this exclusion and          *
-  *  limitation may not apply to You.                                    *
-  *                                                                      *
-  ************************************************************************
-
-  8. Litigation
-  -------------
-
-  Any litigation relating to this License may be brought only in the
-  courts of a jurisdiction where the defendant maintains its principal
-  place of business and such litigation shall be governed by laws of that
-  jurisdiction, without reference to its conflict-of-law provisions.
-  Nothing in this Section shall prevent a party's ability to bring
-  cross-claims or counter-claims.
-
-  9. Miscellaneous
-  ----------------
-
-  This License represents the complete agreement concerning the subject
-  matter hereof. If any provision of this License is held to be
-  unenforceable, such provision shall be reformed only to the extent
-  necessary to make it enforceable. Any law or regulation which provides
-  that the language of a contract shall be construed against the drafter
-  shall not be used to construe this License against a Contributor.
-
-  10. Versions of the License
-  ---------------------------
-
-  10.1. New Versions
-
-  Mozilla Foundation is the license steward. Except as provided in Section
-  10.3, no one other than the license steward has the right to modify or
-  publish new versions of this License. Each version will be given a
-  distinguishing version number.
-
-  10.2. Effect of New Versions
-
-  You may distribute the Covered Software under the terms of the version
-  of the License under which You originally received the Covered Software,
-  or under the terms of any subsequent version published by the license
-  steward.
-
-  10.3. Modified Versions
-
-  If you create software not governed by this License, and you want to
-  create a new license for such software, you may create and use a
-  modified version of this License if you rename the license and remove
-  any references to the name of the license steward (except to note that
-  such modified license differs from this License).
-
-  10.4. Distributing Source Code Form that is Incompatible With Secondary
-  Licenses
-
-  If You choose to distribute Source Code Form that is Incompatible With
-  Secondary Licenses under the terms of this version of the License, the
-  notice described in Exhibit B of this License must be attached.
-
-  Exhibit A - Source Code Form License Notice
-  -------------------------------------------
-
-    This Source Code Form is subject to the terms of the Mozilla Public
-    License, v. 2.0. If a copy of the MPL was not distributed with this
-    file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-  If it is not possible or desirable to put the notice in a particular
-  file, then You may include the notice in a location (such as a LICENSE
-  file in a relevant directory) where a recipient would be likely to look
-  for such a notice.
-
-  You may add additional accurate notices of copyright ownership.
-
-  Exhibit B - "Incompatible With Secondary Licenses" Notice
-  ---------------------------------------------------------
-
-    This Source Code Form is "Incompatible With Secondary Licenses", as
-    defined by the Mozilla Public License, v. 2.0.
-
-
-
-  mozilla_security_manager
-
-                             MOZILLA PUBLIC LICENSE
-                                Version 1.1
-
-                              ---------------
-
-  1. Definitions.
-
-     1.0.1. "Commercial Use" means distribution or otherwise making the
-     Covered Code available to a third party.
-
-     1.1. "Contributor" means each entity that creates or contributes to
-     the creation of Modifications.
-
-     1.2. "Contributor Version" means the combination of the Original
-     Code, prior Modifications used by a Contributor, and the Modifications
-     made by that particular Contributor.
-
-     1.3. "Covered Code" means the Original Code or Modifications or the
-     combination of the Original Code and Modifications, in each case
-     including portions thereof.
-
-     1.4. "Electronic Distribution Mechanism" means a mechanism generally
-     accepted in the software development community for the electronic
-     transfer of data.
-
-     1.5. "Executable" means Covered Code in any form other than Source
-     Code.
-
-     1.6. "Initial Developer" means the individual or entity identified
-     as the Initial Developer in the Source Code notice required by Exhibit
-     A.
-
-     1.7. "Larger Work" means a work which combines Covered Code or
-     portions thereof with code not governed by the terms of this License.
-
-     1.8. "License" means this document.
-
-     1.8.1. "Licensable" means having the right to grant, to the maximum
-     extent possible, whether at the time of the initial grant or
-     subsequently acquired, any and all of the rights conveyed herein.
-
-     1.9. "Modifications" means any addition to or deletion from the
-     substance or structure of either the Original Code or any previous
-     Modifications. When Covered Code is released as a series of files, a
-     Modification is:
-          A. Any addition to or deletion from the contents of a file
-          containing Original Code or previous Modifications.
-
-          B. Any new file that contains any part of the Original Code or
-          previous Modifications.
-
-     1.10. "Original Code" means Source Code of computer software code
-     which is described in the Source Code notice required by Exhibit A as
-     Original Code, and which, at the time of its release under this
-     License is not already Covered Code governed by this License.
-
-     1.10.1. "Patent Claims" means any patent claim(s), now owned or
-     hereafter acquired, including without limitation,  method, process,
-     and apparatus claims, in any patent Licensable by grantor.
-
-     1.11. "Source Code" means the preferred form of the Covered Code for
-     making modifications to it, including all modules it contains, plus
-     any associated interface definition files, scripts used to control
-     compilation and installation of an Executable, or source code
-     differential comparisons against either the Original Code or another
-     well known, available Covered Code of the Contributor's choice. The
-     Source Code can be in a compressed or archival form, provided the
-     appropriate decompression or de-archiving software is widely available
-     for no charge.
-
-     1.12. "You" (or "Your")  means an individual or a legal entity
-     exercising rights under, and complying with all of the terms of, this
-     License or a future version of this License issued under Section 6.1.
-     For legal entities, "You" includes any entity which controls, is
-     controlled by, or is under common control with You. For purposes of
-     this definition, "control" means (a) the power, direct or indirect,
-     to cause the direction or management of such entity, whether by
-     contract or otherwise, or (b) ownership of more than fifty percent
-     (50%) of the outstanding shares or beneficial ownership of such
-     entity.
-
-  2. Source Code License.
-
-     2.1. The Initial Developer Grant.
-     The Initial Developer hereby grants You a world-wide, royalty-free,
-     non-exclusive license, subject to third party intellectual property
-     claims:
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Initial Developer to use, reproduce,
-          modify, display, perform, sublicense and distribute the Original
-          Code (or portions thereof) with or without Modifications, and/or
-          as part of a Larger Work; and
-
-          (b) under Patents Claims infringed by the making, using or
-          selling of Original Code, to make, have made, use, practice,
-          sell, and offer for sale, and/or otherwise dispose of the
-          Original Code (or portions thereof).
-
-          (c) the licenses granted in this Section 2.1(a) and (b) are
-          effective on the date Initial Developer first distributes
-          Original Code under the terms of this License.
-
-          (d) Notwithstanding Section 2.1(b) above, no patent license is
-          granted: 1) for code that You delete from the Original Code; 2)
-          separate from the Original Code;  or 3) for infringements caused
-          by: i) the modification of the Original Code or ii) the
-          combination of the Original Code with other software or devices.
-
-     2.2. Contributor Grant.
-     Subject to third party intellectual property claims, each Contributor
-     hereby grants You a world-wide, royalty-free, non-exclusive license
-
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Contributor, to use, reproduce, modify,
-          display, perform, sublicense and distribute the Modifications
-          created by such Contributor (or portions thereof) either on an
-          unmodified basis, with other Modifications, as Covered Code
-          and/or as part of a Larger Work; and
-
-          (b) under Patent Claims infringed by the making, using, or
-          selling of  Modifications made by that Contributor either alone
-          and/or in combination with its Contributor Version (or portions
-          of such combination), to make, use, sell, offer for sale, have
-          made, and/or otherwise dispose of: 1) Modifications made by that
-          Contributor (or portions thereof); and 2) the combination of
-          Modifications made by that Contributor with its Contributor
-          Version (or portions of such combination).
-
-          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
-          effective on the date Contributor first makes Commercial Use of
-          the Covered Code.
-
-          (d)    Notwithstanding Section 2.2(b) above, no patent license is
-          granted: 1) for any code that Contributor has deleted from the
-          Contributor Version; 2)  separate from the Contributor Version;
-          3)  for infringements caused by: i) third party modifications of
-          Contributor Version or ii)  the combination of Modifications made
-          by that Contributor with other software  (except as part of the
-          Contributor Version) or other devices; or 4) under Patent Claims
-          infringed by Covered Code in the absence of Modifications made by
-          that Contributor.
-
-  3. Distribution Obligations.
-
-     3.1. Application of License.
-     The Modifications which You create or to which You contribute are
-     governed by the terms of this License, including without limitation
-     Section 2.2. The Source Code version of Covered Code may be
-     distributed only under the terms of this License or a future version
-     of this License released under Section 6.1, and You must include a
-     copy of this License with every copy of the Source Code You
-     distribute. You may not offer or impose any terms on any Source Code
-     version that alters or restricts the applicable version of this
-     License or the recipients' rights hereunder. However, You may include
-     an additional document offering the additional rights described in
-     Section 3.5.
-
-     3.2. Availability of Source Code.
-     Any Modification which You create or to which You contribute must be
-     made available in Source Code form under the terms of this License
-     either on the same media as an Executable version or via an accepted
-     Electronic Distribution Mechanism to anyone to whom you made an
-     Executable version available; and if made available via Electronic
-     Distribution Mechanism, must remain available for at least twelve (12)
-     months after the date it initially became available, or at least six
-     (6) months after a subsequent version of that particular Modification
-     has been made available to such recipients. You are responsible for
-     ensuring that the Source Code version remains available even if the
-     Electronic Distribution Mechanism is maintained by a third party.
-
-     3.3. Description of Modifications.
-     You must cause all Covered Code to which You contribute to contain a
-     file documenting the changes You made to create that Covered Code and
-     the date of any change. You must include a prominent statement that
-     the Modification is derived, directly or indirectly, from Original
-     Code provided by the Initial Developer and including the name of the
-     Initial Developer in (a) the Source Code, and (b) in any notice in an
-     Executable version or related documentation in which You describe the
-     origin or ownership of the Covered Code.
-
-     3.4. Intellectual Property Matters
-          (a) Third Party Claims.
-          If Contributor has knowledge that a license under a third party's
-          intellectual property rights is required to exercise the rights
-          granted by such Contributor under Sections 2.1 or 2.2,
-          Contributor must include a text file with the Source Code
-          distribution titled "LEGAL" which describes the claim and the
-          party making the claim in sufficient detail that a recipient will
-          know whom to contact. If Contributor obtains such knowledge after
-          the Modification is made available as described in Section 3.2,
-          Contributor shall promptly modify the LEGAL file in all copies
-          Contributor makes available thereafter and shall take other steps
-          (such as notifying appropriate mailing lists or newsgroups)
-          reasonably calculated to inform those who received the Covered
-          Code that new knowledge has been obtained.
-
-          (b) Contributor APIs.
-          If Contributor's Modifications include an application programming
-          interface and Contributor has knowledge of patent licenses which
-          are reasonably necessary to implement that API, Contributor must
-          also include this information in the LEGAL file.
-
-               (c)    Representations.
-          Contributor represents that, except as disclosed pursuant to
-          Section 3.4(a) above, Contributor believes that Contributor's
-          Modifications are Contributor's original creation(s) and/or
-          Contributor has sufficient rights to grant the rights conveyed by
-          this License.
-
-     3.5. Required Notices.
-     You must duplicate the notice in Exhibit A in each file of the Source
-     Code.  If it is not possible to put such notice in a particular Source
-     Code file due to its structure, then You must include such notice in a
-     location (such as a relevant directory) where a user would be likely
-     to look for such a notice.  If You created one or more Modification(s)
-     You may add your name as a Contributor to the notice described in
-     Exhibit A.  You must also duplicate this License in any documentation
-     for the Source Code where You describe recipients' rights or ownership
-     rights relating to Covered Code.  You may choose to offer, and to
-     charge a fee for, warranty, support, indemnity or liability
-     obligations to one or more recipients of Covered Code. However, You
-     may do so only on Your own behalf, and not on behalf of the Initial
-     Developer or any Contributor. You must make it absolutely clear than
-     any such warranty, support, indemnity or liability obligation is
-     offered by You alone, and You hereby agree to indemnify the Initial
-     Developer and every Contributor for any liability incurred by the
-     Initial Developer or such Contributor as a result of warranty,
-     support, indemnity or liability terms You offer.
-
-     3.6. Distribution of Executable Versions.
-     You may distribute Covered Code in Executable form only if the
-     requirements of Section 3.1-3.5 have been met for that Covered Code,
-     and if You include a notice stating that the Source Code version of
-     the Covered Code is available under the terms of this License,
-     including a description of how and where You have fulfilled the
-     obligations of Section 3.2. The notice must be conspicuously included
-     in any notice in an Executable version, related documentation or
-     collateral in which You describe recipients' rights relating to the
-     Covered Code. You may distribute the Executable version of Covered
-     Code or ownership rights under a license of Your choice, which may
-     contain terms different from this License, provided that You are in
-     compliance with the terms of this License and that the license for the
-     Executable version does not attempt to limit or alter the recipient's
-     rights in the Source Code version from the rights set forth in this
-     License. If You distribute the Executable version under a different
-     license You must make it absolutely clear that any terms which differ
-     from this License are offered by You alone, not by the Initial
-     Developer or any Contributor. You hereby agree to indemnify the
-     Initial Developer and every Contributor for any liability incurred by
-     the Initial Developer or such Contributor as a result of any such
-     terms You offer.
-
-     3.7. Larger Works.
-     You may create a Larger Work by combining Covered Code with other code
-     not governed by the terms of this License and distribute the Larger
-     Work as a single product. In such a case, You must make sure the
-     requirements of this License are fulfilled for the Covered Code.
-
-  4. Inability to Comply Due to Statute or Regulation.
-
-     If it is impossible for You to comply with any of the terms of this
-     License with respect to some or all of the Covered Code due to
-     statute, judicial order, or regulation then You must: (a) comply with
-     the terms of this License to the maximum extent possible; and (b)
-     describe the limitations and the code they affect. Such description
-     must be included in the LEGAL file described in Section 3.4 and must
-     be included with all distributions of the Source Code. Except to the
-     extent prohibited by statute or regulation, such description must be
-     sufficiently detailed for a recipient of ordinary skill to be able to
-     understand it.
-
-  5. Application of this License.
-
-     This License applies to code to which the Initial Developer has
-     attached the notice in Exhibit A and to related Covered Code.
-
-  6. Versions of the License.
-
-     6.1. New Versions.
-     Netscape Communications Corporation ("Netscape") may publish revised
-     and/or new versions of the License from time to time. Each version
-     will be given a distinguishing version number.
-
-     6.2. Effect of New Versions.
-     Once Covered Code has been published under a particular version of the
-     License, You may always continue to use it under the terms of that
-     version. You may also choose to use such Covered Code under the terms
-     of any subsequent version of the License published by Netscape. No one
-     other than Netscape has the right to modify the terms applicable to
-     Covered Code created under this License.
-
-     6.3. Derivative Works.
-     If You create or use a modified version of this License (which you may
-     only do in order to apply it to code which is not already Covered Code
-     governed by this License), You must (a) rename Your license so that
-     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
-     "MPL", "NPL" or any confusingly similar phrase do not appear in your
-     license (except to note that your license differs from this License)
-     and (b) otherwise make it clear that Your version of the license
-     contains terms which differ from the Mozilla Public License and
-     Netscape Public License. (Filling in the name of the Initial
-     Developer, Original Code or Contributor in the notice described in
-     Exhibit A shall not of themselves be deemed to be modifications of
-     this License.)
-
-  7. DISCLAIMER OF WARRANTY.
-
-     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
-     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
-     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
-     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
-     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
-     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
-     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
-     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
-     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
-     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-  8. TERMINATION.
-
-     8.1.  This License and the rights granted hereunder will terminate
-     automatically if You fail to comply with terms herein and fail to cure
-     such breach within 30 days of becoming aware of the breach. All
-     sublicenses to the Covered Code which are properly granted shall
-     survive any termination of this License. Provisions which, by their
-     nature, must remain in effect beyond the termination of this License
-     shall survive.
-
-     8.2.  If You initiate litigation by asserting a patent infringement
-     claim (excluding declatory judgment actions) against Initial Developer
-     or a Contributor (the Initial Developer or Contributor against whom
-     You file such action is referred to as "Participant")  alleging that:
-
-     (a)  such Participant's Contributor Version directly or indirectly
-     infringes any patent, then any and all rights granted by such
-     Participant to You under Sections 2.1 and/or 2.2 of this License
-     shall, upon 60 days notice from Participant terminate prospectively,
-     unless if within 60 days after receipt of notice You either: (i)
-     agree in writing to pay Participant a mutually agreeable reasonable
-     royalty for Your past and future use of Modifications made by such
-     Participant, or (ii) withdraw Your litigation claim with respect to
-     the Contributor Version against such Participant.  If within 60 days
-     of notice, a reasonable royalty and payment arrangement are not
-     mutually agreed upon in writing by the parties or the litigation claim
-     is not withdrawn, the rights granted by Participant to You under
-     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
-     the 60 day notice period specified above.
-
-     (b)  any software, hardware, or device, other than such Participant's
-     Contributor Version, directly or indirectly infringes any patent, then
-     any rights granted to You by such Participant under Sections 2.1(b)
-     and 2.2(b) are revoked effective as of the date You first made, used,
-     sold, distributed, or had made, Modifications made by that
-     Participant.
-
-     8.3.  If You assert a patent infringement claim against Participant
-     alleging that such Participant's Contributor Version directly or
-     indirectly infringes any patent where such claim is resolved (such as
-     by license or settlement) prior to the initiation of patent
-     infringement litigation, then the reasonable value of the licenses
-     granted by such Participant under Sections 2.1 or 2.2 shall be taken
-     into account in determining the amount or value of any payment or
-     license.
-
-     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
-     all end user license agreements (excluding distributors and resellers)
-     which have been validly granted by You or any distributor hereunder
-     prior to termination shall survive termination.
-
-  9. LIMITATION OF LIABILITY.
-
-     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
-     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
-     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
-     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
-     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
-     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
-     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
-     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
-     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
-     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
-     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
-     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
-     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-  10. U.S. GOVERNMENT END USERS.
-
-     The Covered Code is a "commercial item," as that term is defined in
-     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
-     software" and "commercial computer software documentation," as such
-     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
-     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
-     all U.S. Government End Users acquire Covered Code with only those
-     rights set forth herein.
-
-  11. MISCELLANEOUS.
-
-     This License represents the complete agreement concerning subject
-     matter hereof. If any provision of this License is held to be
-     unenforceable, such provision shall be reformed only to the extent
-     necessary to make it enforceable. This License shall be governed by
-     California law provisions (except to the extent applicable law, if
-     any, provides otherwise), excluding its conflict-of-law provisions.
-     With respect to disputes in which at least one party is a citizen of,
-     or an entity chartered or registered to do business in the United
-     States of America, any litigation relating to this License shall be
-     subject to the jurisdiction of the Federal Courts of the Northern
-     District of California, with venue lying in Santa Clara County,
-     California, with the losing party responsible for costs, including
-     without limitation, court costs and reasonable attorneys' fees and
-     expenses. The application of the United Nations Convention on
-     Contracts for the International Sale of Goods is expressly excluded.
-     Any law or regulation which provides that the language of a contract
-     shall be construed against the drafter shall not apply to this
-     License.
-
-  12. RESPONSIBILITY FOR CLAIMS.
-
-     As between Initial Developer and the Contributors, each party is
-     responsible for claims and damages arising, directly or indirectly,
-     out of its utilization of rights under this License and You agree to
-     work with Initial Developer and Contributors to distribute such
-     responsibility on an equitable basis. Nothing herein is intended or
-     shall be deemed to constitute any admission of liability.
-
-  13. MULTIPLE-LICENSED CODE.
-
-     Initial Developer may designate portions of the Covered Code as
-     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
-     Developer permits you to utilize portions of the Covered Code under
-     Your choice of the NPL or the alternative licenses, if any, specified
-     by the Initial Developer in the file described in Exhibit A.
-
-  EXHIBIT A -Mozilla Public License.
-
-   The contents of this file are subject to the Mozilla Public License Version
-   1.1 (the "License"); you may not use this file except in compliance with
-   the License. You may obtain a copy of the License at
-   http://www.mozilla.org/MPL/
-
-   Software distributed under the License is distributed on an "AS IS" basis,
-   WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-   for the specific language governing rights and limitations under the
-   License.
-
-   The Original Code is mozilla.org code.
-
-   The Initial Developer of the Original Code is
-   Netscape Communications Corporation.
-   Portions created by the Initial Developer are Copyright (C) 2001
-   the Initial Developer. All Rights Reserved.
-
-   Contributor(s):
-
-   Alternatively, the contents of this file may be used under the terms of
-   either the GNU General Public License Version 2 or later (the "GPL"), or
-   the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-   in which case the provisions of the GPL or the LGPL are applicable instead
-   of those above. If you wish to allow use of your version of this file only
-   under the terms of either the GPL or the LGPL, and not to allow others to
-   use your version of this file under the terms of the MPL, indicate your
-   decision by deleting the provisions above and replace them with the notice
-   and other provisions required by the GPL or the LGPL. If you do not delete
-   the provisions above, a recipient may use your version of this file under
-   the terms of any one of the MPL, the GPL or the LGPL.
-
-
   mozilla(url/third_party/mozilla)
 
 
@@ -3181,6 +2302,115 @@
 
 
 
+  libjpeg-turbo
+
+  libjpeg-turbo Licenses libjpeg-turbo is covered by three compatible BSD-style
+  open source licenses:
+
+  The IJG (Independent JPEG Group) License, which is listed in README.ijg
+
+  This license applies to the libjpeg API library and associated programs (any
+  code inherited from libjpeg, and any modifications to that code.)
+
+  The Modified (3-clause) BSD License, which is listed below
+
+  This license covers the TurboJPEG API library and associated programs, as well
+  as the build system.
+
+  The zlib License
+
+  This license is a subset of the other two, and it covers the libjpeg-turbo
+  SIMD extensions.
+
+  Complying with the libjpeg-turbo Licenses This section provides a roll-up of
+  the libjpeg-turbo licensing terms, to the best of our understanding.
+
+  If you are distributing a modified version of the libjpeg-turbo source, then:
+
+  You cannot alter or remove any existing copyright or license notices from the
+  source.
+
+  Origin
+
+  Clause 1 of the IJG License Clause 1 of the Modified BSD License Clauses 1 and
+  3 of the zlib License You must add your own copyright notice to the header of
+  each source file you modified, so others can tell that you modified that file
+  (if there is not an existing copyright header in that file, then you can
+  simply add a notice stating that you modified the file.)
+
+  Origin
+
+  Clause 1 of the IJG License Clause 2 of the zlib License You must include the
+  IJG README file, and you must not alter any of the copyright or license text
+  in that file.
+
+  Origin
+
+  Clause 1 of the IJG License If you are distributing only libjpeg-turbo
+  binaries without the source, or if you are distributing an application that
+  statically links with libjpeg-turbo, then:
+
+  Your product documentation must include a message stating:
+
+  This software is based in part on the work of the Independent JPEG Group.
+
+  Origin
+
+  Clause 2 of the IJG license If your binary distribution includes or uses the
+  TurboJPEG API, then your product documentation must include the text of the
+  Modified BSD License (see below.)
+
+  Origin
+
+  Clause 2 of the Modified BSD License You cannot use the name of the IJG or The
+  libjpeg-turbo Project or the contributors thereof in advertising, publicity,
+  etc.
+
+  Origin
+
+  IJG License Clause 3 of the Modified BSD License The IJG and The libjpeg-turbo
+  Project do not warrant libjpeg-turbo to be free of defects, nor do we accept
+  any liability for undesirable consequences resulting from your use of the
+  software.
+
+  Origin
+
+  IJG License Modified BSD License zlib License The Modified (3-clause) BSD
+  License Copyright (C)2009-2021 D. R. Commander. All Rights Reserved.
+  Copyright (C)2015 Viktor Szathmáry. All Rights Reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+  Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.  Redistributions in binary
+  form must reproduce the above copyright notice, this list of conditions and
+  the following disclaimer in the documentation and/or other materials provided
+  with the distribution.  Neither the name of the libjpeg-turbo Project nor the
+  names of its contributors may be used to endorse or promote products derived
+  from this software without specific prior written permission.  THIS SOFTWARE
+  IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", AND ANY EXPRESS
+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+  EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+  OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+  Why Three Licenses?  The zlib License could have been used instead of the
+  Modified (3-clause) BSD License, and since the IJG License effectively
+  subsumes the distribution conditions of the zlib License, this would have
+  effectively placed libjpeg-turbo binary distributions under the IJG License.
+  However, the IJG License specifically refers to the Independent JPEG Group and
+  does not extend attribution and endorsement protections to other entities.
+  Thus, it was desirable to choose a license that granted us the same
+  protections for new code that were granted to the IJG for code derived from
+  their software.
+
+
   libpng
 
 
@@ -3997,6 +3227,41 @@
   POSSIBILITY OF SUCH DAMAGE.
 
 
+
+  flac
+
+
+  Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+
+  - Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+
+  - Redistributions in binary form must reproduce the above copyright
+  notice, this list of conditions and the following disclaimer in the
+  documentation and/or other materials provided with the distribution.
+
+  - Neither the name of the Xiph.org Foundation nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
+  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
   angle
 
 
@@ -5003,6 +4268,36 @@
   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
+
+  lz4_lib
+
+
+  LZ4 Library
+  Copyright (c) 2011-2016, Yann Collet
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without modification,
+  are permitted provided that the following conditions are met:
+
+  * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above copyright notice, this
+    list of conditions and the following disclaimer in the documentation and/or
+    other materials provided with the distribution.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
   libwebp
 
   Copyright (c) 2010, Google Inc. All rights reserved.  Redistribution and use
diff --git a/cobalt/content/licenses/platform/darwin/licenses_cobalt.txt b/cobalt/content/licenses/platform/darwin/licenses_cobalt.txt
new file mode 100644
index 0000000..d80e0a5
--- /dev/null
+++ b/cobalt/content/licenses/platform/darwin/licenses_cobalt.txt
@@ -0,0 +1,4343 @@
+Where applicable, source code for modified versions of the libraries below is available at:
+https://cobalt.googlesource.com/cobalt.
+
+
+
+  Cobalt
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+   1. Definitions.
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+   END OF TERMS AND CONDITIONS
+   APPENDIX: How to apply the Apache License to your work.
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+   Copyright [yyyy] [name of copyright owner]
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+  Chromium
+
+  // Copyright 2015 The Chromium Authors. All rights reserved.
+  //
+  // Redistribution and use in source and binary forms, with or without
+  // modification, are permitted provided that the following conditions are
+  // met:
+  //
+  //    * Redistributions of source code must retain the above copyright
+  // notice, this list of conditions and the following disclaimer.
+  //    * Redistributions in binary form must reproduce the above
+  // copyright notice, this list of conditions and the following disclaimer
+  // in the documentation and/or other materials provided with the
+  // distribution.
+  //    * Neither the name of Google Inc. nor the names of its
+  // contributors may be used to endorse or promote products derived from
+  // this software without specific prior written permission.
+  //
+  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  V8
+
+  This license applies to all parts of V8 that are not externally
+  maintained libraries.  The externally maintained libraries used by V8
+  are:
+
+    - PCRE test suite, located in
+      test/mjsunit/third_party/regexp-pcre/regexp-pcre.js.  This is based on the
+      test suite from PCRE-7.3, which is copyrighted by the University
+      of Cambridge and Google, Inc.  The copyright notice and license
+      are embedded in regexp-pcre.js.
+
+    - Layout tests, located in test/mjsunit/third_party/object-keys.  These are
+      based on layout tests from webkit.org which are copyrighted by
+      Apple Computer, Inc. and released under a 3-clause BSD license.
+
+    - Strongtalk assembler, the basis of the files assembler-arm-inl.h,
+      assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h,
+      assembler-ia32.cc, assembler-ia32.h, assembler-x64-inl.h,
+      assembler-x64.cc, assembler-x64.h, assembler-mips-inl.h,
+      assembler-mips.cc, assembler-mips.h, assembler.cc and assembler.h.
+      This code is copyrighted by Sun Microsystems Inc. and released
+      under a 3-clause BSD license.
+
+    - Valgrind client API header, located at src/third_party/valgrind/valgrind.h
+      This is released under the BSD license.
+
+    - The Wasm C/C++ API headers, located at third_party/wasm-api/wasm.{h,hh}
+      This is released under the Apache license. The API's upstream prototype
+      implementation also formed the basis of V8's implementation in
+      src/wasm/c-api.cc.
+
+  These libraries have their own licenses; we recommend you read them,
+  as their terms may differ from the terms below.
+
+  Further license information can be found in LICENSE files located in
+  sub-directories.
+
+  Copyright 2014, the V8 project authors. All rights reserved.
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+      * Neither the name of Google Inc. nor the names of its
+        contributors may be used to endorse or promote products derived
+        from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  devtools
+
+
+  // Copyright 2014 The Chromium Authors. All rights reserved.
+  //
+  // Redistribution and use in source and binary forms, with or without
+  // modification, are permitted provided that the following conditions are
+  // met:
+  //
+  //    * Redistributions of source code must retain the above copyright
+  // notice, this list of conditions and the following disclaimer.
+  //    * Redistributions in binary form must reproduce the above
+  // copyright notice, this list of conditions and the following disclaimer
+  // in the documentation and/or other materials provided with the
+  // distribution.
+  //    * Neither the name of Google Inc. nor the names of its
+  // contributors may be used to endorse or promote products derived from
+  // this software without specific prior written permission.
+  //
+  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+  boringssl
+
+
+  BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL
+  licensing. Files that are completely new have a Google copyright and an ISC
+  license. This license is reproduced at the bottom of this file.
+
+  Contributors to BoringSSL are required to follow the CLA rules for Chromium:
+  https://cla.developers.google.com/clas
+
+  Files in third_party/ have their own licenses, as described therein. The MIT
+  license, for third_party/fiat, which, unlike other third_party directories, is
+  compiled into non-test libraries, is included below.
+
+  The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
+  OpenSSL License and the original SSLeay license apply to the toolkit. See below
+  for the actual license texts. Actually both licenses are BSD-style Open Source
+  licenses. In case of any license issues related to OpenSSL please contact
+  openssl-core@openssl.org.
+
+  The following are Google-internal bug numbers where explicit permission from
+  some authors is recorded for use of their work. (This is purely for our own
+  record keeping.)
+    27287199
+    27287880
+    27287883
+
+    OpenSSL License
+    ---------------
+
+  /* ====================================================================
+   * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
+   *
+   * Redistribution and use in source and binary forms, with or without
+   * modification, are permitted provided that the following conditions
+   * are met:
+   *
+   * 1. Redistributions of source code must retain the above copyright
+   *    notice, this list of conditions and the following disclaimer.
+   *
+   * 2. Redistributions in binary form must reproduce the above copyright
+   *    notice, this list of conditions and the following disclaimer in
+   *    the documentation and/or other materials provided with the
+   *    distribution.
+   *
+   * 3. All advertising materials mentioning features or use of this
+   *    software must display the following acknowledgment:
+   *    "This product includes software developed by the OpenSSL Project
+   *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+   *
+   * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+   *    endorse or promote products derived from this software without
+   *    prior written permission. For written permission, please contact
+   *    openssl-core@openssl.org.
+   *
+   * 5. Products derived from this software may not be called "OpenSSL"
+   *    nor may "OpenSSL" appear in their names without prior written
+   *    permission of the OpenSSL Project.
+   *
+   * 6. Redistributions of any form whatsoever must retain the following
+   *    acknowledgment:
+   *    "This product includes software developed by the OpenSSL Project
+   *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+   *
+   * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
+   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+   * OF THE POSSIBILITY OF SUCH DAMAGE.
+   * ====================================================================
+   *
+   * This product includes cryptographic software written by Eric Young
+   * (eay@cryptsoft.com).  This product includes software written by Tim
+   * Hudson (tjh@cryptsoft.com).
+   *
+   */
+
+   Original SSLeay License
+   -----------------------
+
+  /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+   * All rights reserved.
+   *
+   * This package is an SSL implementation written
+   * by Eric Young (eay@cryptsoft.com).
+   * The implementation was written so as to conform with Netscapes SSL.
+   *
+   * This library is free for commercial and non-commercial use as long as
+   * the following conditions are aheared to.  The following conditions
+   * apply to all code found in this distribution, be it the RC4, RSA,
+   * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+   * included with this distribution is covered by the same copyright terms
+   * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+   *
+   * Copyright remains Eric Young's, and as such any Copyright notices in
+   * the code are not to be removed.
+   * If this package is used in a product, Eric Young should be given attribution
+   * as the author of the parts of the library used.
+   * This can be in the form of a textual message at program startup or
+   * in documentation (online or textual) provided with the package.
+   *
+   * Redistribution and use in source and binary forms, with or without
+   * modification, are permitted provided that the following conditions
+   * are met:
+   * 1. Redistributions of source code must retain the copyright
+   *    notice, this list of conditions and the following disclaimer.
+   * 2. Redistributions in binary form must reproduce the above copyright
+   *    notice, this list of conditions and the following disclaimer in the
+   *    documentation and/or other materials provided with the distribution.
+   * 3. All advertising materials mentioning features or use of this software
+   *    must display the following acknowledgement:
+   *    "This product includes cryptographic software written by
+   *     Eric Young (eay@cryptsoft.com)"
+   *    The word 'cryptographic' can be left out if the rouines from the library
+   *    being used are not cryptographic related :-).
+   * 4. If you include any Windows specific code (or a derivative thereof) from
+   *    the apps directory (application code) you must include an acknowledgement:
+   *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+   *
+   * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+   * SUCH DAMAGE.
+   *
+   * The licence and distribution terms for any publically available version or
+   * derivative of this code cannot be changed.  i.e. this code cannot simply be
+   * copied and put under another distribution licence
+   * [including the GNU Public Licence.]
+   */
+
+
+  ISC license used for completely new code in BoringSSL:
+
+  /* Copyright (c) 2015, Google Inc.
+   *
+   * Permission to use, copy, modify, and/or distribute this software for any
+   * purpose with or without fee is hereby granted, provided that the above
+   * copyright notice and this permission notice appear in all copies.
+   *
+   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+   * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+   * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+
+  The code in third_party/fiat carries the MIT license:
+
+  Copyright (c) 2015-2016 the fiat-crypto authors (see
+  https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS).
+
+  Permission is hereby granted, free of charge, to any person obtaining a copy
+  of this software and associated documentation files (the "Software"), to deal
+  in the Software without restriction, including without limitation the rights
+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+  copies of the Software, and to permit persons to whom the Software is
+  furnished to do so, subject to the following conditions:
+
+  The above copyright notice and this permission notice shall be included in all
+  copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+  SOFTWARE.
+
+
+  Licenses for support code
+  -------------------------
+
+  Parts of the TLS test suite are under the Go license. This code is not included
+  in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so
+  distributing code linked against BoringSSL does not trigger this license:
+
+  Copyright (c) 2009 The Go Authors. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+     * Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+     * Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the following disclaimer
+  in the documentation and/or other materials provided with the
+  distribution.
+     * Neither the name of Google Inc. nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+  BoringSSL uses the Chromium test infrastructure to run a continuous build,
+  trybots etc. The scripts which manage this, and the script for generating build
+  metadata, are under the Chromium license. Distributing code linked against
+  BoringSSL does not trigger this license.
+
+  Copyright 2015 The Chromium Authors. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+     * Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+     * Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the following disclaimer
+  in the documentation and/or other materials provided with the
+  distribution.
+     * Neither the name of Google Inc. nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  dmg_fp
+
+
+  /****************************************************************
+   *
+   * The author of this software is David M. Gay.
+   *
+   * Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
+   *
+   * Permission to use, copy, modify, and distribute this software for any
+   * purpose without fee is hereby granted, provided that this entire notice
+   * is included in all copies of any software which is or includes a copy
+   * or modification of this software and in all copies of the supporting
+   * documentation for such software.
+   *
+   * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+   * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
+   * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+   * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+   *
+   ***************************************************************/
+
+
+
+  dynamic_annotations
+
+
+  /* Copyright (c) 2008-2009, Google Inc.
+   * All rights reserved.
+   *
+   * Redistribution and use in source and binary forms, with or without
+   * modification, are permitted provided that the following conditions are
+   * met:
+   *
+   *     * Redistributions of source code must retain the above copyright
+   * notice, this list of conditions and the following disclaimer.
+   *     * Neither the name of Google Inc. nor the names of its
+   * contributors may be used to endorse or promote products derived from
+   * this software without specific prior written permission.
+   *
+   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   *
+   * ---
+   * Author: Kostya Serebryany
+   */
+
+
+
+  icu(base/third_party/icu)
+
+
+  COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)
+
+  Copyright © 1991-2017 Unicode, Inc. All rights reserved.
+  Distributed under the Terms of Use in http://www.unicode.org/copyright.html
+
+  Permission is hereby granted, free of charge, to any person obtaining
+  a copy of the Unicode data files and any associated documentation
+  (the "Data Files") or Unicode software and any associated documentation
+  (the "Software") to deal in the Data Files or Software
+  without restriction, including without limitation the rights to use,
+  copy, modify, merge, publish, distribute, and/or sell copies of
+  the Data Files or Software, and to permit persons to whom the Data Files
+  or Software are furnished to do so, provided that either
+  (a) this copyright and permission notice appear with all copies
+  of the Data Files or Software, or
+  (b) this copyright and permission notice appear in associated
+  Documentation.
+
+  THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+  ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+  WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+  NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+  NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+  DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+  DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+  TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+  PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+  Except as contained in this notice, the name of a copyright holder
+  shall not be used in advertising or otherwise to promote the sale,
+  use or other dealings in these Data Files or Software without prior
+  written authorization of the copyright holder.
+
+  ---------------------
+
+  Third-Party Software Licenses
+
+  This section contains third-party software notices and/or additional
+  terms for licensed third-party software components included within ICU
+  libraries.
+
+  1. ICU License - ICU 1.8.1 to ICU 57.1
+
+  COPYRIGHT AND PERMISSION NOTICE
+
+  Copyright (c) 1995-2016 International Business Machines Corporation and others
+  All rights reserved.
+
+  Permission is hereby granted, free of charge, to any person obtaining
+  a copy of this software and associated documentation files (the
+  "Software"), to deal in the Software without restriction, including
+  without limitation the rights to use, copy, modify, merge, publish,
+  distribute, and/or sell copies of the Software, and to permit persons
+  to whom the Software is furnished to do so, provided that the above
+  copyright notice(s) and this permission notice appear in all copies of
+  the Software and that both the above copyright notice(s) and this
+  permission notice appear in supporting documentation.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+  OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+  HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
+  SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+  RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+  Except as contained in this notice, the name of a copyright holder
+  shall not be used in advertising or otherwise to promote the sale, use
+  or other dealings in this Software without prior written authorization
+  of the copyright holder.
+
+  All trademarks and registered trademarks mentioned herein are the
+  property of their respective owners.
+
+
+
+  libxml
+
+
+  LibXml Ruby Project
+    Copyright (c) 2008-2013 Charlie Savage and contributors
+    Copyright (c) 2002-2007 Sean Chittenden and contributors
+    Copyright (c) 2001 Wai-Sun "Squidster" Chia
+
+  Permission is hereby granted, free of charge, to any person obtaining a copy of
+  this software and associated documentation files (the "Software"), to deal in
+  the Software without restriction, including without limitation the rights to
+  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+  of the Software, and to permit persons to whom the Software is furnished to do
+  so, subject to the following conditions:
+
+  The above copyright notice and this permission notice shall be included in all
+  copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+  SOFTWARE.
+
+
+
+  Netscape Portable Runtime (NSPR)
+
+                             MOZILLA PUBLIC LICENSE
+                                Version 1.1
+
+                              ---------------
+
+  1. Definitions.
+
+     1.0.1. "Commercial Use" means distribution or otherwise making the
+     Covered Code available to a third party.
+
+     1.1. "Contributor" means each entity that creates or contributes to
+     the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original
+     Code, prior Modifications used by a Contributor, and the Modifications
+     made by that particular Contributor.
+
+     1.3. "Covered Code" means the Original Code or Modifications or the
+     combination of the Original Code and Modifications, in each case
+     including portions thereof.
+
+     1.4. "Electronic Distribution Mechanism" means a mechanism generally
+     accepted in the software development community for the electronic
+     transfer of data.
+
+     1.5. "Executable" means Covered Code in any form other than Source
+     Code.
+
+     1.6. "Initial Developer" means the individual or entity identified
+     as the Initial Developer in the Source Code notice required by Exhibit
+     A.
+
+     1.7. "Larger Work" means a work which combines Covered Code or
+     portions thereof with code not governed by the terms of this License.
+
+     1.8. "License" means this document.
+
+     1.8.1. "Licensable" means having the right to grant, to the maximum
+     extent possible, whether at the time of the initial grant or
+     subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means any addition to or deletion from the
+     substance or structure of either the Original Code or any previous
+     Modifications. When Covered Code is released as a series of files, a
+     Modification is:
+          A. Any addition to or deletion from the contents of a file
+          containing Original Code or previous Modifications.
+
+          B. Any new file that contains any part of the Original Code or
+          previous Modifications.
+
+     1.10. "Original Code" means Source Code of computer software code
+     which is described in the Source Code notice required by Exhibit A as
+     Original Code, and which, at the time of its release under this
+     License is not already Covered Code governed by this License.
+
+     1.10.1. "Patent Claims" means any patent claim(s), now owned or
+     hereafter acquired, including without limitation,  method, process,
+     and apparatus claims, in any patent Licensable by grantor.
+
+     1.11. "Source Code" means the preferred form of the Covered Code for
+     making modifications to it, including all modules it contains, plus
+     any associated interface definition files, scripts used to control
+     compilation and installation of an Executable, or source code
+     differential comparisons against either the Original Code or another
+     well known, available Covered Code of the Contributor's choice. The
+     Source Code can be in a compressed or archival form, provided the
+     appropriate decompression or de-archiving software is widely available
+     for no charge.
+
+     1.12. "You" (or "Your")  means an individual or a legal entity
+     exercising rights under, and complying with all of the terms of, this
+     License or a future version of this License issued under Section 6.1.
+     For legal entities, "You" includes any entity which controls, is
+     controlled by, or is under common control with You. For purposes of
+     this definition, "control" means (a) the power, direct or indirect,
+     to cause the direction or management of such entity, whether by
+     contract or otherwise, or (b) ownership of more than fifty percent
+     (50%) of the outstanding shares or beneficial ownership of such
+     entity.
+
+  2. Source Code License.
+
+     2.1. The Initial Developer Grant.
+     The Initial Developer hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Initial Developer to use, reproduce,
+          modify, display, perform, sublicense and distribute the Original
+          Code (or portions thereof) with or without Modifications, and/or
+          as part of a Larger Work; and
+
+          (b) under Patents Claims infringed by the making, using or
+          selling of Original Code, to make, have made, use, practice,
+          sell, and offer for sale, and/or otherwise dispose of the
+          Original Code (or portions thereof).
+
+          (c) the licenses granted in this Section 2.1(a) and (b) are
+          effective on the date Initial Developer first distributes
+          Original Code under the terms of this License.
+
+          (d) Notwithstanding Section 2.1(b) above, no patent license is
+          granted: 1) for code that You delete from the Original Code; 2)
+          separate from the Original Code;  or 3) for infringements caused
+          by: i) the modification of the Original Code or ii) the
+          combination of the Original Code with other software or devices.
+
+     2.2. Contributor Grant.
+     Subject to third party intellectual property claims, each Contributor
+     hereby grants You a world-wide, royalty-free, non-exclusive license
+
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Contributor, to use, reproduce, modify,
+          display, perform, sublicense and distribute the Modifications
+          created by such Contributor (or portions thereof) either on an
+          unmodified basis, with other Modifications, as Covered Code
+          and/or as part of a Larger Work; and
+
+          (b) under Patent Claims infringed by the making, using, or
+          selling of  Modifications made by that Contributor either alone
+          and/or in combination with its Contributor Version (or portions
+          of such combination), to make, use, sell, offer for sale, have
+          made, and/or otherwise dispose of: 1) Modifications made by that
+          Contributor (or portions thereof); and 2) the combination of
+          Modifications made by that Contributor with its Contributor
+          Version (or portions of such combination).
+
+          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+          effective on the date Contributor first makes Commercial Use of
+          the Covered Code.
+
+          (d)    Notwithstanding Section 2.2(b) above, no patent license is
+          granted: 1) for any code that Contributor has deleted from the
+          Contributor Version; 2)  separate from the Contributor Version;
+          3)  for infringements caused by: i) third party modifications of
+          Contributor Version or ii)  the combination of Modifications made
+          by that Contributor with other software  (except as part of the
+          Contributor Version) or other devices; or 4) under Patent Claims
+          infringed by Covered Code in the absence of Modifications made by
+          that Contributor.
+
+  3. Distribution Obligations.
+
+     3.1. Application of License.
+     The Modifications which You create or to which You contribute are
+     governed by the terms of this License, including without limitation
+     Section 2.2. The Source Code version of Covered Code may be
+     distributed only under the terms of this License or a future version
+     of this License released under Section 6.1, and You must include a
+     copy of this License with every copy of the Source Code You
+     distribute. You may not offer or impose any terms on any Source Code
+     version that alters or restricts the applicable version of this
+     License or the recipients' rights hereunder. However, You may include
+     an additional document offering the additional rights described in
+     Section 3.5.
+
+     3.2. Availability of Source Code.
+     Any Modification which You create or to which You contribute must be
+     made available in Source Code form under the terms of this License
+     either on the same media as an Executable version or via an accepted
+     Electronic Distribution Mechanism to anyone to whom you made an
+     Executable version available; and if made available via Electronic
+     Distribution Mechanism, must remain available for at least twelve (12)
+     months after the date it initially became available, or at least six
+     (6) months after a subsequent version of that particular Modification
+     has been made available to such recipients. You are responsible for
+     ensuring that the Source Code version remains available even if the
+     Electronic Distribution Mechanism is maintained by a third party.
+
+     3.3. Description of Modifications.
+     You must cause all Covered Code to which You contribute to contain a
+     file documenting the changes You made to create that Covered Code and
+     the date of any change. You must include a prominent statement that
+     the Modification is derived, directly or indirectly, from Original
+     Code provided by the Initial Developer and including the name of the
+     Initial Developer in (a) the Source Code, and (b) in any notice in an
+     Executable version or related documentation in which You describe the
+     origin or ownership of the Covered Code.
+
+     3.4. Intellectual Property Matters
+          (a) Third Party Claims.
+          If Contributor has knowledge that a license under a third party's
+          intellectual property rights is required to exercise the rights
+          granted by such Contributor under Sections 2.1 or 2.2,
+          Contributor must include a text file with the Source Code
+          distribution titled "LEGAL" which describes the claim and the
+          party making the claim in sufficient detail that a recipient will
+          know whom to contact. If Contributor obtains such knowledge after
+          the Modification is made available as described in Section 3.2,
+          Contributor shall promptly modify the LEGAL file in all copies
+          Contributor makes available thereafter and shall take other steps
+          (such as notifying appropriate mailing lists or newsgroups)
+          reasonably calculated to inform those who received the Covered
+          Code that new knowledge has been obtained.
+
+          (b) Contributor APIs.
+          If Contributor's Modifications include an application programming
+          interface and Contributor has knowledge of patent licenses which
+          are reasonably necessary to implement that API, Contributor must
+          also include this information in the LEGAL file.
+
+               (c)    Representations.
+          Contributor represents that, except as disclosed pursuant to
+          Section 3.4(a) above, Contributor believes that Contributor's
+          Modifications are Contributor's original creation(s) and/or
+          Contributor has sufficient rights to grant the rights conveyed by
+          this License.
+
+     3.5. Required Notices.
+     You must duplicate the notice in Exhibit A in each file of the Source
+     Code.  If it is not possible to put such notice in a particular Source
+     Code file due to its structure, then You must include such notice in a
+     location (such as a relevant directory) where a user would be likely
+     to look for such a notice.  If You created one or more Modification(s)
+     You may add your name as a Contributor to the notice described in
+     Exhibit A.  You must also duplicate this License in any documentation
+     for the Source Code where You describe recipients' rights or ownership
+     rights relating to Covered Code.  You may choose to offer, and to
+     charge a fee for, warranty, support, indemnity or liability
+     obligations to one or more recipients of Covered Code. However, You
+     may do so only on Your own behalf, and not on behalf of the Initial
+     Developer or any Contributor. You must make it absolutely clear than
+     any such warranty, support, indemnity or liability obligation is
+     offered by You alone, and You hereby agree to indemnify the Initial
+     Developer and every Contributor for any liability incurred by the
+     Initial Developer or such Contributor as a result of warranty,
+     support, indemnity or liability terms You offer.
+
+     3.6. Distribution of Executable Versions.
+     You may distribute Covered Code in Executable form only if the
+     requirements of Section 3.1-3.5 have been met for that Covered Code,
+     and if You include a notice stating that the Source Code version of
+     the Covered Code is available under the terms of this License,
+     including a description of how and where You have fulfilled the
+     obligations of Section 3.2. The notice must be conspicuously included
+     in any notice in an Executable version, related documentation or
+     collateral in which You describe recipients' rights relating to the
+     Covered Code. You may distribute the Executable version of Covered
+     Code or ownership rights under a license of Your choice, which may
+     contain terms different from this License, provided that You are in
+     compliance with the terms of this License and that the license for the
+     Executable version does not attempt to limit or alter the recipient's
+     rights in the Source Code version from the rights set forth in this
+     License. If You distribute the Executable version under a different
+     license You must make it absolutely clear that any terms which differ
+     from this License are offered by You alone, not by the Initial
+     Developer or any Contributor. You hereby agree to indemnify the
+     Initial Developer and every Contributor for any liability incurred by
+     the Initial Developer or such Contributor as a result of any such
+     terms You offer.
+
+     3.7. Larger Works.
+     You may create a Larger Work by combining Covered Code with other code
+     not governed by the terms of this License and distribute the Larger
+     Work as a single product. In such a case, You must make sure the
+     requirements of this License are fulfilled for the Covered Code.
+
+  4. Inability to Comply Due to Statute or Regulation.
+
+     If it is impossible for You to comply with any of the terms of this
+     License with respect to some or all of the Covered Code due to
+     statute, judicial order, or regulation then You must: (a) comply with
+     the terms of this License to the maximum extent possible; and (b)
+     describe the limitations and the code they affect. Such description
+     must be included in the LEGAL file described in Section 3.4 and must
+     be included with all distributions of the Source Code. Except to the
+     extent prohibited by statute or regulation, such description must be
+     sufficiently detailed for a recipient of ordinary skill to be able to
+     understand it.
+
+  5. Application of this License.
+
+     This License applies to code to which the Initial Developer has
+     attached the notice in Exhibit A and to related Covered Code.
+
+  6. Versions of the License.
+
+     6.1. New Versions.
+     Netscape Communications Corporation ("Netscape") may publish revised
+     and/or new versions of the License from time to time. Each version
+     will be given a distinguishing version number.
+
+     6.2. Effect of New Versions.
+     Once Covered Code has been published under a particular version of the
+     License, You may always continue to use it under the terms of that
+     version. You may also choose to use such Covered Code under the terms
+     of any subsequent version of the License published by Netscape. No one
+     other than Netscape has the right to modify the terms applicable to
+     Covered Code created under this License.
+
+     6.3. Derivative Works.
+     If You create or use a modified version of this License (which you may
+     only do in order to apply it to code which is not already Covered Code
+     governed by this License), You must (a) rename Your license so that
+     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+     "MPL", "NPL" or any confusingly similar phrase do not appear in your
+     license (except to note that your license differs from this License)
+     and (b) otherwise make it clear that Your version of the license
+     contains terms which differ from the Mozilla Public License and
+     Netscape Public License. (Filling in the name of the Initial
+     Developer, Original Code or Contributor in the notice described in
+     Exhibit A shall not of themselves be deemed to be modifications of
+     this License.)
+
+  7. DISCLAIMER OF WARRANTY.
+
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+  8. TERMINATION.
+
+     8.1.  This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to cure
+     such breach within 30 days of becoming aware of the breach. All
+     sublicenses to the Covered Code which are properly granted shall
+     survive any termination of this License. Provisions which, by their
+     nature, must remain in effect beyond the termination of this License
+     shall survive.
+
+     8.2.  If You initiate litigation by asserting a patent infringement
+     claim (excluding declatory judgment actions) against Initial Developer
+     or a Contributor (the Initial Developer or Contributor against whom
+     You file such action is referred to as "Participant")  alleging that:
+
+     (a)  such Participant's Contributor Version directly or indirectly
+     infringes any patent, then any and all rights granted by such
+     Participant to You under Sections 2.1 and/or 2.2 of this License
+     shall, upon 60 days notice from Participant terminate prospectively,
+     unless if within 60 days after receipt of notice You either: (i)
+     agree in writing to pay Participant a mutually agreeable reasonable
+     royalty for Your past and future use of Modifications made by such
+     Participant, or (ii) withdraw Your litigation claim with respect to
+     the Contributor Version against such Participant.  If within 60 days
+     of notice, a reasonable royalty and payment arrangement are not
+     mutually agreed upon in writing by the parties or the litigation claim
+     is not withdrawn, the rights granted by Participant to You under
+     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+     the 60 day notice period specified above.
+
+     (b)  any software, hardware, or device, other than such Participant's
+     Contributor Version, directly or indirectly infringes any patent, then
+     any rights granted to You by such Participant under Sections 2.1(b)
+     and 2.2(b) are revoked effective as of the date You first made, used,
+     sold, distributed, or had made, Modifications made by that
+     Participant.
+
+     8.3.  If You assert a patent infringement claim against Participant
+     alleging that such Participant's Contributor Version directly or
+     indirectly infringes any patent where such claim is resolved (such as
+     by license or settlement) prior to the initiation of patent
+     infringement litigation, then the reasonable value of the licenses
+     granted by such Participant under Sections 2.1 or 2.2 shall be taken
+     into account in determining the amount or value of any payment or
+     license.
+
+     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
+     all end user license agreements (excluding distributors and resellers)
+     which have been validly granted by You or any distributor hereunder
+     prior to termination shall survive termination.
+
+  9. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+  10. U.S. GOVERNMENT END USERS.
+
+     The Covered Code is a "commercial item," as that term is defined in
+     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+     software" and "commercial computer software documentation," as such
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+     all U.S. Government End Users acquire Covered Code with only those
+     rights set forth herein.
+
+  11. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject
+     matter hereof. If any provision of this License is held to be
+     unenforceable, such provision shall be reformed only to the extent
+     necessary to make it enforceable. This License shall be governed by
+     California law provisions (except to the extent applicable law, if
+     any, provides otherwise), excluding its conflict-of-law provisions.
+     With respect to disputes in which at least one party is a citizen of,
+     or an entity chartered or registered to do business in the United
+     States of America, any litigation relating to this License shall be
+     subject to the jurisdiction of the Federal Courts of the Northern
+     District of California, with venue lying in Santa Clara County,
+     California, with the losing party responsible for costs, including
+     without limitation, court costs and reasonable attorneys' fees and
+     expenses. The application of the United Nations Convention on
+     Contracts for the International Sale of Goods is expressly excluded.
+     Any law or regulation which provides that the language of a contract
+     shall be construed against the drafter shall not apply to this
+     License.
+
+  12. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is
+     responsible for claims and damages arising, directly or indirectly,
+     out of its utilization of rights under this License and You agree to
+     work with Initial Developer and Contributors to distribute such
+     responsibility on an equitable basis. Nothing herein is intended or
+     shall be deemed to constitute any admission of liability.
+
+  13. MULTIPLE-LICENSED CODE.
+
+     Initial Developer may designate portions of the Covered Code as
+     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
+     Developer permits you to utilize portions of the Covered Code under
+     Your choice of the NPL or the alternative licenses, if any, specified
+     by the Initial Developer in the file described in Exhibit A.
+
+  EXHIBIT A -Mozilla Public License.
+
+   The contents of this file are subject to the Mozilla Public License Version
+   1.1 (the "License"); you may not use this file except in compliance with
+   the License. You may obtain a copy of the License at
+   http://www.mozilla.org/MPL/
+
+   Software distributed under the License is distributed on an "AS IS" basis,
+   WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+   for the specific language governing rights and limitations under the
+   License.
+
+   The Original Code is the Netscape Portable Runtime (NSPR).
+
+   The Initial Developer of the Original Code is
+   Netscape Communications Corporation.
+   Portions created by the Initial Developer are Copyright (C) 1998-2000
+   the Initial Developer. All Rights Reserved.
+
+   Contributor(s):
+
+   Alternatively, the contents of this file may be used under the terms of
+   either the GNU General Public License Version 2 or later (the "GPL"), or
+   the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+   in which case the provisions of the GPL or the LGPL are applicable instead
+   of those above. If you wish to allow use of your version of this file only
+   under the terms of either the GPL or the LGPL, and not to allow others to
+   use your version of this file under the terms of the MPL, indicate your
+   decision by deleting the provisions above and replace them with the notice
+   and other provisions required by the GPL or the LGPL. If you do not delete
+   the provisions above, a recipient may use your version of this file under
+   the terms of any one of the MPL, the GPL or the LGPL.
+
+
+  symbolize
+
+
+  // Copyright (c) 2006, Google Inc.
+  // All rights reserved.
+  //
+  // Redistribution and use in source and binary forms, with or without
+  // modification, are permitted provided that the following conditions are
+  // met:
+  //
+  //     * Redistributions of source code must retain the above copyright
+  // notice, this list of conditions and the following disclaimer.
+  //     * Redistributions in binary form must reproduce the above
+  // copyright notice, this list of conditions and the following disclaimer
+  // in the documentation and/or other materials provided with the
+  // distribution.
+  //     * Neither the name of Google Inc. nor the names of its
+  // contributors may be used to endorse or promote products derived from
+  // this software without specific prior written permission.
+  //
+  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+  valgrind
+
+
+   Notice that the following BSD-style license applies to the Valgrind header
+   files used by Chromium (valgrind.h and memcheck.h). However, the rest of
+   Valgrind is licensed under the terms of the GNU General Public License,
+   version 2, unless otherwise indicated.
+
+   ----------------------------------------------------------------
+
+   Copyright (C) 2000-2008 Julian Seward.  All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must
+      not claim that you wrote the original software.  If you use this
+      software in a product, an acknowledgment in the product
+      documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+      not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote
+      products derived from this software without specific prior written
+      permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+  uri_template
+
+
+                                   Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+  mozilla(url/third_party/mozilla)
+
+
+  Copyright 2007, Google Inc.
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+      * Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the following disclaimer
+  in the documentation and/or other materials provided with the
+  distribution.
+      * Neither the name of Google Inc. nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+  -------------------------------------------------------------------------------
+
+  The file url_parse.cc is based on nsURLParsers.cc from Mozilla. This file is
+  licensed separately as follows:
+
+  --------------------------------------------------------------------------------
+                          MOZILLA PUBLIC LICENSE
+                                Version 1.1
+
+                              ---------------
+
+  1. Definitions.
+
+     1.0.1. "Commercial Use" means distribution or otherwise making the
+     Covered Code available to a third party.
+
+     1.1. "Contributor" means each entity that creates or contributes to
+     the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original
+     Code, prior Modifications used by a Contributor, and the Modifications
+     made by that particular Contributor.
+
+     1.3. "Covered Code" means the Original Code or Modifications or the
+     combination of the Original Code and Modifications, in each case
+     including portions thereof.
+
+     1.4. "Electronic Distribution Mechanism" means a mechanism generally
+     accepted in the software development community for the electronic
+     transfer of data.
+
+     1.5. "Executable" means Covered Code in any form other than Source
+     Code.
+
+     1.6. "Initial Developer" means the individual or entity identified
+     as the Initial Developer in the Source Code notice required by Exhibit
+     A.
+
+     1.7. "Larger Work" means a work which combines Covered Code or
+     portions thereof with code not governed by the terms of this License.
+
+     1.8. "License" means this document.
+
+     1.8.1. "Licensable" means having the right to grant, to the maximum
+     extent possible, whether at the time of the initial grant or
+     subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means any addition to or deletion from the
+     substance or structure of either the Original Code or any previous
+     Modifications. When Covered Code is released as a series of files, a
+     Modification is:
+          A. Any addition to or deletion from the contents of a file
+          containing Original Code or previous Modifications.
+
+          B. Any new file that contains any part of the Original Code or
+          previous Modifications.
+
+     1.10. "Original Code" means Source Code of computer software code
+     which is described in the Source Code notice required by Exhibit A as
+     Original Code, and which, at the time of its release under this
+     License is not already Covered Code governed by this License.
+
+     1.10.1. "Patent Claims" means any patent claim(s), now owned or
+     hereafter acquired, including without limitation,  method, process,
+     and apparatus claims, in any patent Licensable by grantor.
+
+     1.11. "Source Code" means the preferred form of the Covered Code for
+     making modifications to it, including all modules it contains, plus
+     any associated interface definition files, scripts used to control
+     compilation and installation of an Executable, or source code
+     differential comparisons against either the Original Code or another
+     well known, available Covered Code of the Contributor's choice. The
+     Source Code can be in a compressed or archival form, provided the
+     appropriate decompression or de-archiving software is widely available
+     for no charge.
+
+     1.12. "You" (or "Your")  means an individual or a legal entity
+     exercising rights under, and complying with all of the terms of, this
+     License or a future version of this License issued under Section 6.1.
+     For legal entities, "You" includes any entity which controls, is
+     controlled by, or is under common control with You. For purposes of
+     this definition, "control" means (a) the power, direct or indirect,
+     to cause the direction or management of such entity, whether by
+     contract or otherwise, or (b) ownership of more than fifty percent
+     (50%) of the outstanding shares or beneficial ownership of such
+     entity.
+
+  2. Source Code License.
+
+     2.1. The Initial Developer Grant.
+     The Initial Developer hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Initial Developer to use, reproduce,
+          modify, display, perform, sublicense and distribute the Original
+          Code (or portions thereof) with or without Modifications, and/or
+          as part of a Larger Work; and
+
+          (b) under Patents Claims infringed by the making, using or
+          selling of Original Code, to make, have made, use, practice,
+          sell, and offer for sale, and/or otherwise dispose of the
+          Original Code (or portions thereof).
+
+          (c) the licenses granted in this Section 2.1(a) and (b) are
+          effective on the date Initial Developer first distributes
+          Original Code under the terms of this License.
+
+          (d) Notwithstanding Section 2.1(b) above, no patent license is
+          granted: 1) for code that You delete from the Original Code; 2)
+          separate from the Original Code;  or 3) for infringements caused
+          by: i) the modification of the Original Code or ii) the
+          combination of the Original Code with other software or devices.
+
+     2.2. Contributor Grant.
+     Subject to third party intellectual property claims, each Contributor
+     hereby grants You a world-wide, royalty-free, non-exclusive license
+
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Contributor, to use, reproduce, modify,
+          display, perform, sublicense and distribute the Modifications
+          created by such Contributor (or portions thereof) either on an
+          unmodified basis, with other Modifications, as Covered Code
+          and/or as part of a Larger Work; and
+
+          (b) under Patent Claims infringed by the making, using, or
+          selling of  Modifications made by that Contributor either alone
+          and/or in combination with its Contributor Version (or portions
+          of such combination), to make, use, sell, offer for sale, have
+          made, and/or otherwise dispose of: 1) Modifications made by that
+          Contributor (or portions thereof); and 2) the combination of
+          Modifications made by that Contributor with its Contributor
+          Version (or portions of such combination).
+
+          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+          effective on the date Contributor first makes Commercial Use of
+          the Covered Code.
+
+          (d)    Notwithstanding Section 2.2(b) above, no patent license is
+          granted: 1) for any code that Contributor has deleted from the
+          Contributor Version; 2)  separate from the Contributor Version;
+          3)  for infringements caused by: i) third party modifications of
+          Contributor Version or ii)  the combination of Modifications made
+          by that Contributor with other software  (except as part of the
+          Contributor Version) or other devices; or 4) under Patent Claims
+          infringed by Covered Code in the absence of Modifications made by
+          that Contributor.
+
+  3. Distribution Obligations.
+
+     3.1. Application of License.
+     The Modifications which You create or to which You contribute are
+     governed by the terms of this License, including without limitation
+     Section 2.2. The Source Code version of Covered Code may be
+     distributed only under the terms of this License or a future version
+     of this License released under Section 6.1, and You must include a
+     copy of this License with every copy of the Source Code You
+     distribute. You may not offer or impose any terms on any Source Code
+     version that alters or restricts the applicable version of this
+     License or the recipients' rights hereunder. However, You may include
+     an additional document offering the additional rights described in
+     Section 3.5.
+
+     3.2. Availability of Source Code.
+     Any Modification which You create or to which You contribute must be
+     made available in Source Code form under the terms of this License
+     either on the same media as an Executable version or via an accepted
+     Electronic Distribution Mechanism to anyone to whom you made an
+     Executable version available; and if made available via Electronic
+     Distribution Mechanism, must remain available for at least twelve (12)
+     months after the date it initially became available, or at least six
+     (6) months after a subsequent version of that particular Modification
+     has been made available to such recipients. You are responsible for
+     ensuring that the Source Code version remains available even if the
+     Electronic Distribution Mechanism is maintained by a third party.
+
+     3.3. Description of Modifications.
+     You must cause all Covered Code to which You contribute to contain a
+     file documenting the changes You made to create that Covered Code and
+     the date of any change. You must include a prominent statement that
+     the Modification is derived, directly or indirectly, from Original
+     Code provided by the Initial Developer and including the name of the
+     Initial Developer in (a) the Source Code, and (b) in any notice in an
+     Executable version or related documentation in which You describe the
+     origin or ownership of the Covered Code.
+
+     3.4. Intellectual Property Matters
+          (a) Third Party Claims.
+          If Contributor has knowledge that a license under a third party's
+          intellectual property rights is required to exercise the rights
+          granted by such Contributor under Sections 2.1 or 2.2,
+          Contributor must include a text file with the Source Code
+          distribution titled "LEGAL" which describes the claim and the
+          party making the claim in sufficient detail that a recipient will
+          know whom to contact. If Contributor obtains such knowledge after
+          the Modification is made available as described in Section 3.2,
+          Contributor shall promptly modify the LEGAL file in all copies
+          Contributor makes available thereafter and shall take other steps
+          (such as notifying appropriate mailing lists or newsgroups)
+          reasonably calculated to inform those who received the Covered
+          Code that new knowledge has been obtained.
+
+          (b) Contributor APIs.
+          If Contributor's Modifications include an application programming
+          interface and Contributor has knowledge of patent licenses which
+          are reasonably necessary to implement that API, Contributor must
+          also include this information in the LEGAL file.
+
+               (c)    Representations.
+          Contributor represents that, except as disclosed pursuant to
+          Section 3.4(a) above, Contributor believes that Contributor's
+          Modifications are Contributor's original creation(s) and/or
+          Contributor has sufficient rights to grant the rights conveyed by
+          this License.
+
+     3.5. Required Notices.
+     You must duplicate the notice in Exhibit A in each file of the Source
+     Code.  If it is not possible to put such notice in a particular Source
+     Code file due to its structure, then You must include such notice in a
+     location (such as a relevant directory) where a user would be likely
+     to look for such a notice.  If You created one or more Modification(s)
+     You may add your name as a Contributor to the notice described in
+     Exhibit A.  You must also duplicate this License in any documentation
+     for the Source Code where You describe recipients' rights or ownership
+     rights relating to Covered Code.  You may choose to offer, and to
+     charge a fee for, warranty, support, indemnity or liability
+     obligations to one or more recipients of Covered Code. However, You
+     may do so only on Your own behalf, and not on behalf of the Initial
+     Developer or any Contributor. You must make it absolutely clear than
+     any such warranty, support, indemnity or liability obligation is
+     offered by You alone, and You hereby agree to indemnify the Initial
+     Developer and every Contributor for any liability incurred by the
+     Initial Developer or such Contributor as a result of warranty,
+     support, indemnity or liability terms You offer.
+
+     3.6. Distribution of Executable Versions.
+     You may distribute Covered Code in Executable form only if the
+     requirements of Section 3.1-3.5 have been met for that Covered Code,
+     and if You include a notice stating that the Source Code version of
+     the Covered Code is available under the terms of this License,
+     including a description of how and where You have fulfilled the
+     obligations of Section 3.2. The notice must be conspicuously included
+     in any notice in an Executable version, related documentation or
+     collateral in which You describe recipients' rights relating to the
+     Covered Code. You may distribute the Executable version of Covered
+     Code or ownership rights under a license of Your choice, which may
+     contain terms different from this License, provided that You are in
+     compliance with the terms of this License and that the license for the
+     Executable version does not attempt to limit or alter the recipient's
+     rights in the Source Code version from the rights set forth in this
+     License. If You distribute the Executable version under a different
+     license You must make it absolutely clear that any terms which differ
+     from this License are offered by You alone, not by the Initial
+     Developer or any Contributor. You hereby agree to indemnify the
+     Initial Developer and every Contributor for any liability incurred by
+     the Initial Developer or such Contributor as a result of any such
+     terms You offer.
+
+     3.7. Larger Works.
+     You may create a Larger Work by combining Covered Code with other code
+     not governed by the terms of this License and distribute the Larger
+     Work as a single product. In such a case, You must make sure the
+     requirements of this License are fulfilled for the Covered Code.
+
+  4. Inability to Comply Due to Statute or Regulation.
+
+     If it is impossible for You to comply with any of the terms of this
+     License with respect to some or all of the Covered Code due to
+     statute, judicial order, or regulation then You must: (a) comply with
+     the terms of this License to the maximum extent possible; and (b)
+     describe the limitations and the code they affect. Such description
+     must be included in the LEGAL file described in Section 3.4 and must
+     be included with all distributions of the Source Code. Except to the
+     extent prohibited by statute or regulation, such description must be
+     sufficiently detailed for a recipient of ordinary skill to be able to
+     understand it.
+
+  5. Application of this License.
+
+     This License applies to code to which the Initial Developer has
+     attached the notice in Exhibit A and to related Covered Code.
+
+  6. Versions of the License.
+
+     6.1. New Versions.
+     Netscape Communications Corporation ("Netscape") may publish revised
+     and/or new versions of the License from time to time. Each version
+     will be given a distinguishing version number.
+
+     6.2. Effect of New Versions.
+     Once Covered Code has been published under a particular version of the
+     License, You may always continue to use it under the terms of that
+     version. You may also choose to use such Covered Code under the terms
+     of any subsequent version of the License published by Netscape. No one
+     other than Netscape has the right to modify the terms applicable to
+     Covered Code created under this License.
+
+     6.3. Derivative Works.
+     If You create or use a modified version of this License (which you may
+     only do in order to apply it to code which is not already Covered Code
+     governed by this License), You must (a) rename Your license so that
+     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+     "MPL", "NPL" or any confusingly similar phrase do not appear in your
+     license (except to note that your license differs from this License)
+     and (b) otherwise make it clear that Your version of the license
+     contains terms which differ from the Mozilla Public License and
+     Netscape Public License. (Filling in the name of the Initial
+     Developer, Original Code or Contributor in the notice described in
+     Exhibit A shall not of themselves be deemed to be modifications of
+     this License.)
+
+  7. DISCLAIMER OF WARRANTY.
+
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+  8. TERMINATION.
+
+     8.1.  This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to cure
+     such breach within 30 days of becoming aware of the breach. All
+     sublicenses to the Covered Code which are properly granted shall
+     survive any termination of this License. Provisions which, by their
+     nature, must remain in effect beyond the termination of this License
+     shall survive.
+
+     8.2.  If You initiate litigation by asserting a patent infringement
+     claim (excluding declatory judgment actions) against Initial Developer
+     or a Contributor (the Initial Developer or Contributor against whom
+     You file such action is referred to as "Participant")  alleging that:
+
+     (a)  such Participant's Contributor Version directly or indirectly
+     infringes any patent, then any and all rights granted by such
+     Participant to You under Sections 2.1 and/or 2.2 of this License
+     shall, upon 60 days notice from Participant terminate prospectively,
+     unless if within 60 days after receipt of notice You either: (i)
+     agree in writing to pay Participant a mutually agreeable reasonable
+     royalty for Your past and future use of Modifications made by such
+     Participant, or (ii) withdraw Your litigation claim with respect to
+     the Contributor Version against such Participant.  If within 60 days
+     of notice, a reasonable royalty and payment arrangement are not
+     mutually agreed upon in writing by the parties or the litigation claim
+     is not withdrawn, the rights granted by Participant to You under
+     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+     the 60 day notice period specified above.
+
+     (b)  any software, hardware, or device, other than such Participant's
+     Contributor Version, directly or indirectly infringes any patent, then
+     any rights granted to You by such Participant under Sections 2.1(b)
+     and 2.2(b) are revoked effective as of the date You first made, used,
+     sold, distributed, or had made, Modifications made by that
+     Participant.
+
+     8.3.  If You assert a patent infringement claim against Participant
+     alleging that such Participant's Contributor Version directly or
+     indirectly infringes any patent where such claim is resolved (such as
+     by license or settlement) prior to the initiation of patent
+     infringement litigation, then the reasonable value of the licenses
+     granted by such Participant under Sections 2.1 or 2.2 shall be taken
+     into account in determining the amount or value of any payment or
+     license.
+
+     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
+     all end user license agreements (excluding distributors and resellers)
+     which have been validly granted by You or any distributor hereunder
+     prior to termination shall survive termination.
+
+  9. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+  10. U.S. GOVERNMENT END USERS.
+
+     The Covered Code is a "commercial item," as that term is defined in
+     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+     software" and "commercial computer software documentation," as such
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+     all U.S. Government End Users acquire Covered Code with only those
+     rights set forth herein.
+
+  11. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject
+     matter hereof. If any provision of this License is held to be
+     unenforceable, such provision shall be reformed only to the extent
+     necessary to make it enforceable. This License shall be governed by
+     California law provisions (except to the extent applicable law, if
+     any, provides otherwise), excluding its conflict-of-law provisions.
+     With respect to disputes in which at least one party is a citizen of,
+     or an entity chartered or registered to do business in the United
+     States of America, any litigation relating to this License shall be
+     subject to the jurisdiction of the Federal Courts of the Northern
+     District of California, with venue lying in Santa Clara County,
+     California, with the losing party responsible for costs, including
+     without limitation, court costs and reasonable attorneys' fees and
+     expenses. The application of the United Nations Convention on
+     Contracts for the International Sale of Goods is expressly excluded.
+     Any law or regulation which provides that the language of a contract
+     shall be construed against the drafter shall not apply to this
+     License.
+
+  12. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is
+     responsible for claims and damages arising, directly or indirectly,
+     out of its utilization of rights under this License and You agree to
+     work with Initial Developer and Contributors to distribute such
+     responsibility on an equitable basis. Nothing herein is intended or
+     shall be deemed to constitute any admission of liability.
+
+  13. MULTIPLE-LICENSED CODE.
+
+     Initial Developer may designate portions of the Covered Code as
+     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
+     Developer permits you to utilize portions of the Covered Code under
+     Your choice of the NPL or the alternative licenses, if any, specified
+     by the Initial Developer in the file described in Exhibit A.
+
+  EXHIBIT A -Mozilla Public License.
+
+  The contents of this file are subject to the Mozilla Public License Version
+  1.1 (the "License"); you may not use this file except in compliance with
+  the License. You may obtain a copy of the License at
+  http://www.mozilla.org/MPL/
+
+  Software distributed under the License is distributed on an "AS IS" basis,
+  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+  for the specific language governing rights and limitations under the
+  License.
+
+  The Original Code is mozilla.org code.
+
+  The Initial Developer of the Original Code is
+  Netscape Communications Corporation.
+  Portions created by the Initial Developer are Copyright (C) 1998
+  the Initial Developer. All Rights Reserved.
+
+  Contributor(s):
+    Darin Fisher (original author)
+
+  Alternatively, the contents of this file may be used under the terms of
+  either the GNU General Public License Version 2 or later (the "GPL"), or
+  the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+  in which case the provisions of the GPL or the LGPL are applicable instead
+  of those above. If you wish to allow use of your version of this file only
+  under the terms of either the GPL or the LGPL, and not to allow others to
+  use your version of this file under the terms of the MPL, indicate your
+  decision by deleting the provisions above and replace them with the notice
+  and other provisions required by the GPL or the LGPL. If you do not delete
+  the provisions above, a recipient may use your version of this file under
+  the terms of any one of the MPL, the GPL or the LGPL.
+
+
+  nist-pkits
+
+  Name: NIST Public Key Interoperability Test Suite
+  Short Name: NIST PKITS
+  URL: http://csrc.nist.gov/groups/ST/crypto_apps_infra/pki/pkitesting.html
+  Version: 1.0.1
+  Date: April 14, 2011
+  License: Public Domain: United States Government Work under 17 U.S.C. 105
+  License File: NOT_SHIPPED
+
+  Description:
+  The Public Key Interoperability Test Suite (PKITS) is a comprehensive X.509
+  path validation test suite that was developed by NIST in conjunction with BAE
+  Systems and NSA.  The PKITS path validation test suite is designed to cover
+  most of the features specified in X.509 and RFC 3280.
+
+  Local Modifications:
+  Only the certs/ and crls/ directories were extracted from PKITS_data.zip.
+
+  pkits_testcases-inl.h is generated from the test descriptions in PKITS.pdf
+  using generate_tests.py.
+
+
+
+  FreeType
+
+
+                      The FreeType Project LICENSE
+                      ----------------------------
+
+                              2006-Jan-27
+
+                      Copyright 1996-2002, 2006 by
+            David Turner, Robert Wilhelm, and Werner Lemberg
+
+
+
+  Introduction
+  ============
+
+    The FreeType  Project is distributed in  several archive packages;
+    some of them may contain, in addition to the FreeType font engine,
+    various tools and  contributions which rely on, or  relate to, the
+    FreeType Project.
+
+    This  license applies  to all  files found  in such  packages, and
+    which do not  fall under their own explicit  license.  The license
+    affects  thus  the  FreeType   font  engine,  the  test  programs,
+    documentation and makefiles, at the very least.
+
+    This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG
+    (Independent JPEG  Group) licenses, which  all encourage inclusion
+    and  use of  free  software in  commercial  and freeware  products
+    alike.  As a consequence, its main points are that:
+
+      o We don't promise that this software works. However, we will be
+        interested in any kind of bug reports. (`as is' distribution)
+
+      o You can  use this software for whatever you  want, in parts or
+        full form, without having to pay us. (`royalty-free' usage)
+
+      o You may not pretend that  you wrote this software.  If you use
+        it, or  only parts of it,  in a program,  you must acknowledge
+        somewhere  in  your  documentation  that  you  have  used  the
+        FreeType code. (`credits')
+
+    We  specifically  permit  and  encourage  the  inclusion  of  this
+    software, with  or without modifications,  in commercial products.
+    We  disclaim  all warranties  covering  The  FreeType Project  and
+    assume no liability related to The FreeType Project.
+
+
+    Finally,  many  people  asked  us  for  a  preferred  form  for  a
+    credit/disclaimer to use in compliance with this license.  We thus
+    encourage you to use the following text:
+
+     """
+      Portions of this software are copyright © <year> The FreeType
+      Project (www.freetype.org).  All rights reserved.
+     """
+
+    Please replace <year> with the value from the FreeType version you
+    actually use.
+
+
+  Legal Terms
+  ===========
+
+  0. Definitions
+  --------------
+
+    Throughout this license,  the terms `package', `FreeType Project',
+    and  `FreeType  archive' refer  to  the  set  of files  originally
+    distributed  by the  authors  (David Turner,  Robert Wilhelm,  and
+    Werner Lemberg) as the `FreeType Project', be they named as alpha,
+    beta or final release.
+
+    `You' refers to  the licensee, or person using  the project, where
+    `using' is a generic term including compiling the project's source
+    code as  well as linking it  to form a  `program' or `executable'.
+    This  program is  referred to  as  `a program  using the  FreeType
+    engine'.
+
+    This  license applies  to all  files distributed  in  the original
+    FreeType  Project,   including  all  source   code,  binaries  and
+    documentation,  unless  otherwise  stated   in  the  file  in  its
+    original, unmodified form as  distributed in the original archive.
+    If you are  unsure whether or not a particular  file is covered by
+    this license, you must contact us to verify this.
+
+    The FreeType  Project is copyright (C) 1996-2000  by David Turner,
+    Robert Wilhelm, and Werner Lemberg.  All rights reserved except as
+    specified below.
+
+  1. No Warranty
+  --------------
+
+    THE FREETYPE PROJECT  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY
+    KIND, EITHER  EXPRESS OR IMPLIED,  INCLUDING, BUT NOT  LIMITED TO,
+    WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR
+    PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
+    BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO
+    USE, OF THE FREETYPE PROJECT.
+
+  2. Redistribution
+  -----------------
+
+    This  license  grants  a  worldwide, royalty-free,  perpetual  and
+    irrevocable right  and license to use,  execute, perform, compile,
+    display,  copy,   create  derivative  works   of,  distribute  and
+    sublicense the  FreeType Project (in  both source and  object code
+    forms)  and  derivative works  thereof  for  any  purpose; and  to
+    authorize others  to exercise  some or all  of the  rights granted
+    herein, subject to the following conditions:
+
+      o Redistribution of  source code  must retain this  license file
+        (`FTL.TXT') unaltered; any  additions, deletions or changes to
+        the original  files must be clearly  indicated in accompanying
+        documentation.   The  copyright   notices  of  the  unaltered,
+        original  files must  be  preserved in  all  copies of  source
+        files.
+
+      o Redistribution in binary form must provide a  disclaimer  that
+        states  that  the software is based in part of the work of the
+        FreeType Team,  in  the  distribution  documentation.  We also
+        encourage you to put an URL to the FreeType web page  in  your
+        documentation, though this isn't mandatory.
+
+    These conditions  apply to any  software derived from or  based on
+    the FreeType Project,  not just the unmodified files.   If you use
+    our work, you  must acknowledge us.  However, no  fee need be paid
+    to us.
+
+  3. Advertising
+  --------------
+
+    Neither the  FreeType authors and  contributors nor you  shall use
+    the name of the  other for commercial, advertising, or promotional
+    purposes without specific prior written permission.
+
+    We suggest,  but do not require, that  you use one or  more of the
+    following phrases to refer  to this software in your documentation
+    or advertising  materials: `FreeType Project',  `FreeType Engine',
+    `FreeType library', or `FreeType Distribution'.
+
+    As  you have  not signed  this license,  you are  not  required to
+    accept  it.   However,  as  the FreeType  Project  is  copyrighted
+    material, only  this license, or  another one contracted  with the
+    authors, grants you  the right to use, distribute,  and modify it.
+    Therefore,  by  using,  distributing,  or modifying  the  FreeType
+    Project, you indicate that you understand and accept all the terms
+    of this license.
+
+  4. Contacts
+  -----------
+
+    There are two mailing lists related to FreeType:
+
+      o freetype@nongnu.org
+
+        Discusses general use and applications of FreeType, as well as
+        future and  wanted additions to the  library and distribution.
+        If  you are looking  for support,  start in  this list  if you
+        haven't found anything to help you in the documentation.
+
+      o freetype-devel@nongnu.org
+
+        Discusses bugs,  as well  as engine internals,  design issues,
+        specific licenses, porting, etc.
+
+    Our home page can be found at
+
+      http://www.freetype.org
+
+
+  --- end of FTL.TXT ---
+
+
+
+  harfbuzz-ng
+
+  HarfBuzz is licensed under the so-called "Old MIT" license.  Details follow.
+  For parts of HarfBuzz that are licensed under different licenses see individual
+  files names COPYING in subdirectories where applicable.
+
+  Copyright © 2010,2011,2012  Google, Inc.
+  Copyright © 2012  Mozilla Foundation
+  Copyright © 2011  Codethink Limited
+  Copyright © 2008,2010  Nokia Corporation and/or its subsidiary(-ies)
+  Copyright © 2009  Keith Stribley
+  Copyright © 2009  Martin Hosken and SIL International
+  Copyright © 2007  Chris Wilson
+  Copyright © 2006  Behdad Esfahbod
+  Copyright © 2005  David Turner
+  Copyright © 2004,2007,2008,2009,2010  Red Hat, Inc.
+  Copyright © 1998-2004  David Turner and Werner Lemberg
+
+  For full copyright notices consult the individual files in the package.
+
+
+  Permission is hereby granted, without written agreement and without
+  license or royalty fees, to use, copy, modify, and distribute this
+  software and its documentation for any purpose, provided that the
+  above copyright notice and the following two paragraphs appear in
+  all copies of this software.
+
+  IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+  DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+  ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+  IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+  DAMAGE.
+
+  THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+  BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+  FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+  ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+  PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+
+
+  icu
+
+
+  ICU License - ICU 1.8.1 and later
+
+  COPYRIGHT AND PERMISSION NOTICE
+
+  Copyright (c) 1995-2010 International Business Machines Corporation and others
+
+  All rights reserved.
+
+  Permission is hereby granted, free of charge, to any person obtaining a copy
+  of this software and associated documentation files (the "Software"),
+  to deal in the Software without restriction, including without limitation
+  the rights to use, copy, modify, merge, publish, distribute, and/or sell
+  copies of the Software, and to permit persons
+  to whom the Software is furnished to do so, provided that the above
+  copyright notice(s) and this permission notice appear in all copies
+  of the Software and that both the above copyright notice(s) and this
+  permission notice appear in supporting documentation.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT
+  SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY
+  CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+  CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+  WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+  Except as contained in this notice, the name of a copyright holder shall not be
+  used in advertising or otherwise to promote the sale, use or other dealings in
+  this Software without prior written authorization of the copyright holder.
+
+  All trademarks and registered trademarks mentioned herein are the property of
+  their respective owners.
+
+
+
+  libevent
+
+  Copyright 2000-2007 Niels Provos <provos@citi.umich.edu>
+  Copyright 2007-2009 Niels Provos and Nick Mathewson
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+  3. The name of the author may not be used to endorse or promote products
+     derived from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  libjpeg-turbo
+
+  libjpeg-turbo Licenses libjpeg-turbo is covered by three compatible BSD-style
+  open source licenses:
+
+  The IJG (Independent JPEG Group) License, which is listed in README.ijg
+
+  This license applies to the libjpeg API library and associated programs (any
+  code inherited from libjpeg, and any modifications to that code.)
+
+  The Modified (3-clause) BSD License, which is listed below
+
+  This license covers the TurboJPEG API library and associated programs, as well
+  as the build system.
+
+  The zlib License
+
+  This license is a subset of the other two, and it covers the libjpeg-turbo
+  SIMD extensions.
+
+  Complying with the libjpeg-turbo Licenses This section provides a roll-up of
+  the libjpeg-turbo licensing terms, to the best of our understanding.
+
+  If you are distributing a modified version of the libjpeg-turbo source, then:
+
+  You cannot alter or remove any existing copyright or license notices from the
+  source.
+
+  Origin
+
+  Clause 1 of the IJG License Clause 1 of the Modified BSD License Clauses 1 and
+  3 of the zlib License You must add your own copyright notice to the header of
+  each source file you modified, so others can tell that you modified that file
+  (if there is not an existing copyright header in that file, then you can
+  simply add a notice stating that you modified the file.)
+
+  Origin
+
+  Clause 1 of the IJG License Clause 2 of the zlib License You must include the
+  IJG README file, and you must not alter any of the copyright or license text
+  in that file.
+
+  Origin
+
+  Clause 1 of the IJG License If you are distributing only libjpeg-turbo
+  binaries without the source, or if you are distributing an application that
+  statically links with libjpeg-turbo, then:
+
+  Your product documentation must include a message stating:
+
+  This software is based in part on the work of the Independent JPEG Group.
+
+  Origin
+
+  Clause 2 of the IJG license If your binary distribution includes or uses the
+  TurboJPEG API, then your product documentation must include the text of the
+  Modified BSD License (see below.)
+
+  Origin
+
+  Clause 2 of the Modified BSD License You cannot use the name of the IJG or The
+  libjpeg-turbo Project or the contributors thereof in advertising, publicity,
+  etc.
+
+  Origin
+
+  IJG License Clause 3 of the Modified BSD License The IJG and The libjpeg-turbo
+  Project do not warrant libjpeg-turbo to be free of defects, nor do we accept
+  any liability for undesirable consequences resulting from your use of the
+  software.
+
+  Origin
+
+  IJG License Modified BSD License zlib License The Modified (3-clause) BSD
+  License Copyright (C)2009-2021 D. R. Commander. All Rights Reserved.
+  Copyright (C)2015 Viktor Szathmáry. All Rights Reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+  Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.  Redistributions in binary
+  form must reproduce the above copyright notice, this list of conditions and
+  the following disclaimer in the documentation and/or other materials provided
+  with the distribution.  Neither the name of the libjpeg-turbo Project nor the
+  names of its contributors may be used to endorse or promote products derived
+  from this software without specific prior written permission.  THIS SOFTWARE
+  IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", AND ANY EXPRESS
+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+  EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+  OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+  Why Three Licenses?  The zlib License could have been used instead of the
+  Modified (3-clause) BSD License, and since the IJG License effectively
+  subsumes the distribution conditions of the zlib License, this would have
+  effectively placed libjpeg-turbo binary distributions under the IJG License.
+  However, the IJG License specifically refers to the Independent JPEG Group and
+  does not extend attribution and endorsement protections to other entities.
+  Thus, it was desirable to choose a license that granted us the same
+  protections for new code that were granted to the IJG for code derived from
+  their software.
+
+
+  libpng
+
+
+  This copy of the libpng notices is provided for your convenience.  In case of
+  any discrepancy between this copy and the notices in the file png.h that is
+  included in the libpng distribution, the latter shall prevail.
+
+  COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
+
+  If you modify libpng you may insert additional notices immediately following
+  this sentence.
+
+  This code is released under the libpng license.
+
+  libpng versions 1.2.6, August 15, 2004, through 1.2.45, July 7, 2011, are
+  Copyright (c) 2004, 2006-2009 Glenn Randers-Pehrson, and are
+  distributed according to the same disclaimer and license as libpng-1.2.5
+  with the following individual added to the list of Contributing Authors
+
+     Cosmin Truta
+
+  libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
+  Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
+  distributed according to the same disclaimer and license as libpng-1.0.6
+  with the following individuals added to the list of Contributing Authors
+
+     Simon-Pierre Cadieux
+     Eric S. Raymond
+     Gilles Vollant
+
+  and with the following additions to the disclaimer:
+
+     There is no warranty against interference with your enjoyment of the
+     library or against infringement.  There is no warranty that our
+     efforts or the library will fulfill any of your particular purposes
+     or needs.  This library is provided with all faults, and the entire
+     risk of satisfactory quality, performance, accuracy, and effort is with
+     the user.
+
+  libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
+  Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are
+  distributed according to the same disclaimer and license as libpng-0.96,
+  with the following individuals added to the list of Contributing Authors:
+
+     Tom Lane
+     Glenn Randers-Pehrson
+     Willem van Schaik
+
+  libpng versions 0.89, June 1996, through 0.96, May 1997, are
+  Copyright (c) 1996, 1997 Andreas Dilger
+  Distributed according to the same disclaimer and license as libpng-0.88,
+  with the following individuals added to the list of Contributing Authors:
+
+     John Bowler
+     Kevin Bracey
+     Sam Bushell
+     Magnus Holmgren
+     Greg Roelofs
+     Tom Tanner
+
+  libpng versions 0.5, May 1995, through 0.88, January 1996, are
+  Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
+
+  For the purposes of this copyright and license, "Contributing Authors"
+  is defined as the following set of individuals:
+
+     Andreas Dilger
+     Dave Martindale
+     Guy Eric Schalnat
+     Paul Schmidt
+     Tim Wegner
+
+  The PNG Reference Library is supplied "AS IS".  The Contributing Authors
+  and Group 42, Inc. disclaim all warranties, expressed or implied,
+  including, without limitation, the warranties of merchantability and of
+  fitness for any purpose.  The Contributing Authors and Group 42, Inc.
+  assume no liability for direct, indirect, incidental, special, exemplary,
+  or consequential damages, which may result from the use of the PNG
+  Reference Library, even if advised of the possibility of such damage.
+
+  Permission is hereby granted to use, copy, modify, and distribute this
+  source code, or portions hereof, for any purpose, without fee, subject
+  to the following restrictions:
+
+  1. The origin of this source code must not be misrepresented.
+
+  2. Altered versions must be plainly marked as such and must not
+     be misrepresented as being the original source.
+
+  3. This Copyright notice may not be removed or altered from any
+     source or altered source distribution.
+
+  The Contributing Authors and Group 42, Inc. specifically permit, without
+  fee, and encourage the use of this source code as a component to
+  supporting the PNG file format in commercial products.  If you use this
+  source code in a product, acknowledgment is not required but would be
+  appreciated.
+
+
+  A "png_get_copyright" function is available, for convenient use in "about"
+  boxes and the like:
+
+     printf("%s",png_get_copyright(NULL));
+
+  Also, the PNG logo (in PNG format, of course) is supplied in the
+  files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
+
+  Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is a
+  certification mark of the Open Source Initiative.
+
+  Glenn Randers-Pehrson
+  glennrp at users.sourceforge.net
+  July 7, 2011
+
+
+
+
+
+  WebP image encoder/decoder
+
+
+  Copyright (c) 2010, Google Inc. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+
+    * Neither the name of Google nor the names of its contributors may
+      be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+  Additional IP Rights Grant (Patents)
+
+  "This implementation" means the copyrightable works distributed by
+  Google as part of the WebM Project.
+
+  Google hereby grants to you a perpetual, worldwide, non-exclusive,
+  no-charge, royalty-free, irrevocable (except as stated in this section)
+  patent license to make, have made, use, offer to sell, sell, import,
+  transfer, and otherwise run, modify and propagate the contents of this
+  implementation of VP8, where such license applies only to those patent
+  claims, both currently owned by Google and acquired in the future,
+  licensable by Google that are necessarily infringed by this
+  implementation of VP8. This grant does not include claims that would be
+  infringed only as a consequence of further modification of this
+  implementation. If you or your agent or exclusive licensee institute or
+  order or agree to the institution of patent litigation against any
+  entity (including a cross-claim or counterclaim in a lawsuit) alleging
+  that this implementation of VP8 or any code incorporated within this
+  implementation of VP8 constitutes direct or contributory patent
+  infringement, or inducement of patent infringement, then any patent
+  rights granted to you under this License for this implementation of VP8
+  shall terminate as of the date such litigation is filed.
+
+
+
+  libxml
+
+
+  Except where otherwise noted in the source code (e.g. the files hash.c,
+  list.c and the trio files, which are covered by a similar licence but
+  with different Copyright notices) all the files are:
+
+   Copyright (C) 1998-2003 Daniel Veillard.  All Rights Reserved.
+
+  Permission is hereby granted, free of charge, to any person obtaining a copy
+  of this software and associated documentation files (the "Software"), to deal
+  in the Software without restriction, including without limitation the rights
+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+  copies of the Software, and to permit persons to whom the Software is fur-
+  nished to do so, subject to the following conditions:
+
+  The above copyright notice and this permission notice shall be included in
+  all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
+  NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+  DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
+  NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+  Except as contained in this notice, the name of Daniel Veillard shall not
+  be used in advertising or otherwise to promote the sale, use or other deal-
+  ings in this Software without prior written authorization from him.
+
+
+
+  modp base64 decoder
+
+
+   * MODP_B64 - High performance base64 encoder/decoder
+   * Version 1.3 -- 17-Mar-2006
+   * http://modp.com/release/base64
+   *
+   * Copyright (c) 2005, 2006  Nick Galbreath -- nickg [at] modp [dot] com
+   * All rights reserved.
+   *
+   * Redistribution and use in source and binary forms, with or without
+   * modification, are permitted provided that the following conditions are
+   * met:
+   *
+   *   Redistributions of source code must retain the above copyright
+   *   notice, this list of conditions and the following disclaimer.
+   *
+   *   Redistributions in binary form must reproduce the above copyright
+   *   notice, this list of conditions and the following disclaimer in the
+   *   documentation and/or other materials provided with the distribution.
+   *
+   *   Neither the name of the modp.com nor the names of its
+   *   contributors may be used to endorse or promote products derived from
+   *   this software without specific prior written permission.
+   *
+   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  OTS (OpenType Sanitizer)
+
+
+  // Copyright (c) 2009 The Chromium Authors. All rights reserved.
+  //
+  // Redistribution and use in source and binary forms, with or without
+  // modification, are permitted provided that the following conditions are
+  // met:
+  //
+  //    * Redistributions of source code must retain the above copyright
+  // notice, this list of conditions and the following disclaimer.
+  //    * Redistributions in binary form must reproduce the above
+  // copyright notice, this list of conditions and the following disclaimer
+  // in the documentation and/or other materials provided with the
+  // distribution.
+  //    * Neither the name of Google Inc. nor the names of its
+  // contributors may be used to endorse or promote products derived from
+  // this software without specific prior written permission.
+  //
+  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  protobuf
+
+  This license applies to all parts of Protocol Buffers except the following:
+
+    - Atomicops support for generic gcc, located in
+      src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
+      This file is copyrighted by Red Hat Inc.
+
+    - Atomicops support for AIX/POWER, located in
+      src/google/protobuf/stubs/atomicops_internals_power.h.
+      This file is copyrighted by Bloomberg Finance LP.
+
+  Copyright 2014, Google Inc.  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+      * Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the following disclaimer
+  in the documentation and/or other materials provided with the
+  distribution.
+      * Neither the name of Google Inc. nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+  Code generated by the Protocol Buffer compiler is owned by the owner
+  of the input file used when generating it.  This code is not
+  standalone and requires a support library to be linked with it.  This
+  support library is itself covered by the above license.
+
+
+
+  Skia
+
+
+  // Copyright (c) 2011 Google Inc. All rights reserved.
+  //
+  // Redistribution and use in source and binary forms, with or without
+  // modification, are permitted provided that the following conditions are
+  // met:
+  //
+  //    * Redistributions of source code must retain the above copyright
+  // notice, this list of conditions and the following disclaimer.
+  //    * Redistributions in binary form must reproduce the above
+  // copyright notice, this list of conditions and the following disclaimer
+  // in the documentation and/or other materials provided with the
+  // distribution.
+  //    * Neither the name of Google Inc. nor the names of its
+  // contributors may be used to endorse or promote products derived from
+  // this software without specific prior written permission.
+  //
+  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+  zlib
+
+
+  /* zlib.h -- interface of the 'zlib' general purpose compression library
+    version 1.2.4, March 14th, 2010
+
+    Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
+
+    This software is provided 'as-is', without any express or implied
+    warranty.  In no event will the authors be held liable for any damages
+    arising from the use of this software.
+
+    Permission is granted to anyone to use this software for any purpose,
+    including commercial applications, and to alter it and redistribute it
+    freely, subject to the following restrictions:
+
+    1. The origin of this software must not be misrepresented; you must not
+       claim that you wrote the original software. If you use this software
+       in a product, an acknowledgment in the product documentation would be
+       appreciated but is not required.
+    2. Altered source versions must be plainly marked as such, and must not be
+       misrepresented as being the original software.
+    3. This notice may not be removed or altered from any source distribution.
+
+    Jean-loup Gailly
+    Mark Adler
+
+  */
+
+
+
+  WebKit
+
+  Copyright (C) 2006, 2007, 2008, 2009 Apple Inc.  All rights reserved.
+  Copyright (C) 2007-2009 Torch Mobile, Inc.
+  Copyright (C) Research In Motion Limited 2010. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+
+  THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+  OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  SuperFastHash
+
+  Paul Hsieh OLD BSD license
+
+  Copyright (c) 2010, Paul Hsieh
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without modification,
+  are permitted provided that the following conditions are met:
+
+  * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+  * Redistributions in binary form must reproduce the above copyright notice, this
+    list of conditions and the following disclaimer in the documentation and/or
+    other materials provided with the distribution.
+  * Neither my name, Paul Hsieh, nor the names of any other contributors to the
+    code use may not be used to endorse or promote products derived from this
+    software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  musl
+
+  ----------------------------------------------------------------------
+  Copyright © 2005-2014 Rich Felker, et al.
+
+  Permission is hereby granted, free of charge, to any person obtaining
+  a copy of this software and associated documentation files (the
+  "Software"), to deal in the Software without restriction, including
+  without limitation the rights to use, copy, modify, merge, publish,
+  distribute, sublicense, and/or sell copies of the Software, and to
+  permit persons to whom the Software is furnished to do so, subject to
+  the following conditions:
+
+  The above copyright notice and this permission notice shall be
+  included in all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+  ----------------------------------------------------------------------
+
+
+
+  brotli
+
+  Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
+
+  Permission is hereby granted, free of charge, to any person obtaining a copy
+  of this software and associated documentation files (the "Software"), to deal
+  in the Software without restriction, including without limitation the rights
+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+  copies of the Software, and to permit persons to whom the Software is
+  furnished to do so, subject to the following conditions:
+
+  The above copyright notice and this permission notice shall be included in
+  all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+  THE SOFTWARE.
+
+
+
+  woff2
+
+  Copyright (c) 2013-2017 by the WOFF2 Authors.
+
+  Permission is hereby granted, free of charge, to any person obtaining a copy
+  of this software and associated documentation files (the "Software"), to deal
+  in the Software without restriction, including without limitation the rights
+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+  copies of the Software, and to permit persons to whom the Software is
+  furnished to do so, subject to the following conditions:
+
+  The above copyright notice and this permission notice shall be included in
+  all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+  THE SOFTWARE.
+
+
+
+  jsmn(indirect usage in ce_cdm)
+
+  Copyright (c) 2010 Serge A. Zaitsev
+
+  Permission is hereby granted, free of charge, to any person obtaining a copy
+  of this software and associated documentation files (the "Software"), to deal
+  in the Software without restriction, including without limitation the rights
+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+  copies of the Software, and to permit persons to whom the Software is
+  furnished to do so, subject to the following conditions:
+
+  The above copyright notice and this permission notice shall be included in
+  all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+  THE SOFTWARE.
+
+
+
+  libvpx
+
+
+  Copyright (c) 2010, The WebM Project authors. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+
+    * Neither the name of Google, nor the WebM Project, nor the names
+      of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written
+      permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  ots
+
+
+  Copyright (c) 2009-2017 The OTS Authors. All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+     * Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+     * Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the following disclaimer
+  in the documentation and/or other materials provided with the
+  distribution.
+     * Neither the name of Google Inc. nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  quiche
+
+  // Copyright 2015 The Chromium Authors. All rights reserved.
+  //
+  // Redistribution and use in source and binary forms, with or without
+  // modification, are permitted provided that the following conditions are
+  // met:
+  //
+  //    * Redistributions of source code must retain the above copyright
+  // notice, this list of conditions and the following disclaimer.
+  //    * Redistributions in binary form must reproduce the above
+  // copyright notice, this list of conditions and the following disclaimer
+  // in the documentation and/or other materials provided with the
+  // distribution.
+  //    * Neither the name of Google Inc. nor the names of its
+  // contributors may be used to endorse or promote products derived from
+  // this software without specific prior written permission.
+  //
+  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  jinja2
+
+  Copyright (c) 2009 by the Jinja Team, see AUTHORS for more details.
+
+  Some rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+
+      * Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials provided
+        with the distribution.
+
+      * The names of the contributors may not be used to endorse or
+        promote products derived from this software without specific
+        prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  opus
+
+
+  Contributions to the collaboration shall not be considered confidential.
+
+  Each contributor represents and warrants that it has the right and
+  authority to license copyright in its contributions to the collaboration.
+
+  Each contributor agrees to license the copyright in the contributions
+  under the Modified (2-clause or 3-clause) BSD License or the Clear BSD License.
+
+  Please see the IPR statements submitted to the IETF for the complete
+  patent licensing details:
+
+  Xiph.Org Foundation:
+  https://datatracker.ietf.org/ipr/1524/
+
+  Microsoft Corporation:
+  https://datatracker.ietf.org/ipr/1914/
+
+  Skype Limited:
+  https://datatracker.ietf.org/ipr/1602/
+
+  Broadcom Corporation:
+  https://datatracker.ietf.org/ipr/1526/
+
+
+
+  LLVM
+
+
+  ==============================================================================
+  LLVM Release License
+  ==============================================================================
+  University of Illinois/NCSA
+  Open Source License
+
+  Copyright (c) 2003-2018 University of Illinois at Urbana-Champaign.
+  All rights reserved.
+
+  Developed by:
+
+      LLVM Team
+
+      University of Illinois at Urbana-Champaign
+
+      http://llvm.org
+
+  Permission is hereby granted, free of charge, to any person obtaining a copy of
+  this software and associated documentation files (the "Software"), to deal with
+  the Software without restriction, including without limitation the rights to
+  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+  of the Software, and to permit persons to whom the Software is furnished to do
+  so, subject to the following conditions:
+
+      * Redistributions of source code must retain the above copyright notice,
+        this list of conditions and the following disclaimers.
+
+      * Redistributions in binary form must reproduce the above copyright notice,
+        this list of conditions and the following disclaimers in the
+        documentation and/or other materials provided with the distribution.
+
+      * Neither the names of the LLVM Team, University of Illinois at
+        Urbana-Champaign, nor the names of its contributors may be used to
+        endorse or promote products derived from this Software without specific
+        prior written permission.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+  CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+  SOFTWARE.
+
+  ==============================================================================
+  Copyrights and Licenses for Third Party Software Distributed with LLVM:
+  ==============================================================================
+  The LLVM software contains code written by third parties.  Such software will
+  have its own individual LICENSE.TXT file in the directory in which it appears.
+  This file will describe the copyrights, license, and restrictions which apply
+  to that code.
+
+  The disclaimer of warranty in the University of Illinois Open Source License
+  applies to all code in the LLVM Distribution, and nothing in any of the
+  other licenses gives permission to use the names of the LLVM Team or the
+  University of Illinois to endorse or promote products derived from this
+  Software.
+
+  The following pieces of software have additional or alternate copyrights,
+  licenses, and/or restrictions:
+
+  Program             Directory
+  -------             ---------
+  Google Test         llvm/utils/unittest/googletest
+  OpenBSD regex       llvm/lib/Support/{reg*, COPYRIGHT.regex}
+  pyyaml tests        llvm/test/YAMLParser/{*.data, LICENSE.TXT}
+  ARM contributions   llvm/lib/Target/ARM/LICENSE.TXT
+  md5 contributions   llvm/lib/Support/MD5.cpp llvm/include/llvm/Support/MD5.h
+
+
+
+  libaom(headers only)
+
+
+  Copyright (c) 2016, Alliance for Open Media. All rights reserved.
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+  1. Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+  COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+  POSSIBILITY OF SUCH DAMAGE.
+
+
+  flac
+
+
+  Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions
+  are met:
+
+  - Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+
+  - Redistributions in binary form must reproduce the above copyright
+  notice, this list of conditions and the following disclaimer in the
+  documentation and/or other materials provided with the distribution.
+
+  - Neither the name of the Xiph.org Foundation nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
+  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  angle
+
+
+  // Copyright 2018 The ANGLE Project Authors.
+  // All rights reserved.
+  //
+  // Redistribution and use in source and binary forms, with or without
+  // modification, are permitted provided that the following conditions
+  // are met:
+  //
+  //     Redistributions of source code must retain the above copyright
+  //     notice, this list of conditions and the following disclaimer.
+  //
+  //     Redistributions in binary form must reproduce the above
+  //     copyright notice, this list of conditions and the following
+  //     disclaimer in the documentation and/or other materials provided
+  //     with the distribution.
+  //
+  //     Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
+  //     Ltd., nor the names of their contributors may be used to endorse
+  //     or promote products derived from this software without specific
+  //     prior written permission.
+  //
+  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+  // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+  // COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+  // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+  // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+  // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+  // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+  // POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  quirc
+
+
+  quirc -- QR-code recognition library
+  Copyright (C) 2010-2012 Daniel Beer <dlbeer@gmail.com>
+
+  Permission to use, copy, modify, and/or distribute this software for
+  any purpose with or without fee is hereby granted, provided that the
+  above copyright notice and this permission notice appear in all
+  copies.
+
+  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+  WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+  AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+  DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+  PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+  TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+  PERFORMANCE OF THIS SOFTWARE.
+
+
+
+  markupsafe
+
+
+  Copyright (c) 2010 by Armin Ronacher and contributors.  See AUTHORS
+  for more details.
+
+  Some rights reserved.
+
+  Redistribution and use in source and binary forms of the software as well
+  as documentation, with or without modification, are permitted provided
+  that the following conditions are met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above
+    copyright notice, this list of conditions and the following
+    disclaimer in the documentation and/or other materials provided
+    with the distribution.
+
+  * The names of the contributors may not be used to endorse or
+    promote products derived from this software without specific
+    prior written permission.
+
+  THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
+  NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+  OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+  DAMAGE.
+
+
+
+  websocket-client
+
+
+  Copyright 2018 Hiroki Ohtani.
+
+  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+   pyjson5
+
+
+   Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+  proxy_py
+
+
+  Copyright (c) 2013-2018 by Abhinav Singh and contributors.
+
+  Some rights reserved.
+
+  Redistribution and use in source and binary forms of the software as well
+  as documentation, with or without modification, are permitted provided
+  that the following conditions are met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above
+    copyright notice, this list of conditions and the following
+    disclaimer in the documentation and/or other materials provided
+    with the distribution.
+
+  * The names of the contributors may not be used to endorse or
+    promote products derived from this software without specific
+    prior written permission.
+
+  THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
+  NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+  OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+  DAMAGE.
+
+
+
+  web platform tests
+
+
+  This repository is covered by the dual-licensing approach described in:
+
+    http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html
+
+
+
+  ply
+
+
+  PLY (Python Lex-Yacc)                   Version 3.4
+
+  Copyright (C) 2001-2011,
+  David M. Beazley (Dabeaz LLC)
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+  * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+  * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+  * Neither the name of the David Beazley or Dabeaz LLC may be used to
+    endorse or promote products derived from this software without
+    specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  khronos
+
+
+  Copyright (c) 2007-2010 The Khronos Group Inc.
+
+  Permission is hereby granted, free of charge, to any person obtaining a
+  copy of this software and/or associated documentation files (the
+  "Materials"), to deal in the Materials without restriction, including
+  without limitation the rights to use, copy, modify, merge, publish,
+  distribute, sublicense, and/or sell copies of the Materials, and to
+  permit persons to whom the Materials are furnished to do so, subject to
+  the following conditions:
+
+  The above copyright notice and this permission notice shall be included
+  in all copies or substantial portions of the Materials.
+
+  THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+  MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+
+
+  SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+
+  Copyright (C) 1992 Silicon Graphics, Inc. All Rights Reserved.
+
+  Permission is hereby granted, free of charge, to any person obtaining a copy of
+  this software and associated documentation files (the "Software"), to deal in
+  the Software without restriction, including without limitation the rights to
+  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+  of the Software, and to permit persons to whom the Software is furnished to do
+  so, subject to the following conditions:
+
+  The above copyright notice including the dates of first publication and either
+  this permission notice or a reference to http://oss.sgi.com/projects/FreeB/
+  shall be included in all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SILICON
+  GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+  AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+  Except as contained in this notice, the name of Silicon Graphics, Inc. shall
+  not be used in advertising or otherwise to promote the sale, use or other
+  dealings in this Software without prior written authorization from Silicon
+  Graphics, Inc.
+
+
+
+  google_benchmark
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+  crashpad
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+  libdav1d
+
+
+  Copyright © 2018-2019, VideoLAN and dav1d authors
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+  1. Redistributions of source code must retain the above copyright notice, this
+     list of conditions and the following disclaimer.
+
+  2. Redistributions in binary form must reproduce the above copyright notice,
+     this list of conditions and the following disclaimer in the documentation
+     and/or other materials provided with the distribution.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  linux-syscall-support
+
+
+  Copyright (c) 2005-2011, Google Inc.
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+  * Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+  * Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the following disclaimer
+  in the documentation and/or other materials provided with the
+  distribution.
+  * Neither the name of Google Inc. nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+  ---
+  Author: Markus Gutschke
+
+
+
+  mini_chromium
+
+
+  // Copyright 2006-2008 The Chromium Authors. All rights reserved.
+  //
+  // Redistribution and use in source and binary forms, with or without
+  // modification, are permitted provided that the following conditions are
+  // met:
+  //
+  //    * Redistributions of source code must retain the above copyright
+  // notice, this list of conditions and the following disclaimer.
+  //    * Redistributions in binary form must reproduce the above
+  // copyright notice, this list of conditions and the following disclaimer
+  // in the documentation and/or other materials provided with the
+  // distribution.
+  //    * Neither the name of Google Inc. nor the names of its
+  // contributors may be used to endorse or promote products derived from
+  // this software without specific prior written permission.
+  //
+  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  googletest
+
+
+  Copyright 2008, Google Inc.
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+      * Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the following disclaimer
+  in the documentation and/or other materials provided with the
+  distribution.
+      * Neither the name of Google Inc. nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+  lz4_lib
+
+
+  LZ4 Library
+  Copyright (c) 2011-2016, Yann Collet
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without modification,
+  are permitted provided that the following conditions are met:
+
+  * Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above copyright notice, this
+    list of conditions and the following disclaimer in the documentation and/or
+    other materials provided with the distribution.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+  libwebp
+
+  Copyright (c) 2010, Google Inc. All rights reserved.  Redistribution and use
+  in source and binary forms, with or without modification, are permitted
+  provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of Google nor the names of its contributors may be used
+      to endorse or promote products derived from this software without specific
+      prior written permission.
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+  HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+  AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+  COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  Additional IP Rights Grant (Patents) ------------------------------------
+  "These implementations" means the copyrightable works that implement the
+  WebM codecs distributed by Google as part of the WebM Project.  Google
+  hereby grants to you a perpetual, worldwide, non-exclusive, no-charge,
+  royalty-free, irrevocable (except as stated in this section) patent
+  license to make, have made, use, offer to sell, sell, import, transfer,
+  and otherwise run, modify and propagate the contents of these
+  implementations of WebM, where such license applies only to those patent
+  claims, both currently owned by Google and acquired in the future,
+  licensable by Google that are necessarily infringed by these
+  implementations of WebM. This grant does not include claims that would be
+  infringed only as a consequence of further modification of these
+  implementations. If you or your agent or exclusive licensee institute or
+  order or agree to the institution of patent litigation or any other patent
+  enforcement activity against any entity (including a cross-claim or
+  counterclaim in a lawsuit) alleging that any of these implementations of
+  WebM or any code incorporated within any of these implementations of WebM
+  constitute direct or contributory patent infringement, or inducement of
+  patent infringement, then any patent rights granted to you under this
+  License for these implementations of WebM shall terminate as of the date
+  such litigation is filed.
diff --git a/cobalt/content/licenses/platform/default/licenses_cobalt.txt b/cobalt/content/licenses/platform/default/licenses_cobalt.txt
index be071f5..7d3b733 100644
--- a/cobalt/content/licenses/platform/default/licenses_cobalt.txt
+++ b/cobalt/content/licenses/platform/default/licenses_cobalt.txt
@@ -1729,885 +1729,6 @@
 
 
 
-  nss
-
-
-    NSS is available under the Mozilla Public License, version 2, a copy of which
-  is below.
-
-  Note on GPL Compatibility
-  -------------------------
-
-  The MPL 2, section 3.3, permits you to combine NSS with code under the GNU
-  General Public License (GPL) version 2, or any later version of that
-  license, to make a Larger Work, and distribute the result under the GPL.
-  The only condition is that you must also make NSS, and any changes you
-  have made to it, available to recipients under the terms of the MPL 2 also.
-
-  Anyone who receives the combined code from you does not have to continue
-  to dual licence in this way, and may, if they wish, distribute under the
-  terms of either of the two licences - either the MPL alone or the GPL
-  alone. However, we discourage people from distributing copies of NSS under
-  the GPL alone, because it means that any improvements they make cannot be
-  reincorporated into the main version of NSS. There is never a need to do
-  this for license compatibility reasons.
-
-  Note on LGPL Compatibility
-  --------------------------
-
-  The above also applies to combining MPLed code in a single library with
-  code under the GNU Lesser General Public License (LGPL) version 2.1, or
-  any later version of that license. If the LGPLed code and the MPLed code
-  are not in the same library, then the copyleft coverage of the two
-  licences does not overlap, so no issues arise.
-
-
-  Mozilla Public License Version 2.0
-  ==================================
-
-  1. Definitions
-  --------------
-
-  1.1. "Contributor"
-      means each individual or legal entity that creates, contributes to
-      the creation of, or owns Covered Software.
-
-  1.2. "Contributor Version"
-      means the combination of the Contributions of others (if any) used
-      by a Contributor and that particular Contributor's Contribution.
-
-  1.3. "Contribution"
-      means Covered Software of a particular Contributor.
-
-  1.4. "Covered Software"
-      means Source Code Form to which the initial Contributor has attached
-      the notice in Exhibit A, the Executable Form of such Source Code
-      Form, and Modifications of such Source Code Form, in each case
-      including portions thereof.
-
-  1.5. "Incompatible With Secondary Licenses"
-      means
-
-      (a) that the initial Contributor has attached the notice described
-          in Exhibit B to the Covered Software; or
-
-      (b) that the Covered Software was made available under the terms of
-          version 1.1 or earlier of the License, but not also under the
-          terms of a Secondary License.
-
-  1.6. "Executable Form"
-      means any form of the work other than Source Code Form.
-
-  1.7. "Larger Work"
-      means a work that combines Covered Software with other material, in
-      a separate file or files, that is not Covered Software.
-
-  1.8. "License"
-      means this document.
-
-  1.9. "Licensable"
-      means having the right to grant, to the maximum extent possible,
-      whether at the time of the initial grant or subsequently, any and
-      all of the rights conveyed by this License.
-
-  1.10. "Modifications"
-      means any of the following:
-
-      (a) any file in Source Code Form that results from an addition to,
-          deletion from, or modification of the contents of Covered
-          Software; or
-
-      (b) any new file in Source Code Form that contains any Covered
-          Software.
-
-  1.11. "Patent Claims" of a Contributor
-      means any patent claim(s), including without limitation, method,
-      process, and apparatus claims, in any patent Licensable by such
-      Contributor that would be infringed, but for the grant of the
-      License, by the making, using, selling, offering for sale, having
-      made, import, or transfer of either its Contributions or its
-      Contributor Version.
-
-  1.12. "Secondary License"
-      means either the GNU General Public License, Version 2.0, the GNU
-      Lesser General Public License, Version 2.1, the GNU Affero General
-      Public License, Version 3.0, or any later versions of those
-      licenses.
-
-  1.13. "Source Code Form"
-      means the form of the work preferred for making modifications.
-
-  1.14. "You" (or "Your")
-      means an individual or a legal entity exercising rights under this
-      License. For legal entities, "You" includes any entity that
-      controls, is controlled by, or is under common control with You. For
-      purposes of this definition, "control" means (a) the power, direct
-      or indirect, to cause the direction or management of such entity,
-      whether by contract or otherwise, or (b) ownership of more than
-      fifty percent (50%) of the outstanding shares or beneficial
-      ownership of such entity.
-
-  2. License Grants and Conditions
-  --------------------------------
-
-  2.1. Grants
-
-  Each Contributor hereby grants You a world-wide, royalty-free,
-  non-exclusive license:
-
-  (a) under intellectual property rights (other than patent or trademark)
-      Licensable by such Contributor to use, reproduce, make available,
-      modify, display, perform, distribute, and otherwise exploit its
-      Contributions, either on an unmodified basis, with Modifications, or
-      as part of a Larger Work; and
-
-  (b) under Patent Claims of such Contributor to make, use, sell, offer
-      for sale, have made, import, and otherwise transfer either its
-      Contributions or its Contributor Version.
-
-  2.2. Effective Date
-
-  The licenses granted in Section 2.1 with respect to any Contribution
-  become effective for each Contribution on the date the Contributor first
-  distributes such Contribution.
-
-  2.3. Limitations on Grant Scope
-
-  The licenses granted in this Section 2 are the only rights granted under
-  this License. No additional rights or licenses will be implied from the
-  distribution or licensing of Covered Software under this License.
-  Notwithstanding Section 2.1(b) above, no patent license is granted by a
-  Contributor:
-
-  (a) for any code that a Contributor has removed from Covered Software;
-      or
-
-  (b) for infringements caused by: (i) Your and any other third party's
-      modifications of Covered Software, or (ii) the combination of its
-      Contributions with other software (except as part of its Contributor
-      Version); or
-
-  (c) under Patent Claims infringed by Covered Software in the absence of
-      its Contributions.
-
-  This License does not grant any rights in the trademarks, service marks,
-  or logos of any Contributor (except as may be necessary to comply with
-  the notice requirements in Section 3.4).
-
-  2.4. Subsequent Licenses
-
-  No Contributor makes additional grants as a result of Your choice to
-  distribute the Covered Software under a subsequent version of this
-  License (see Section 10.2) or under the terms of a Secondary License (if
-  permitted under the terms of Section 3.3).
-
-  2.5. Representation
-
-  Each Contributor represents that the Contributor believes its
-  Contributions are its original creation(s) or it has sufficient rights
-  to grant the rights to its Contributions conveyed by this License.
-
-  2.6. Fair Use
-
-  This License is not intended to limit any rights You have under
-  applicable copyright doctrines of fair use, fair dealing, or other
-  equivalents.
-
-  2.7. Conditions
-
-  Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
-  in Section 2.1.
-
-  3. Responsibilities
-  -------------------
-
-  3.1. Distribution of Source Form
-
-  All distribution of Covered Software in Source Code Form, including any
-  Modifications that You create or to which You contribute, must be under
-  the terms of this License. You must inform recipients that the Source
-  Code Form of the Covered Software is governed by the terms of this
-  License, and how they can obtain a copy of this License. You may not
-  attempt to alter or restrict the recipients' rights in the Source Code
-  Form.
-
-  3.2. Distribution of Executable Form
-
-  If You distribute Covered Software in Executable Form then:
-
-  (a) such Covered Software must also be made available in Source Code
-      Form, as described in Section 3.1, and You must inform recipients of
-      the Executable Form how they can obtain a copy of such Source Code
-      Form by reasonable means in a timely manner, at a charge no more
-      than the cost of distribution to the recipient; and
-
-  (b) You may distribute such Executable Form under the terms of this
-      License, or sublicense it under different terms, provided that the
-      license for the Executable Form does not attempt to limit or alter
-      the recipients' rights in the Source Code Form under this License.
-
-  3.3. Distribution of a Larger Work
-
-  You may create and distribute a Larger Work under terms of Your choice,
-  provided that You also comply with the requirements of this License for
-  the Covered Software. If the Larger Work is a combination of Covered
-  Software with a work governed by one or more Secondary Licenses, and the
-  Covered Software is not Incompatible With Secondary Licenses, this
-  License permits You to additionally distribute such Covered Software
-  under the terms of such Secondary License(s), so that the recipient of
-  the Larger Work may, at their option, further distribute the Covered
-  Software under the terms of either this License or such Secondary
-  License(s).
-
-  3.4. Notices
-
-  You may not remove or alter the substance of any license notices
-  (including copyright notices, patent notices, disclaimers of warranty,
-  or limitations of liability) contained within the Source Code Form of
-  the Covered Software, except that You may alter any license notices to
-  the extent required to remedy known factual inaccuracies.
-
-  3.5. Application of Additional Terms
-
-  You may choose to offer, and to charge a fee for, warranty, support,
-  indemnity or liability obligations to one or more recipients of Covered
-  Software. However, You may do so only on Your own behalf, and not on
-  behalf of any Contributor. You must make it absolutely clear that any
-  such warranty, support, indemnity, or liability obligation is offered by
-  You alone, and You hereby agree to indemnify every Contributor for any
-  liability incurred by such Contributor as a result of warranty, support,
-  indemnity or liability terms You offer. You may include additional
-  disclaimers of warranty and limitations of liability specific to any
-  jurisdiction.
-
-  4. Inability to Comply Due to Statute or Regulation
-  ---------------------------------------------------
-
-  If it is impossible for You to comply with any of the terms of this
-  License with respect to some or all of the Covered Software due to
-  statute, judicial order, or regulation then You must: (a) comply with
-  the terms of this License to the maximum extent possible; and (b)
-  describe the limitations and the code they affect. Such description must
-  be placed in a text file included with all distributions of the Covered
-  Software under this License. Except to the extent prohibited by statute
-  or regulation, such description must be sufficiently detailed for a
-  recipient of ordinary skill to be able to understand it.
-
-  5. Termination
-  --------------
-
-  5.1. The rights granted under this License will terminate automatically
-  if You fail to comply with any of its terms. However, if You become
-  compliant, then the rights granted under this License from a particular
-  Contributor are reinstated (a) provisionally, unless and until such
-  Contributor explicitly and finally terminates Your grants, and (b) on an
-  ongoing basis, if such Contributor fails to notify You of the
-  non-compliance by some reasonable means prior to 60 days after You have
-  come back into compliance. Moreover, Your grants from a particular
-  Contributor are reinstated on an ongoing basis if such Contributor
-  notifies You of the non-compliance by some reasonable means, this is the
-  first time You have received notice of non-compliance with this License
-  from such Contributor, and You become compliant prior to 30 days after
-  Your receipt of the notice.
-
-  5.2. If You initiate litigation against any entity by asserting a patent
-  infringement claim (excluding declaratory judgment actions,
-  counter-claims, and cross-claims) alleging that a Contributor Version
-  directly or indirectly infringes any patent, then the rights granted to
-  You by any and all Contributors for the Covered Software under Section
-  2.1 of this License shall terminate.
-
-  5.3. In the event of termination under Sections 5.1 or 5.2 above, all
-  end user license agreements (excluding distributors and resellers) which
-  have been validly granted by You or Your distributors under this License
-  prior to termination shall survive termination.
-
-  ************************************************************************
-  *                                                                      *
-  *  6. Disclaimer of Warranty                                           *
-  *  -------------------------                                           *
-  *                                                                      *
-  *  Covered Software is provided under this License on an "as is"       *
-  *  basis, without warranty of any kind, either expressed, implied, or  *
-  *  statutory, including, without limitation, warranties that the       *
-  *  Covered Software is free of defects, merchantable, fit for a        *
-  *  particular purpose or non-infringing. The entire risk as to the     *
-  *  quality and performance of the Covered Software is with You.        *
-  *  Should any Covered Software prove defective in any respect, You     *
-  *  (not any Contributor) assume the cost of any necessary servicing,   *
-  *  repair, or correction. This disclaimer of warranty constitutes an   *
-  *  essential part of this License. No use of any Covered Software is   *
-  *  authorized under this License except under this disclaimer.         *
-  *                                                                      *
-  ************************************************************************
-
-  ************************************************************************
-  *                                                                      *
-  *  7. Limitation of Liability                                          *
-  *  --------------------------                                          *
-  *                                                                      *
-  *  Under no circumstances and under no legal theory, whether tort      *
-  *  (including negligence), contract, or otherwise, shall any           *
-  *  Contributor, or anyone who distributes Covered Software as          *
-  *  permitted above, be liable to You for any direct, indirect,         *
-  *  special, incidental, or consequential damages of any character      *
-  *  including, without limitation, damages for lost profits, loss of    *
-  *  goodwill, work stoppage, computer failure or malfunction, or any    *
-  *  and all other commercial damages or losses, even if such party      *
-  *  shall have been informed of the possibility of such damages. This   *
-  *  limitation of liability shall not apply to liability for death or   *
-  *  personal injury resulting from such party's negligence to the       *
-  *  extent applicable law prohibits such limitation. Some               *
-  *  jurisdictions do not allow the exclusion or limitation of           *
-  *  incidental or consequential damages, so this exclusion and          *
-  *  limitation may not apply to You.                                    *
-  *                                                                      *
-  ************************************************************************
-
-  8. Litigation
-  -------------
-
-  Any litigation relating to this License may be brought only in the
-  courts of a jurisdiction where the defendant maintains its principal
-  place of business and such litigation shall be governed by laws of that
-  jurisdiction, without reference to its conflict-of-law provisions.
-  Nothing in this Section shall prevent a party's ability to bring
-  cross-claims or counter-claims.
-
-  9. Miscellaneous
-  ----------------
-
-  This License represents the complete agreement concerning the subject
-  matter hereof. If any provision of this License is held to be
-  unenforceable, such provision shall be reformed only to the extent
-  necessary to make it enforceable. Any law or regulation which provides
-  that the language of a contract shall be construed against the drafter
-  shall not be used to construe this License against a Contributor.
-
-  10. Versions of the License
-  ---------------------------
-
-  10.1. New Versions
-
-  Mozilla Foundation is the license steward. Except as provided in Section
-  10.3, no one other than the license steward has the right to modify or
-  publish new versions of this License. Each version will be given a
-  distinguishing version number.
-
-  10.2. Effect of New Versions
-
-  You may distribute the Covered Software under the terms of the version
-  of the License under which You originally received the Covered Software,
-  or under the terms of any subsequent version published by the license
-  steward.
-
-  10.3. Modified Versions
-
-  If you create software not governed by this License, and you want to
-  create a new license for such software, you may create and use a
-  modified version of this License if you rename the license and remove
-  any references to the name of the license steward (except to note that
-  such modified license differs from this License).
-
-  10.4. Distributing Source Code Form that is Incompatible With Secondary
-  Licenses
-
-  If You choose to distribute Source Code Form that is Incompatible With
-  Secondary Licenses under the terms of this version of the License, the
-  notice described in Exhibit B of this License must be attached.
-
-  Exhibit A - Source Code Form License Notice
-  -------------------------------------------
-
-    This Source Code Form is subject to the terms of the Mozilla Public
-    License, v. 2.0. If a copy of the MPL was not distributed with this
-    file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-  If it is not possible or desirable to put the notice in a particular
-  file, then You may include the notice in a location (such as a LICENSE
-  file in a relevant directory) where a recipient would be likely to look
-  for such a notice.
-
-  You may add additional accurate notices of copyright ownership.
-
-  Exhibit B - "Incompatible With Secondary Licenses" Notice
-  ---------------------------------------------------------
-
-    This Source Code Form is "Incompatible With Secondary Licenses", as
-    defined by the Mozilla Public License, v. 2.0.
-
-
-
-  mozilla_security_manager
-
-                             MOZILLA PUBLIC LICENSE
-                                Version 1.1
-
-                              ---------------
-
-  1. Definitions.
-
-     1.0.1. "Commercial Use" means distribution or otherwise making the
-     Covered Code available to a third party.
-
-     1.1. "Contributor" means each entity that creates or contributes to
-     the creation of Modifications.
-
-     1.2. "Contributor Version" means the combination of the Original
-     Code, prior Modifications used by a Contributor, and the Modifications
-     made by that particular Contributor.
-
-     1.3. "Covered Code" means the Original Code or Modifications or the
-     combination of the Original Code and Modifications, in each case
-     including portions thereof.
-
-     1.4. "Electronic Distribution Mechanism" means a mechanism generally
-     accepted in the software development community for the electronic
-     transfer of data.
-
-     1.5. "Executable" means Covered Code in any form other than Source
-     Code.
-
-     1.6. "Initial Developer" means the individual or entity identified
-     as the Initial Developer in the Source Code notice required by Exhibit
-     A.
-
-     1.7. "Larger Work" means a work which combines Covered Code or
-     portions thereof with code not governed by the terms of this License.
-
-     1.8. "License" means this document.
-
-     1.8.1. "Licensable" means having the right to grant, to the maximum
-     extent possible, whether at the time of the initial grant or
-     subsequently acquired, any and all of the rights conveyed herein.
-
-     1.9. "Modifications" means any addition to or deletion from the
-     substance or structure of either the Original Code or any previous
-     Modifications. When Covered Code is released as a series of files, a
-     Modification is:
-          A. Any addition to or deletion from the contents of a file
-          containing Original Code or previous Modifications.
-
-          B. Any new file that contains any part of the Original Code or
-          previous Modifications.
-
-     1.10. "Original Code" means Source Code of computer software code
-     which is described in the Source Code notice required by Exhibit A as
-     Original Code, and which, at the time of its release under this
-     License is not already Covered Code governed by this License.
-
-     1.10.1. "Patent Claims" means any patent claim(s), now owned or
-     hereafter acquired, including without limitation,  method, process,
-     and apparatus claims, in any patent Licensable by grantor.
-
-     1.11. "Source Code" means the preferred form of the Covered Code for
-     making modifications to it, including all modules it contains, plus
-     any associated interface definition files, scripts used to control
-     compilation and installation of an Executable, or source code
-     differential comparisons against either the Original Code or another
-     well known, available Covered Code of the Contributor's choice. The
-     Source Code can be in a compressed or archival form, provided the
-     appropriate decompression or de-archiving software is widely available
-     for no charge.
-
-     1.12. "You" (or "Your")  means an individual or a legal entity
-     exercising rights under, and complying with all of the terms of, this
-     License or a future version of this License issued under Section 6.1.
-     For legal entities, "You" includes any entity which controls, is
-     controlled by, or is under common control with You. For purposes of
-     this definition, "control" means (a) the power, direct or indirect,
-     to cause the direction or management of such entity, whether by
-     contract or otherwise, or (b) ownership of more than fifty percent
-     (50%) of the outstanding shares or beneficial ownership of such
-     entity.
-
-  2. Source Code License.
-
-     2.1. The Initial Developer Grant.
-     The Initial Developer hereby grants You a world-wide, royalty-free,
-     non-exclusive license, subject to third party intellectual property
-     claims:
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Initial Developer to use, reproduce,
-          modify, display, perform, sublicense and distribute the Original
-          Code (or portions thereof) with or without Modifications, and/or
-          as part of a Larger Work; and
-
-          (b) under Patents Claims infringed by the making, using or
-          selling of Original Code, to make, have made, use, practice,
-          sell, and offer for sale, and/or otherwise dispose of the
-          Original Code (or portions thereof).
-
-          (c) the licenses granted in this Section 2.1(a) and (b) are
-          effective on the date Initial Developer first distributes
-          Original Code under the terms of this License.
-
-          (d) Notwithstanding Section 2.1(b) above, no patent license is
-          granted: 1) for code that You delete from the Original Code; 2)
-          separate from the Original Code;  or 3) for infringements caused
-          by: i) the modification of the Original Code or ii) the
-          combination of the Original Code with other software or devices.
-
-     2.2. Contributor Grant.
-     Subject to third party intellectual property claims, each Contributor
-     hereby grants You a world-wide, royalty-free, non-exclusive license
-
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Contributor, to use, reproduce, modify,
-          display, perform, sublicense and distribute the Modifications
-          created by such Contributor (or portions thereof) either on an
-          unmodified basis, with other Modifications, as Covered Code
-          and/or as part of a Larger Work; and
-
-          (b) under Patent Claims infringed by the making, using, or
-          selling of  Modifications made by that Contributor either alone
-          and/or in combination with its Contributor Version (or portions
-          of such combination), to make, use, sell, offer for sale, have
-          made, and/or otherwise dispose of: 1) Modifications made by that
-          Contributor (or portions thereof); and 2) the combination of
-          Modifications made by that Contributor with its Contributor
-          Version (or portions of such combination).
-
-          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
-          effective on the date Contributor first makes Commercial Use of
-          the Covered Code.
-
-          (d)    Notwithstanding Section 2.2(b) above, no patent license is
-          granted: 1) for any code that Contributor has deleted from the
-          Contributor Version; 2)  separate from the Contributor Version;
-          3)  for infringements caused by: i) third party modifications of
-          Contributor Version or ii)  the combination of Modifications made
-          by that Contributor with other software  (except as part of the
-          Contributor Version) or other devices; or 4) under Patent Claims
-          infringed by Covered Code in the absence of Modifications made by
-          that Contributor.
-
-  3. Distribution Obligations.
-
-     3.1. Application of License.
-     The Modifications which You create or to which You contribute are
-     governed by the terms of this License, including without limitation
-     Section 2.2. The Source Code version of Covered Code may be
-     distributed only under the terms of this License or a future version
-     of this License released under Section 6.1, and You must include a
-     copy of this License with every copy of the Source Code You
-     distribute. You may not offer or impose any terms on any Source Code
-     version that alters or restricts the applicable version of this
-     License or the recipients' rights hereunder. However, You may include
-     an additional document offering the additional rights described in
-     Section 3.5.
-
-     3.2. Availability of Source Code.
-     Any Modification which You create or to which You contribute must be
-     made available in Source Code form under the terms of this License
-     either on the same media as an Executable version or via an accepted
-     Electronic Distribution Mechanism to anyone to whom you made an
-     Executable version available; and if made available via Electronic
-     Distribution Mechanism, must remain available for at least twelve (12)
-     months after the date it initially became available, or at least six
-     (6) months after a subsequent version of that particular Modification
-     has been made available to such recipients. You are responsible for
-     ensuring that the Source Code version remains available even if the
-     Electronic Distribution Mechanism is maintained by a third party.
-
-     3.3. Description of Modifications.
-     You must cause all Covered Code to which You contribute to contain a
-     file documenting the changes You made to create that Covered Code and
-     the date of any change. You must include a prominent statement that
-     the Modification is derived, directly or indirectly, from Original
-     Code provided by the Initial Developer and including the name of the
-     Initial Developer in (a) the Source Code, and (b) in any notice in an
-     Executable version or related documentation in which You describe the
-     origin or ownership of the Covered Code.
-
-     3.4. Intellectual Property Matters
-          (a) Third Party Claims.
-          If Contributor has knowledge that a license under a third party's
-          intellectual property rights is required to exercise the rights
-          granted by such Contributor under Sections 2.1 or 2.2,
-          Contributor must include a text file with the Source Code
-          distribution titled "LEGAL" which describes the claim and the
-          party making the claim in sufficient detail that a recipient will
-          know whom to contact. If Contributor obtains such knowledge after
-          the Modification is made available as described in Section 3.2,
-          Contributor shall promptly modify the LEGAL file in all copies
-          Contributor makes available thereafter and shall take other steps
-          (such as notifying appropriate mailing lists or newsgroups)
-          reasonably calculated to inform those who received the Covered
-          Code that new knowledge has been obtained.
-
-          (b) Contributor APIs.
-          If Contributor's Modifications include an application programming
-          interface and Contributor has knowledge of patent licenses which
-          are reasonably necessary to implement that API, Contributor must
-          also include this information in the LEGAL file.
-
-               (c)    Representations.
-          Contributor represents that, except as disclosed pursuant to
-          Section 3.4(a) above, Contributor believes that Contributor's
-          Modifications are Contributor's original creation(s) and/or
-          Contributor has sufficient rights to grant the rights conveyed by
-          this License.
-
-     3.5. Required Notices.
-     You must duplicate the notice in Exhibit A in each file of the Source
-     Code.  If it is not possible to put such notice in a particular Source
-     Code file due to its structure, then You must include such notice in a
-     location (such as a relevant directory) where a user would be likely
-     to look for such a notice.  If You created one or more Modification(s)
-     You may add your name as a Contributor to the notice described in
-     Exhibit A.  You must also duplicate this License in any documentation
-     for the Source Code where You describe recipients' rights or ownership
-     rights relating to Covered Code.  You may choose to offer, and to
-     charge a fee for, warranty, support, indemnity or liability
-     obligations to one or more recipients of Covered Code. However, You
-     may do so only on Your own behalf, and not on behalf of the Initial
-     Developer or any Contributor. You must make it absolutely clear than
-     any such warranty, support, indemnity or liability obligation is
-     offered by You alone, and You hereby agree to indemnify the Initial
-     Developer and every Contributor for any liability incurred by the
-     Initial Developer or such Contributor as a result of warranty,
-     support, indemnity or liability terms You offer.
-
-     3.6. Distribution of Executable Versions.
-     You may distribute Covered Code in Executable form only if the
-     requirements of Section 3.1-3.5 have been met for that Covered Code,
-     and if You include a notice stating that the Source Code version of
-     the Covered Code is available under the terms of this License,
-     including a description of how and where You have fulfilled the
-     obligations of Section 3.2. The notice must be conspicuously included
-     in any notice in an Executable version, related documentation or
-     collateral in which You describe recipients' rights relating to the
-     Covered Code. You may distribute the Executable version of Covered
-     Code or ownership rights under a license of Your choice, which may
-     contain terms different from this License, provided that You are in
-     compliance with the terms of this License and that the license for the
-     Executable version does not attempt to limit or alter the recipient's
-     rights in the Source Code version from the rights set forth in this
-     License. If You distribute the Executable version under a different
-     license You must make it absolutely clear that any terms which differ
-     from this License are offered by You alone, not by the Initial
-     Developer or any Contributor. You hereby agree to indemnify the
-     Initial Developer and every Contributor for any liability incurred by
-     the Initial Developer or such Contributor as a result of any such
-     terms You offer.
-
-     3.7. Larger Works.
-     You may create a Larger Work by combining Covered Code with other code
-     not governed by the terms of this License and distribute the Larger
-     Work as a single product. In such a case, You must make sure the
-     requirements of this License are fulfilled for the Covered Code.
-
-  4. Inability to Comply Due to Statute or Regulation.
-
-     If it is impossible for You to comply with any of the terms of this
-     License with respect to some or all of the Covered Code due to
-     statute, judicial order, or regulation then You must: (a) comply with
-     the terms of this License to the maximum extent possible; and (b)
-     describe the limitations and the code they affect. Such description
-     must be included in the LEGAL file described in Section 3.4 and must
-     be included with all distributions of the Source Code. Except to the
-     extent prohibited by statute or regulation, such description must be
-     sufficiently detailed for a recipient of ordinary skill to be able to
-     understand it.
-
-  5. Application of this License.
-
-     This License applies to code to which the Initial Developer has
-     attached the notice in Exhibit A and to related Covered Code.
-
-  6. Versions of the License.
-
-     6.1. New Versions.
-     Netscape Communications Corporation ("Netscape") may publish revised
-     and/or new versions of the License from time to time. Each version
-     will be given a distinguishing version number.
-
-     6.2. Effect of New Versions.
-     Once Covered Code has been published under a particular version of the
-     License, You may always continue to use it under the terms of that
-     version. You may also choose to use such Covered Code under the terms
-     of any subsequent version of the License published by Netscape. No one
-     other than Netscape has the right to modify the terms applicable to
-     Covered Code created under this License.
-
-     6.3. Derivative Works.
-     If You create or use a modified version of this License (which you may
-     only do in order to apply it to code which is not already Covered Code
-     governed by this License), You must (a) rename Your license so that
-     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
-     "MPL", "NPL" or any confusingly similar phrase do not appear in your
-     license (except to note that your license differs from this License)
-     and (b) otherwise make it clear that Your version of the license
-     contains terms which differ from the Mozilla Public License and
-     Netscape Public License. (Filling in the name of the Initial
-     Developer, Original Code or Contributor in the notice described in
-     Exhibit A shall not of themselves be deemed to be modifications of
-     this License.)
-
-  7. DISCLAIMER OF WARRANTY.
-
-     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
-     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
-     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
-     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
-     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
-     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
-     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
-     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
-     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
-     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-  8. TERMINATION.
-
-     8.1.  This License and the rights granted hereunder will terminate
-     automatically if You fail to comply with terms herein and fail to cure
-     such breach within 30 days of becoming aware of the breach. All
-     sublicenses to the Covered Code which are properly granted shall
-     survive any termination of this License. Provisions which, by their
-     nature, must remain in effect beyond the termination of this License
-     shall survive.
-
-     8.2.  If You initiate litigation by asserting a patent infringement
-     claim (excluding declatory judgment actions) against Initial Developer
-     or a Contributor (the Initial Developer or Contributor against whom
-     You file such action is referred to as "Participant")  alleging that:
-
-     (a)  such Participant's Contributor Version directly or indirectly
-     infringes any patent, then any and all rights granted by such
-     Participant to You under Sections 2.1 and/or 2.2 of this License
-     shall, upon 60 days notice from Participant terminate prospectively,
-     unless if within 60 days after receipt of notice You either: (i)
-     agree in writing to pay Participant a mutually agreeable reasonable
-     royalty for Your past and future use of Modifications made by such
-     Participant, or (ii) withdraw Your litigation claim with respect to
-     the Contributor Version against such Participant.  If within 60 days
-     of notice, a reasonable royalty and payment arrangement are not
-     mutually agreed upon in writing by the parties or the litigation claim
-     is not withdrawn, the rights granted by Participant to You under
-     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
-     the 60 day notice period specified above.
-
-     (b)  any software, hardware, or device, other than such Participant's
-     Contributor Version, directly or indirectly infringes any patent, then
-     any rights granted to You by such Participant under Sections 2.1(b)
-     and 2.2(b) are revoked effective as of the date You first made, used,
-     sold, distributed, or had made, Modifications made by that
-     Participant.
-
-     8.3.  If You assert a patent infringement claim against Participant
-     alleging that such Participant's Contributor Version directly or
-     indirectly infringes any patent where such claim is resolved (such as
-     by license or settlement) prior to the initiation of patent
-     infringement litigation, then the reasonable value of the licenses
-     granted by such Participant under Sections 2.1 or 2.2 shall be taken
-     into account in determining the amount or value of any payment or
-     license.
-
-     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
-     all end user license agreements (excluding distributors and resellers)
-     which have been validly granted by You or any distributor hereunder
-     prior to termination shall survive termination.
-
-  9. LIMITATION OF LIABILITY.
-
-     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
-     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
-     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
-     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
-     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
-     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
-     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
-     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
-     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
-     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
-     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
-     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
-     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-  10. U.S. GOVERNMENT END USERS.
-
-     The Covered Code is a "commercial item," as that term is defined in
-     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
-     software" and "commercial computer software documentation," as such
-     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
-     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
-     all U.S. Government End Users acquire Covered Code with only those
-     rights set forth herein.
-
-  11. MISCELLANEOUS.
-
-     This License represents the complete agreement concerning subject
-     matter hereof. If any provision of this License is held to be
-     unenforceable, such provision shall be reformed only to the extent
-     necessary to make it enforceable. This License shall be governed by
-     California law provisions (except to the extent applicable law, if
-     any, provides otherwise), excluding its conflict-of-law provisions.
-     With respect to disputes in which at least one party is a citizen of,
-     or an entity chartered or registered to do business in the United
-     States of America, any litigation relating to this License shall be
-     subject to the jurisdiction of the Federal Courts of the Northern
-     District of California, with venue lying in Santa Clara County,
-     California, with the losing party responsible for costs, including
-     without limitation, court costs and reasonable attorneys' fees and
-     expenses. The application of the United Nations Convention on
-     Contracts for the International Sale of Goods is expressly excluded.
-     Any law or regulation which provides that the language of a contract
-     shall be construed against the drafter shall not apply to this
-     License.
-
-  12. RESPONSIBILITY FOR CLAIMS.
-
-     As between Initial Developer and the Contributors, each party is
-     responsible for claims and damages arising, directly or indirectly,
-     out of its utilization of rights under this License and You agree to
-     work with Initial Developer and Contributors to distribute such
-     responsibility on an equitable basis. Nothing herein is intended or
-     shall be deemed to constitute any admission of liability.
-
-  13. MULTIPLE-LICENSED CODE.
-
-     Initial Developer may designate portions of the Covered Code as
-     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
-     Developer permits you to utilize portions of the Covered Code under
-     Your choice of the NPL or the alternative licenses, if any, specified
-     by the Initial Developer in the file described in Exhibit A.
-
-  EXHIBIT A -Mozilla Public License.
-
-   The contents of this file are subject to the Mozilla Public License Version
-   1.1 (the "License"); you may not use this file except in compliance with
-   the License. You may obtain a copy of the License at
-   http://www.mozilla.org/MPL/
-
-   Software distributed under the License is distributed on an "AS IS" basis,
-   WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-   for the specific language governing rights and limitations under the
-   License.
-
-   The Original Code is mozilla.org code.
-
-   The Initial Developer of the Original Code is
-   Netscape Communications Corporation.
-   Portions created by the Initial Developer are Copyright (C) 2001
-   the Initial Developer. All Rights Reserved.
-
-   Contributor(s):
-
-   Alternatively, the contents of this file may be used under the terms of
-   either the GNU General Public License Version 2 or later (the "GPL"), or
-   the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-   in which case the provisions of the GPL or the LGPL are applicable instead
-   of those above. If you wish to allow use of your version of this file only
-   under the terms of either the GPL or the LGPL, and not to allow others to
-   use your version of this file under the terms of the MPL, indicate your
-   decision by deleting the provisions above and replace them with the notice
-   and other provisions required by the GPL or the LGPL. If you do not delete
-   the provisions above, a recipient may use your version of this file under
-   the terms of any one of the MPL, the GPL or the LGPL.
-
-
   mozilla(url/third_party/mozilla)
 
 
@@ -6886,6 +6007,7 @@
   License for these implementations of WebM shall terminate as of the date
   such litigation is filed.
 
+
   QR-Code-generator
 
   Copyright © 2020 Project Nayuki. (MIT License)
diff --git a/cobalt/content/licenses/platform/evergreen/licenses_cobalt.txt b/cobalt/content/licenses/platform/evergreen/licenses_cobalt.txt
index 9a104c6..e889e54 100644
--- a/cobalt/content/licenses/platform/evergreen/licenses_cobalt.txt
+++ b/cobalt/content/licenses/platform/evergreen/licenses_cobalt.txt
@@ -176,68 +176,6 @@
    limitations under the License.
 
 
-  Fraunhofer FDK AAC Codec Library
-
-  Software License for The Fraunhofer FDK AAC Codec Library for Android
-  © Copyright  1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
-    All rights reserved.
-  1.    INTRODUCTION
-  The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements
-  the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio.
-  This FDK AAC Codec software is intended to be used on a wide variety of Android devices.
-  AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual
-  audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by
-  independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part
-  of the MPEG specifications.
-  Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer)
-  may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners
-  individually for the purpose of encoding or decoding bit streams in products that are compliant with
-  the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license
-  these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec
-  software may already be covered under those patent licenses when it is used for those licensed purposes only.
-  Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality,
-  are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional
-  applications information and documentation.
-  2.    COPYRIGHT LICENSE
-  Redistribution and use in source and binary forms, with or without modification, are permitted without
-  payment of copyright license fees provided that you satisfy the following conditions:
-  You must retain the complete text of this software license in redistributions of the FDK AAC Codec or
-  your modifications thereto in source code form.
-  You must retain the complete text of this software license in the documentation and/or other materials
-  provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form.
-  You must make available free of charge copies of the complete source code of the FDK AAC Codec and your
-  modifications thereto to recipients of copies in binary form.
-  The name of Fraunhofer may not be used to endorse or promote products derived from this library without
-  prior written permission.
-  You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec
-  software or your modifications thereto.
-  Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software
-  and the date of any change. For modified versions of the FDK AAC Codec, the term
-  "Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term
-  "Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android."
-  3.    NO PATENT LICENSE
-  NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer,
-  ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with
-  respect to this software.
-  You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized
-  by appropriate patent licenses.
-  4.    DISCLAIMER
-  This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors
-  "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties
-  of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-  CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages,
-  including but not limited to procurement of substitute goods or services; loss of use, data, or profits,
-  or business interruption, however caused and on any theory of liability, whether in contract, strict
-  liability, or tort (including negligence), arising in any way out of the use of this software, even if
-  advised of the possibility of such damage.
-  5.    CONTACT INFORMATION
-  Fraunhofer Institute for Integrated Circuits IIS
-  Attention: Audio and Multimedia Departments - FDK AAC LL
-  Am Wolfsmantel 33
-  91058 Erlangen, Germany
-  www.iis.fraunhofer.de/amm
-  amm-info@iis.fraunhofer.de
-
 
   Chromium
 
@@ -1729,885 +1667,6 @@
 
 
 
-  nss
-
-
-    NSS is available under the Mozilla Public License, version 2, a copy of which
-  is below.
-
-  Note on GPL Compatibility
-  -------------------------
-
-  The MPL 2, section 3.3, permits you to combine NSS with code under the GNU
-  General Public License (GPL) version 2, or any later version of that
-  license, to make a Larger Work, and distribute the result under the GPL.
-  The only condition is that you must also make NSS, and any changes you
-  have made to it, available to recipients under the terms of the MPL 2 also.
-
-  Anyone who receives the combined code from you does not have to continue
-  to dual licence in this way, and may, if they wish, distribute under the
-  terms of either of the two licences - either the MPL alone or the GPL
-  alone. However, we discourage people from distributing copies of NSS under
-  the GPL alone, because it means that any improvements they make cannot be
-  reincorporated into the main version of NSS. There is never a need to do
-  this for license compatibility reasons.
-
-  Note on LGPL Compatibility
-  --------------------------
-
-  The above also applies to combining MPLed code in a single library with
-  code under the GNU Lesser General Public License (LGPL) version 2.1, or
-  any later version of that license. If the LGPLed code and the MPLed code
-  are not in the same library, then the copyleft coverage of the two
-  licences does not overlap, so no issues arise.
-
-
-  Mozilla Public License Version 2.0
-  ==================================
-
-  1. Definitions
-  --------------
-
-  1.1. "Contributor"
-      means each individual or legal entity that creates, contributes to
-      the creation of, or owns Covered Software.
-
-  1.2. "Contributor Version"
-      means the combination of the Contributions of others (if any) used
-      by a Contributor and that particular Contributor's Contribution.
-
-  1.3. "Contribution"
-      means Covered Software of a particular Contributor.
-
-  1.4. "Covered Software"
-      means Source Code Form to which the initial Contributor has attached
-      the notice in Exhibit A, the Executable Form of such Source Code
-      Form, and Modifications of such Source Code Form, in each case
-      including portions thereof.
-
-  1.5. "Incompatible With Secondary Licenses"
-      means
-
-      (a) that the initial Contributor has attached the notice described
-          in Exhibit B to the Covered Software; or
-
-      (b) that the Covered Software was made available under the terms of
-          version 1.1 or earlier of the License, but not also under the
-          terms of a Secondary License.
-
-  1.6. "Executable Form"
-      means any form of the work other than Source Code Form.
-
-  1.7. "Larger Work"
-      means a work that combines Covered Software with other material, in
-      a separate file or files, that is not Covered Software.
-
-  1.8. "License"
-      means this document.
-
-  1.9. "Licensable"
-      means having the right to grant, to the maximum extent possible,
-      whether at the time of the initial grant or subsequently, any and
-      all of the rights conveyed by this License.
-
-  1.10. "Modifications"
-      means any of the following:
-
-      (a) any file in Source Code Form that results from an addition to,
-          deletion from, or modification of the contents of Covered
-          Software; or
-
-      (b) any new file in Source Code Form that contains any Covered
-          Software.
-
-  1.11. "Patent Claims" of a Contributor
-      means any patent claim(s), including without limitation, method,
-      process, and apparatus claims, in any patent Licensable by such
-      Contributor that would be infringed, but for the grant of the
-      License, by the making, using, selling, offering for sale, having
-      made, import, or transfer of either its Contributions or its
-      Contributor Version.
-
-  1.12. "Secondary License"
-      means either the GNU General Public License, Version 2.0, the GNU
-      Lesser General Public License, Version 2.1, the GNU Affero General
-      Public License, Version 3.0, or any later versions of those
-      licenses.
-
-  1.13. "Source Code Form"
-      means the form of the work preferred for making modifications.
-
-  1.14. "You" (or "Your")
-      means an individual or a legal entity exercising rights under this
-      License. For legal entities, "You" includes any entity that
-      controls, is controlled by, or is under common control with You. For
-      purposes of this definition, "control" means (a) the power, direct
-      or indirect, to cause the direction or management of such entity,
-      whether by contract or otherwise, or (b) ownership of more than
-      fifty percent (50%) of the outstanding shares or beneficial
-      ownership of such entity.
-
-  2. License Grants and Conditions
-  --------------------------------
-
-  2.1. Grants
-
-  Each Contributor hereby grants You a world-wide, royalty-free,
-  non-exclusive license:
-
-  (a) under intellectual property rights (other than patent or trademark)
-      Licensable by such Contributor to use, reproduce, make available,
-      modify, display, perform, distribute, and otherwise exploit its
-      Contributions, either on an unmodified basis, with Modifications, or
-      as part of a Larger Work; and
-
-  (b) under Patent Claims of such Contributor to make, use, sell, offer
-      for sale, have made, import, and otherwise transfer either its
-      Contributions or its Contributor Version.
-
-  2.2. Effective Date
-
-  The licenses granted in Section 2.1 with respect to any Contribution
-  become effective for each Contribution on the date the Contributor first
-  distributes such Contribution.
-
-  2.3. Limitations on Grant Scope
-
-  The licenses granted in this Section 2 are the only rights granted under
-  this License. No additional rights or licenses will be implied from the
-  distribution or licensing of Covered Software under this License.
-  Notwithstanding Section 2.1(b) above, no patent license is granted by a
-  Contributor:
-
-  (a) for any code that a Contributor has removed from Covered Software;
-      or
-
-  (b) for infringements caused by: (i) Your and any other third party's
-      modifications of Covered Software, or (ii) the combination of its
-      Contributions with other software (except as part of its Contributor
-      Version); or
-
-  (c) under Patent Claims infringed by Covered Software in the absence of
-      its Contributions.
-
-  This License does not grant any rights in the trademarks, service marks,
-  or logos of any Contributor (except as may be necessary to comply with
-  the notice requirements in Section 3.4).
-
-  2.4. Subsequent Licenses
-
-  No Contributor makes additional grants as a result of Your choice to
-  distribute the Covered Software under a subsequent version of this
-  License (see Section 10.2) or under the terms of a Secondary License (if
-  permitted under the terms of Section 3.3).
-
-  2.5. Representation
-
-  Each Contributor represents that the Contributor believes its
-  Contributions are its original creation(s) or it has sufficient rights
-  to grant the rights to its Contributions conveyed by this License.
-
-  2.6. Fair Use
-
-  This License is not intended to limit any rights You have under
-  applicable copyright doctrines of fair use, fair dealing, or other
-  equivalents.
-
-  2.7. Conditions
-
-  Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
-  in Section 2.1.
-
-  3. Responsibilities
-  -------------------
-
-  3.1. Distribution of Source Form
-
-  All distribution of Covered Software in Source Code Form, including any
-  Modifications that You create or to which You contribute, must be under
-  the terms of this License. You must inform recipients that the Source
-  Code Form of the Covered Software is governed by the terms of this
-  License, and how they can obtain a copy of this License. You may not
-  attempt to alter or restrict the recipients' rights in the Source Code
-  Form.
-
-  3.2. Distribution of Executable Form
-
-  If You distribute Covered Software in Executable Form then:
-
-  (a) such Covered Software must also be made available in Source Code
-      Form, as described in Section 3.1, and You must inform recipients of
-      the Executable Form how they can obtain a copy of such Source Code
-      Form by reasonable means in a timely manner, at a charge no more
-      than the cost of distribution to the recipient; and
-
-  (b) You may distribute such Executable Form under the terms of this
-      License, or sublicense it under different terms, provided that the
-      license for the Executable Form does not attempt to limit or alter
-      the recipients' rights in the Source Code Form under this License.
-
-  3.3. Distribution of a Larger Work
-
-  You may create and distribute a Larger Work under terms of Your choice,
-  provided that You also comply with the requirements of this License for
-  the Covered Software. If the Larger Work is a combination of Covered
-  Software with a work governed by one or more Secondary Licenses, and the
-  Covered Software is not Incompatible With Secondary Licenses, this
-  License permits You to additionally distribute such Covered Software
-  under the terms of such Secondary License(s), so that the recipient of
-  the Larger Work may, at their option, further distribute the Covered
-  Software under the terms of either this License or such Secondary
-  License(s).
-
-  3.4. Notices
-
-  You may not remove or alter the substance of any license notices
-  (including copyright notices, patent notices, disclaimers of warranty,
-  or limitations of liability) contained within the Source Code Form of
-  the Covered Software, except that You may alter any license notices to
-  the extent required to remedy known factual inaccuracies.
-
-  3.5. Application of Additional Terms
-
-  You may choose to offer, and to charge a fee for, warranty, support,
-  indemnity or liability obligations to one or more recipients of Covered
-  Software. However, You may do so only on Your own behalf, and not on
-  behalf of any Contributor. You must make it absolutely clear that any
-  such warranty, support, indemnity, or liability obligation is offered by
-  You alone, and You hereby agree to indemnify every Contributor for any
-  liability incurred by such Contributor as a result of warranty, support,
-  indemnity or liability terms You offer. You may include additional
-  disclaimers of warranty and limitations of liability specific to any
-  jurisdiction.
-
-  4. Inability to Comply Due to Statute or Regulation
-  ---------------------------------------------------
-
-  If it is impossible for You to comply with any of the terms of this
-  License with respect to some or all of the Covered Software due to
-  statute, judicial order, or regulation then You must: (a) comply with
-  the terms of this License to the maximum extent possible; and (b)
-  describe the limitations and the code they affect. Such description must
-  be placed in a text file included with all distributions of the Covered
-  Software under this License. Except to the extent prohibited by statute
-  or regulation, such description must be sufficiently detailed for a
-  recipient of ordinary skill to be able to understand it.
-
-  5. Termination
-  --------------
-
-  5.1. The rights granted under this License will terminate automatically
-  if You fail to comply with any of its terms. However, if You become
-  compliant, then the rights granted under this License from a particular
-  Contributor are reinstated (a) provisionally, unless and until such
-  Contributor explicitly and finally terminates Your grants, and (b) on an
-  ongoing basis, if such Contributor fails to notify You of the
-  non-compliance by some reasonable means prior to 60 days after You have
-  come back into compliance. Moreover, Your grants from a particular
-  Contributor are reinstated on an ongoing basis if such Contributor
-  notifies You of the non-compliance by some reasonable means, this is the
-  first time You have received notice of non-compliance with this License
-  from such Contributor, and You become compliant prior to 30 days after
-  Your receipt of the notice.
-
-  5.2. If You initiate litigation against any entity by asserting a patent
-  infringement claim (excluding declaratory judgment actions,
-  counter-claims, and cross-claims) alleging that a Contributor Version
-  directly or indirectly infringes any patent, then the rights granted to
-  You by any and all Contributors for the Covered Software under Section
-  2.1 of this License shall terminate.
-
-  5.3. In the event of termination under Sections 5.1 or 5.2 above, all
-  end user license agreements (excluding distributors and resellers) which
-  have been validly granted by You or Your distributors under this License
-  prior to termination shall survive termination.
-
-  ************************************************************************
-  *                                                                      *
-  *  6. Disclaimer of Warranty                                           *
-  *  -------------------------                                           *
-  *                                                                      *
-  *  Covered Software is provided under this License on an "as is"       *
-  *  basis, without warranty of any kind, either expressed, implied, or  *
-  *  statutory, including, without limitation, warranties that the       *
-  *  Covered Software is free of defects, merchantable, fit for a        *
-  *  particular purpose or non-infringing. The entire risk as to the     *
-  *  quality and performance of the Covered Software is with You.        *
-  *  Should any Covered Software prove defective in any respect, You     *
-  *  (not any Contributor) assume the cost of any necessary servicing,   *
-  *  repair, or correction. This disclaimer of warranty constitutes an   *
-  *  essential part of this License. No use of any Covered Software is   *
-  *  authorized under this License except under this disclaimer.         *
-  *                                                                      *
-  ************************************************************************
-
-  ************************************************************************
-  *                                                                      *
-  *  7. Limitation of Liability                                          *
-  *  --------------------------                                          *
-  *                                                                      *
-  *  Under no circumstances and under no legal theory, whether tort      *
-  *  (including negligence), contract, or otherwise, shall any           *
-  *  Contributor, or anyone who distributes Covered Software as          *
-  *  permitted above, be liable to You for any direct, indirect,         *
-  *  special, incidental, or consequential damages of any character      *
-  *  including, without limitation, damages for lost profits, loss of    *
-  *  goodwill, work stoppage, computer failure or malfunction, or any    *
-  *  and all other commercial damages or losses, even if such party      *
-  *  shall have been informed of the possibility of such damages. This   *
-  *  limitation of liability shall not apply to liability for death or   *
-  *  personal injury resulting from such party's negligence to the       *
-  *  extent applicable law prohibits such limitation. Some               *
-  *  jurisdictions do not allow the exclusion or limitation of           *
-  *  incidental or consequential damages, so this exclusion and          *
-  *  limitation may not apply to You.                                    *
-  *                                                                      *
-  ************************************************************************
-
-  8. Litigation
-  -------------
-
-  Any litigation relating to this License may be brought only in the
-  courts of a jurisdiction where the defendant maintains its principal
-  place of business and such litigation shall be governed by laws of that
-  jurisdiction, without reference to its conflict-of-law provisions.
-  Nothing in this Section shall prevent a party's ability to bring
-  cross-claims or counter-claims.
-
-  9. Miscellaneous
-  ----------------
-
-  This License represents the complete agreement concerning the subject
-  matter hereof. If any provision of this License is held to be
-  unenforceable, such provision shall be reformed only to the extent
-  necessary to make it enforceable. Any law or regulation which provides
-  that the language of a contract shall be construed against the drafter
-  shall not be used to construe this License against a Contributor.
-
-  10. Versions of the License
-  ---------------------------
-
-  10.1. New Versions
-
-  Mozilla Foundation is the license steward. Except as provided in Section
-  10.3, no one other than the license steward has the right to modify or
-  publish new versions of this License. Each version will be given a
-  distinguishing version number.
-
-  10.2. Effect of New Versions
-
-  You may distribute the Covered Software under the terms of the version
-  of the License under which You originally received the Covered Software,
-  or under the terms of any subsequent version published by the license
-  steward.
-
-  10.3. Modified Versions
-
-  If you create software not governed by this License, and you want to
-  create a new license for such software, you may create and use a
-  modified version of this License if you rename the license and remove
-  any references to the name of the license steward (except to note that
-  such modified license differs from this License).
-
-  10.4. Distributing Source Code Form that is Incompatible With Secondary
-  Licenses
-
-  If You choose to distribute Source Code Form that is Incompatible With
-  Secondary Licenses under the terms of this version of the License, the
-  notice described in Exhibit B of this License must be attached.
-
-  Exhibit A - Source Code Form License Notice
-  -------------------------------------------
-
-    This Source Code Form is subject to the terms of the Mozilla Public
-    License, v. 2.0. If a copy of the MPL was not distributed with this
-    file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-  If it is not possible or desirable to put the notice in a particular
-  file, then You may include the notice in a location (such as a LICENSE
-  file in a relevant directory) where a recipient would be likely to look
-  for such a notice.
-
-  You may add additional accurate notices of copyright ownership.
-
-  Exhibit B - "Incompatible With Secondary Licenses" Notice
-  ---------------------------------------------------------
-
-    This Source Code Form is "Incompatible With Secondary Licenses", as
-    defined by the Mozilla Public License, v. 2.0.
-
-
-
-  mozilla_security_manager
-
-                             MOZILLA PUBLIC LICENSE
-                                Version 1.1
-
-                              ---------------
-
-  1. Definitions.
-
-     1.0.1. "Commercial Use" means distribution or otherwise making the
-     Covered Code available to a third party.
-
-     1.1. "Contributor" means each entity that creates or contributes to
-     the creation of Modifications.
-
-     1.2. "Contributor Version" means the combination of the Original
-     Code, prior Modifications used by a Contributor, and the Modifications
-     made by that particular Contributor.
-
-     1.3. "Covered Code" means the Original Code or Modifications or the
-     combination of the Original Code and Modifications, in each case
-     including portions thereof.
-
-     1.4. "Electronic Distribution Mechanism" means a mechanism generally
-     accepted in the software development community for the electronic
-     transfer of data.
-
-     1.5. "Executable" means Covered Code in any form other than Source
-     Code.
-
-     1.6. "Initial Developer" means the individual or entity identified
-     as the Initial Developer in the Source Code notice required by Exhibit
-     A.
-
-     1.7. "Larger Work" means a work which combines Covered Code or
-     portions thereof with code not governed by the terms of this License.
-
-     1.8. "License" means this document.
-
-     1.8.1. "Licensable" means having the right to grant, to the maximum
-     extent possible, whether at the time of the initial grant or
-     subsequently acquired, any and all of the rights conveyed herein.
-
-     1.9. "Modifications" means any addition to or deletion from the
-     substance or structure of either the Original Code or any previous
-     Modifications. When Covered Code is released as a series of files, a
-     Modification is:
-          A. Any addition to or deletion from the contents of a file
-          containing Original Code or previous Modifications.
-
-          B. Any new file that contains any part of the Original Code or
-          previous Modifications.
-
-     1.10. "Original Code" means Source Code of computer software code
-     which is described in the Source Code notice required by Exhibit A as
-     Original Code, and which, at the time of its release under this
-     License is not already Covered Code governed by this License.
-
-     1.10.1. "Patent Claims" means any patent claim(s), now owned or
-     hereafter acquired, including without limitation,  method, process,
-     and apparatus claims, in any patent Licensable by grantor.
-
-     1.11. "Source Code" means the preferred form of the Covered Code for
-     making modifications to it, including all modules it contains, plus
-     any associated interface definition files, scripts used to control
-     compilation and installation of an Executable, or source code
-     differential comparisons against either the Original Code or another
-     well known, available Covered Code of the Contributor's choice. The
-     Source Code can be in a compressed or archival form, provided the
-     appropriate decompression or de-archiving software is widely available
-     for no charge.
-
-     1.12. "You" (or "Your")  means an individual or a legal entity
-     exercising rights under, and complying with all of the terms of, this
-     License or a future version of this License issued under Section 6.1.
-     For legal entities, "You" includes any entity which controls, is
-     controlled by, or is under common control with You. For purposes of
-     this definition, "control" means (a) the power, direct or indirect,
-     to cause the direction or management of such entity, whether by
-     contract or otherwise, or (b) ownership of more than fifty percent
-     (50%) of the outstanding shares or beneficial ownership of such
-     entity.
-
-  2. Source Code License.
-
-     2.1. The Initial Developer Grant.
-     The Initial Developer hereby grants You a world-wide, royalty-free,
-     non-exclusive license, subject to third party intellectual property
-     claims:
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Initial Developer to use, reproduce,
-          modify, display, perform, sublicense and distribute the Original
-          Code (or portions thereof) with or without Modifications, and/or
-          as part of a Larger Work; and
-
-          (b) under Patents Claims infringed by the making, using or
-          selling of Original Code, to make, have made, use, practice,
-          sell, and offer for sale, and/or otherwise dispose of the
-          Original Code (or portions thereof).
-
-          (c) the licenses granted in this Section 2.1(a) and (b) are
-          effective on the date Initial Developer first distributes
-          Original Code under the terms of this License.
-
-          (d) Notwithstanding Section 2.1(b) above, no patent license is
-          granted: 1) for code that You delete from the Original Code; 2)
-          separate from the Original Code;  or 3) for infringements caused
-          by: i) the modification of the Original Code or ii) the
-          combination of the Original Code with other software or devices.
-
-     2.2. Contributor Grant.
-     Subject to third party intellectual property claims, each Contributor
-     hereby grants You a world-wide, royalty-free, non-exclusive license
-
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Contributor, to use, reproduce, modify,
-          display, perform, sublicense and distribute the Modifications
-          created by such Contributor (or portions thereof) either on an
-          unmodified basis, with other Modifications, as Covered Code
-          and/or as part of a Larger Work; and
-
-          (b) under Patent Claims infringed by the making, using, or
-          selling of  Modifications made by that Contributor either alone
-          and/or in combination with its Contributor Version (or portions
-          of such combination), to make, use, sell, offer for sale, have
-          made, and/or otherwise dispose of: 1) Modifications made by that
-          Contributor (or portions thereof); and 2) the combination of
-          Modifications made by that Contributor with its Contributor
-          Version (or portions of such combination).
-
-          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
-          effective on the date Contributor first makes Commercial Use of
-          the Covered Code.
-
-          (d)    Notwithstanding Section 2.2(b) above, no patent license is
-          granted: 1) for any code that Contributor has deleted from the
-          Contributor Version; 2)  separate from the Contributor Version;
-          3)  for infringements caused by: i) third party modifications of
-          Contributor Version or ii)  the combination of Modifications made
-          by that Contributor with other software  (except as part of the
-          Contributor Version) or other devices; or 4) under Patent Claims
-          infringed by Covered Code in the absence of Modifications made by
-          that Contributor.
-
-  3. Distribution Obligations.
-
-     3.1. Application of License.
-     The Modifications which You create or to which You contribute are
-     governed by the terms of this License, including without limitation
-     Section 2.2. The Source Code version of Covered Code may be
-     distributed only under the terms of this License or a future version
-     of this License released under Section 6.1, and You must include a
-     copy of this License with every copy of the Source Code You
-     distribute. You may not offer or impose any terms on any Source Code
-     version that alters or restricts the applicable version of this
-     License or the recipients' rights hereunder. However, You may include
-     an additional document offering the additional rights described in
-     Section 3.5.
-
-     3.2. Availability of Source Code.
-     Any Modification which You create or to which You contribute must be
-     made available in Source Code form under the terms of this License
-     either on the same media as an Executable version or via an accepted
-     Electronic Distribution Mechanism to anyone to whom you made an
-     Executable version available; and if made available via Electronic
-     Distribution Mechanism, must remain available for at least twelve (12)
-     months after the date it initially became available, or at least six
-     (6) months after a subsequent version of that particular Modification
-     has been made available to such recipients. You are responsible for
-     ensuring that the Source Code version remains available even if the
-     Electronic Distribution Mechanism is maintained by a third party.
-
-     3.3. Description of Modifications.
-     You must cause all Covered Code to which You contribute to contain a
-     file documenting the changes You made to create that Covered Code and
-     the date of any change. You must include a prominent statement that
-     the Modification is derived, directly or indirectly, from Original
-     Code provided by the Initial Developer and including the name of the
-     Initial Developer in (a) the Source Code, and (b) in any notice in an
-     Executable version or related documentation in which You describe the
-     origin or ownership of the Covered Code.
-
-     3.4. Intellectual Property Matters
-          (a) Third Party Claims.
-          If Contributor has knowledge that a license under a third party's
-          intellectual property rights is required to exercise the rights
-          granted by such Contributor under Sections 2.1 or 2.2,
-          Contributor must include a text file with the Source Code
-          distribution titled "LEGAL" which describes the claim and the
-          party making the claim in sufficient detail that a recipient will
-          know whom to contact. If Contributor obtains such knowledge after
-          the Modification is made available as described in Section 3.2,
-          Contributor shall promptly modify the LEGAL file in all copies
-          Contributor makes available thereafter and shall take other steps
-          (such as notifying appropriate mailing lists or newsgroups)
-          reasonably calculated to inform those who received the Covered
-          Code that new knowledge has been obtained.
-
-          (b) Contributor APIs.
-          If Contributor's Modifications include an application programming
-          interface and Contributor has knowledge of patent licenses which
-          are reasonably necessary to implement that API, Contributor must
-          also include this information in the LEGAL file.
-
-               (c)    Representations.
-          Contributor represents that, except as disclosed pursuant to
-          Section 3.4(a) above, Contributor believes that Contributor's
-          Modifications are Contributor's original creation(s) and/or
-          Contributor has sufficient rights to grant the rights conveyed by
-          this License.
-
-     3.5. Required Notices.
-     You must duplicate the notice in Exhibit A in each file of the Source
-     Code.  If it is not possible to put such notice in a particular Source
-     Code file due to its structure, then You must include such notice in a
-     location (such as a relevant directory) where a user would be likely
-     to look for such a notice.  If You created one or more Modification(s)
-     You may add your name as a Contributor to the notice described in
-     Exhibit A.  You must also duplicate this License in any documentation
-     for the Source Code where You describe recipients' rights or ownership
-     rights relating to Covered Code.  You may choose to offer, and to
-     charge a fee for, warranty, support, indemnity or liability
-     obligations to one or more recipients of Covered Code. However, You
-     may do so only on Your own behalf, and not on behalf of the Initial
-     Developer or any Contributor. You must make it absolutely clear than
-     any such warranty, support, indemnity or liability obligation is
-     offered by You alone, and You hereby agree to indemnify the Initial
-     Developer and every Contributor for any liability incurred by the
-     Initial Developer or such Contributor as a result of warranty,
-     support, indemnity or liability terms You offer.
-
-     3.6. Distribution of Executable Versions.
-     You may distribute Covered Code in Executable form only if the
-     requirements of Section 3.1-3.5 have been met for that Covered Code,
-     and if You include a notice stating that the Source Code version of
-     the Covered Code is available under the terms of this License,
-     including a description of how and where You have fulfilled the
-     obligations of Section 3.2. The notice must be conspicuously included
-     in any notice in an Executable version, related documentation or
-     collateral in which You describe recipients' rights relating to the
-     Covered Code. You may distribute the Executable version of Covered
-     Code or ownership rights under a license of Your choice, which may
-     contain terms different from this License, provided that You are in
-     compliance with the terms of this License and that the license for the
-     Executable version does not attempt to limit or alter the recipient's
-     rights in the Source Code version from the rights set forth in this
-     License. If You distribute the Executable version under a different
-     license You must make it absolutely clear that any terms which differ
-     from this License are offered by You alone, not by the Initial
-     Developer or any Contributor. You hereby agree to indemnify the
-     Initial Developer and every Contributor for any liability incurred by
-     the Initial Developer or such Contributor as a result of any such
-     terms You offer.
-
-     3.7. Larger Works.
-     You may create a Larger Work by combining Covered Code with other code
-     not governed by the terms of this License and distribute the Larger
-     Work as a single product. In such a case, You must make sure the
-     requirements of this License are fulfilled for the Covered Code.
-
-  4. Inability to Comply Due to Statute or Regulation.
-
-     If it is impossible for You to comply with any of the terms of this
-     License with respect to some or all of the Covered Code due to
-     statute, judicial order, or regulation then You must: (a) comply with
-     the terms of this License to the maximum extent possible; and (b)
-     describe the limitations and the code they affect. Such description
-     must be included in the LEGAL file described in Section 3.4 and must
-     be included with all distributions of the Source Code. Except to the
-     extent prohibited by statute or regulation, such description must be
-     sufficiently detailed for a recipient of ordinary skill to be able to
-     understand it.
-
-  5. Application of this License.
-
-     This License applies to code to which the Initial Developer has
-     attached the notice in Exhibit A and to related Covered Code.
-
-  6. Versions of the License.
-
-     6.1. New Versions.
-     Netscape Communications Corporation ("Netscape") may publish revised
-     and/or new versions of the License from time to time. Each version
-     will be given a distinguishing version number.
-
-     6.2. Effect of New Versions.
-     Once Covered Code has been published under a particular version of the
-     License, You may always continue to use it under the terms of that
-     version. You may also choose to use such Covered Code under the terms
-     of any subsequent version of the License published by Netscape. No one
-     other than Netscape has the right to modify the terms applicable to
-     Covered Code created under this License.
-
-     6.3. Derivative Works.
-     If You create or use a modified version of this License (which you may
-     only do in order to apply it to code which is not already Covered Code
-     governed by this License), You must (a) rename Your license so that
-     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
-     "MPL", "NPL" or any confusingly similar phrase do not appear in your
-     license (except to note that your license differs from this License)
-     and (b) otherwise make it clear that Your version of the license
-     contains terms which differ from the Mozilla Public License and
-     Netscape Public License. (Filling in the name of the Initial
-     Developer, Original Code or Contributor in the notice described in
-     Exhibit A shall not of themselves be deemed to be modifications of
-     this License.)
-
-  7. DISCLAIMER OF WARRANTY.
-
-     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
-     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
-     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
-     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
-     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
-     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
-     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
-     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
-     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
-     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-  8. TERMINATION.
-
-     8.1.  This License and the rights granted hereunder will terminate
-     automatically if You fail to comply with terms herein and fail to cure
-     such breach within 30 days of becoming aware of the breach. All
-     sublicenses to the Covered Code which are properly granted shall
-     survive any termination of this License. Provisions which, by their
-     nature, must remain in effect beyond the termination of this License
-     shall survive.
-
-     8.2.  If You initiate litigation by asserting a patent infringement
-     claim (excluding declatory judgment actions) against Initial Developer
-     or a Contributor (the Initial Developer or Contributor against whom
-     You file such action is referred to as "Participant")  alleging that:
-
-     (a)  such Participant's Contributor Version directly or indirectly
-     infringes any patent, then any and all rights granted by such
-     Participant to You under Sections 2.1 and/or 2.2 of this License
-     shall, upon 60 days notice from Participant terminate prospectively,
-     unless if within 60 days after receipt of notice You either: (i)
-     agree in writing to pay Participant a mutually agreeable reasonable
-     royalty for Your past and future use of Modifications made by such
-     Participant, or (ii) withdraw Your litigation claim with respect to
-     the Contributor Version against such Participant.  If within 60 days
-     of notice, a reasonable royalty and payment arrangement are not
-     mutually agreed upon in writing by the parties or the litigation claim
-     is not withdrawn, the rights granted by Participant to You under
-     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
-     the 60 day notice period specified above.
-
-     (b)  any software, hardware, or device, other than such Participant's
-     Contributor Version, directly or indirectly infringes any patent, then
-     any rights granted to You by such Participant under Sections 2.1(b)
-     and 2.2(b) are revoked effective as of the date You first made, used,
-     sold, distributed, or had made, Modifications made by that
-     Participant.
-
-     8.3.  If You assert a patent infringement claim against Participant
-     alleging that such Participant's Contributor Version directly or
-     indirectly infringes any patent where such claim is resolved (such as
-     by license or settlement) prior to the initiation of patent
-     infringement litigation, then the reasonable value of the licenses
-     granted by such Participant under Sections 2.1 or 2.2 shall be taken
-     into account in determining the amount or value of any payment or
-     license.
-
-     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
-     all end user license agreements (excluding distributors and resellers)
-     which have been validly granted by You or any distributor hereunder
-     prior to termination shall survive termination.
-
-  9. LIMITATION OF LIABILITY.
-
-     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
-     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
-     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
-     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
-     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
-     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
-     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
-     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
-     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
-     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
-     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
-     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
-     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-  10. U.S. GOVERNMENT END USERS.
-
-     The Covered Code is a "commercial item," as that term is defined in
-     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
-     software" and "commercial computer software documentation," as such
-     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
-     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
-     all U.S. Government End Users acquire Covered Code with only those
-     rights set forth herein.
-
-  11. MISCELLANEOUS.
-
-     This License represents the complete agreement concerning subject
-     matter hereof. If any provision of this License is held to be
-     unenforceable, such provision shall be reformed only to the extent
-     necessary to make it enforceable. This License shall be governed by
-     California law provisions (except to the extent applicable law, if
-     any, provides otherwise), excluding its conflict-of-law provisions.
-     With respect to disputes in which at least one party is a citizen of,
-     or an entity chartered or registered to do business in the United
-     States of America, any litigation relating to this License shall be
-     subject to the jurisdiction of the Federal Courts of the Northern
-     District of California, with venue lying in Santa Clara County,
-     California, with the losing party responsible for costs, including
-     without limitation, court costs and reasonable attorneys' fees and
-     expenses. The application of the United Nations Convention on
-     Contracts for the International Sale of Goods is expressly excluded.
-     Any law or regulation which provides that the language of a contract
-     shall be construed against the drafter shall not apply to this
-     License.
-
-  12. RESPONSIBILITY FOR CLAIMS.
-
-     As between Initial Developer and the Contributors, each party is
-     responsible for claims and damages arising, directly or indirectly,
-     out of its utilization of rights under this License and You agree to
-     work with Initial Developer and Contributors to distribute such
-     responsibility on an equitable basis. Nothing herein is intended or
-     shall be deemed to constitute any admission of liability.
-
-  13. MULTIPLE-LICENSED CODE.
-
-     Initial Developer may designate portions of the Covered Code as
-     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
-     Developer permits you to utilize portions of the Covered Code under
-     Your choice of the NPL or the alternative licenses, if any, specified
-     by the Initial Developer in the file described in Exhibit A.
-
-  EXHIBIT A -Mozilla Public License.
-
-   The contents of this file are subject to the Mozilla Public License Version
-   1.1 (the "License"); you may not use this file except in compliance with
-   the License. You may obtain a copy of the License at
-   http://www.mozilla.org/MPL/
-
-   Software distributed under the License is distributed on an "AS IS" basis,
-   WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-   for the specific language governing rights and limitations under the
-   License.
-
-   The Original Code is mozilla.org code.
-
-   The Initial Developer of the Original Code is
-   Netscape Communications Corporation.
-   Portions created by the Initial Developer are Copyright (C) 2001
-   the Initial Developer. All Rights Reserved.
-
-   Contributor(s):
-
-   Alternatively, the contents of this file may be used under the terms of
-   either the GNU General Public License Version 2 or later (the "GPL"), or
-   the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-   in which case the provisions of the GPL or the LGPL are applicable instead
-   of those above. If you wish to allow use of your version of this file only
-   under the terms of either the GPL or the LGPL, and not to allow others to
-   use your version of this file under the terms of the MPL, indicate your
-   decision by deleting the provisions above and replace them with the notice
-   and other provisions required by the GPL or the LGPL. If you do not delete
-   the provisions above, a recipient may use your version of this file under
-   the terms of any one of the MPL, the GPL or the LGPL.
-
-
   mozilla(url/third_party/mozilla)
 
 
@@ -3423,6 +2482,115 @@
 
 
 
+  libjpeg-turbo
+
+  libjpeg-turbo Licenses libjpeg-turbo is covered by three compatible BSD-style
+  open source licenses:
+
+  The IJG (Independent JPEG Group) License, which is listed in README.ijg
+
+  This license applies to the libjpeg API library and associated programs (any
+  code inherited from libjpeg, and any modifications to that code.)
+
+  The Modified (3-clause) BSD License, which is listed below
+
+  This license covers the TurboJPEG API library and associated programs, as well
+  as the build system.
+
+  The zlib License
+
+  This license is a subset of the other two, and it covers the libjpeg-turbo
+  SIMD extensions.
+
+  Complying with the libjpeg-turbo Licenses This section provides a roll-up of
+  the libjpeg-turbo licensing terms, to the best of our understanding.
+
+  If you are distributing a modified version of the libjpeg-turbo source, then:
+
+  You cannot alter or remove any existing copyright or license notices from the
+  source.
+
+  Origin
+
+  Clause 1 of the IJG License Clause 1 of the Modified BSD License Clauses 1 and
+  3 of the zlib License You must add your own copyright notice to the header of
+  each source file you modified, so others can tell that you modified that file
+  (if there is not an existing copyright header in that file, then you can
+  simply add a notice stating that you modified the file.)
+
+  Origin
+
+  Clause 1 of the IJG License Clause 2 of the zlib License You must include the
+  IJG README file, and you must not alter any of the copyright or license text
+  in that file.
+
+  Origin
+
+  Clause 1 of the IJG License If you are distributing only libjpeg-turbo
+  binaries without the source, or if you are distributing an application that
+  statically links with libjpeg-turbo, then:
+
+  Your product documentation must include a message stating:
+
+  This software is based in part on the work of the Independent JPEG Group.
+
+  Origin
+
+  Clause 2 of the IJG license If your binary distribution includes or uses the
+  TurboJPEG API, then your product documentation must include the text of the
+  Modified BSD License (see below.)
+
+  Origin
+
+  Clause 2 of the Modified BSD License You cannot use the name of the IJG or The
+  libjpeg-turbo Project or the contributors thereof in advertising, publicity,
+  etc.
+
+  Origin
+
+  IJG License Clause 3 of the Modified BSD License The IJG and The libjpeg-turbo
+  Project do not warrant libjpeg-turbo to be free of defects, nor do we accept
+  any liability for undesirable consequences resulting from your use of the
+  software.
+
+  Origin
+
+  IJG License Modified BSD License zlib License The Modified (3-clause) BSD
+  License Copyright (C)2009-2021 D. R. Commander. All Rights Reserved.
+  Copyright (C)2015 Viktor Szathmáry. All Rights Reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+  Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.  Redistributions in binary
+  form must reproduce the above copyright notice, this list of conditions and
+  the following disclaimer in the documentation and/or other materials provided
+  with the distribution.  Neither the name of the libjpeg-turbo Project nor the
+  names of its contributors may be used to endorse or promote products derived
+  from this software without specific prior written permission.  THIS SOFTWARE
+  IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", AND ANY EXPRESS
+  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+  EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+  OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+  Why Three Licenses?  The zlib License could have been used instead of the
+  Modified (3-clause) BSD License, and since the IJG License effectively
+  subsumes the distribution conditions of the zlib License, this would have
+  effectively placed libjpeg-turbo binary distributions under the IJG License.
+  However, the IJG License specifically refers to the Independent JPEG Group and
+  does not extend attribution and endorsement protections to other entities.
+  Thus, it was desirable to choose a license that granted us the same
+  protections for new code that were granted to the IJG for code derived from
+  their software.
+
+
   libpng
 
 
@@ -6731,6 +5899,52 @@
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
+  libwebp
+
+  Copyright (c) 2010, Google Inc. All rights reserved.  Redistribution and use
+  in source and binary forms, with or without modification, are permitted
+  provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of Google nor the names of its contributors may be used
+      to endorse or promote products derived from this software without specific
+      prior written permission.
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+  HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+  AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+  COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  Additional IP Rights Grant (Patents) ------------------------------------
+  "These implementations" means the copyrightable works that implement the
+  WebM codecs distributed by Google as part of the WebM Project.  Google
+  hereby grants to you a perpetual, worldwide, non-exclusive, no-charge,
+  royalty-free, irrevocable (except as stated in this section) patent
+  license to make, have made, use, offer to sell, sell, import, transfer,
+  and otherwise run, modify and propagate the contents of these
+  implementations of WebM, where such license applies only to those patent
+  claims, both currently owned by Google and acquired in the future,
+  licensable by Google that are necessarily infringed by these
+  implementations of WebM. This grant does not include claims that would be
+  infringed only as a consequence of further modification of these
+  implementations. If you or your agent or exclusive licensee institute or
+  order or agree to the institution of patent litigation or any other patent
+  enforcement activity against any entity (including a cross-claim or
+  counterclaim in a lawsuit) alleging that any of these implementations of
+  WebM or any code incorporated within any of these implementations of WebM
+  constitute direct or contributory patent infringement, or inducement of
+  patent infringement, then any patent rights granted to you under this
+  License for these implementations of WebM shall terminate as of the date
+  such litigation is filed.
+
 
   openh264
 
diff --git a/cobalt/content/ssl/certs/5273a94c.0 b/cobalt/content/ssl/certs/5273a94c.0
deleted file mode 100644
index 9748599..0000000
--- a/cobalt/content/ssl/certs/5273a94c.0
+++ /dev/null
@@ -1,36 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV
-BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC
-aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV
-BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1
-Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz
-MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+
-BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp
-em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
-ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY
-B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH
-D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF
-Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo
-q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D
-k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH
-fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut
-dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM
-ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8
-zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
-rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX
-U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6
-Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5
-XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF
-Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR
-HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY
-GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c
-77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3
-+GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK
-vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6
-FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl
-yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P
-AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD
-y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d
-NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA==
------END CERTIFICATE-----
diff --git a/cobalt/csp/content_security_policy.cc b/cobalt/csp/content_security_policy.cc
index ae9e12e..926ec1b 100644
--- a/cobalt/csp/content_security_policy.cc
+++ b/cobalt/csp/content_security_policy.cc
@@ -110,9 +110,6 @@
 
 ResponseHeaders::ResponseHeaders(
     const scoped_refptr<net::HttpResponseHeaders>& response) {
-  if (response == nullptr) {
-    return;
-  }
   response->GetNormalizedHeader("Content-Security-Policy",
                                 &content_security_policy_);
   response->GetNormalizedHeader("Content-Security-Policy-Report-Only",
diff --git a/cobalt/demos/content/partial-audio-frame/partial-audio-frame.js b/cobalt/demos/content/partial-audio-frame/partial-audio-frame.js
index 67f659b..60226bb 100644
--- a/cobalt/demos/content/partial-audio-frame/partial-audio-frame.js
+++ b/cobalt/demos/content/partial-audio-frame/partial-audio-frame.js
@@ -14,9 +14,27 @@
 
 "use strict";
 
-function getFmp4AacData(onDataReady) {
-  const FILE_NAME = 'fmp4-aac-44100-tiny.mp4';
+function getContentType(codec) {
+  if (codec == "aac") {
+    return 'audio/mp4; codecs="mp4a.40.2"';
+  } else if (codec == "opus") {
+    return 'audio/webm; codecs="opus"';
+  } else {
+    throw "Invalid codec: " + codec;
+  }
+}
 
+function getContentFilename(codec) {
+  if (codec == "aac") {
+    return 'fmp4-aac-44100-tiny.mp4';
+  } else if (codec == "opus") {
+    return 'webm-opus-48000-tiny.webm';
+  } else {
+    throw "Invalid codec: " + codec;
+  }
+}
+
+function getFmp4AacData(codec, onDataReady) {
   var xhr = new XMLHttpRequest;
   xhr.responseType = 'arraybuffer';
   xhr.addEventListener('readystatechange', function onreadystatechange() {
@@ -27,7 +45,7 @@
       onDataReady(xhr.response);
     }
   });
-  xhr.open('GET', FILE_NAME, true);
+  xhr.open('GET', getContentFilename(codec), true);
   console.log('Sending request for media segment ...');
   xhr.send();
 }
@@ -112,18 +130,24 @@
 }
 
 function playPartialAudio() {
+  var codec = 'aac';
+  if (window.location.search.indexOf('codec=opus') != -1) {
+    codec = "opus";
+  }
+
   window.setInterval(function() {
     document.getElementById('status').textContent =
-        'currentTime ' + document.getElementById('video').currentTime;
+        'codec: ' + codec + ', currentTime ' + document.getElementById('video').currentTime;
   }, 100);
 
-  getFmp4AacData(function(mediaSegment) {
+  console.log('Playing ' + codec);
+
+  getFmp4AacData(codec, function(mediaSegment) {
     createAndAttachMediaSource(function(event) {
       var mediaSource = event.target;
 
       console.log('Adding SourceBuffer ...');
-      var sourceBuffer =
-          mediaSource.addSourceBuffer('audio/mp4; codecs="mp4a.40.2"');
+      var sourceBuffer = mediaSource.addSourceBuffer(getContentType(codec));
 
       appendMediaSegment(mediaSource, sourceBuffer, mediaSegment);
     });
diff --git a/cobalt/demos/content/partial-audio-frame/webm-opus-48000-tiny.webm b/cobalt/demos/content/partial-audio-frame/webm-opus-48000-tiny.webm
new file mode 100644
index 0000000..080e95a
--- /dev/null
+++ b/cobalt/demos/content/partial-audio-frame/webm-opus-48000-tiny.webm
Binary files differ
diff --git a/cobalt/dom/dom_stat_tracker.cc b/cobalt/dom/dom_stat_tracker.cc
index 2846654..4fb57b9 100644
--- a/cobalt/dom/dom_stat_tracker.cc
+++ b/cobalt/dom/dom_stat_tracker.cc
@@ -20,7 +20,7 @@
 namespace dom {
 
 DomStatTracker::DomStatTracker(const std::string& name)
-    : web::StatTracker(name),
+    : web::StatTracker(name, "DOM"),
       count_html_element_(
           base::StringPrintf("Count.%s.DOM.HtmlElement", name.c_str()), 0,
           "Total number of HTML elements."),
diff --git a/cobalt/dom/eme/media_encrypted_event.cc b/cobalt/dom/eme/media_encrypted_event.cc
index 9302890..8752f76 100644
--- a/cobalt/dom/eme/media_encrypted_event.cc
+++ b/cobalt/dom/eme/media_encrypted_event.cc
@@ -15,24 +15,28 @@
 #include "cobalt/dom/eme/media_encrypted_event.h"
 
 #include "cobalt/base/tokens.h"
+#include "cobalt/web/environment_settings_helper.h"
 
 namespace cobalt {
 namespace dom {
 namespace eme {
 
 // See step 5 in https://www.w3.org/TR/encrypted-media/#initdata-encountered.
-MediaEncryptedEvent::MediaEncryptedEvent(const std::string& type)
+MediaEncryptedEvent::MediaEncryptedEvent(
+    script::EnvironmentSettings* environment_settings, const std::string& type)
     : Event(base::Token(type), kNotBubbles, kNotCancelable) {}
 
 // See step 5 in https://www.w3.org/TR/encrypted-media/#initdata-encountered.
 MediaEncryptedEvent::MediaEncryptedEvent(
-    const std::string& type, const MediaEncryptedEventInit& event_init_dict)
+    script::EnvironmentSettings* environment_settings, const std::string& type,
+    const MediaEncryptedEventInit& event_init_dict)
     : Event(base::Token(type), kNotBubbles, kNotCancelable),
       init_data_type_(event_init_dict.init_data_type()) {
   if (event_init_dict.init_data() && !event_init_dict.init_data()->IsNull()) {
+    auto* global_wrappable = web::get_global_wrappable(environment_settings);
     init_data_reference_.reset(
         new script::ScriptValue<script::ArrayBuffer>::Reference(
-            this, *event_init_dict.init_data()));
+            global_wrappable, *event_init_dict.init_data()));
   }
 }
 
diff --git a/cobalt/dom/eme/media_encrypted_event.h b/cobalt/dom/eme/media_encrypted_event.h
index 0f16091..390d6ad 100644
--- a/cobalt/dom/eme/media_encrypted_event.h
+++ b/cobalt/dom/eme/media_encrypted_event.h
@@ -21,6 +21,7 @@
 #include "base/memory/ref_counted.h"
 #include "cobalt/dom/eme/media_encrypted_event_init.h"
 #include "cobalt/script/array_buffer.h"
+#include "cobalt/script/environment_settings.h"
 #include "cobalt/script/wrappable.h"
 #include "cobalt/web/event.h"
 
@@ -35,8 +36,10 @@
   // Web API: MediaEncryptedEvent
   //
 
-  explicit MediaEncryptedEvent(const std::string& type);
-  MediaEncryptedEvent(const std::string& type,
+  MediaEncryptedEvent(script::EnvironmentSettings* environment_settings,
+                      const std::string& type);
+  MediaEncryptedEvent(script::EnvironmentSettings* environment_settings,
+                      const std::string& type,
                       const MediaEncryptedEventInit& event_init_dict);
 
   const std::string& init_data_type() const { return init_data_type_; }
diff --git a/cobalt/dom/eme/media_encrypted_event.idl b/cobalt/dom/eme/media_encrypted_event.idl
index 67a6acf..4ae1c50 100644
--- a/cobalt/dom/eme/media_encrypted_event.idl
+++ b/cobalt/dom/eme/media_encrypted_event.idl
@@ -14,7 +14,10 @@
 
 // https://www.w3.org/TR/encrypted-media/#mediaencryptedevent
 
-[Constructor(DOMString type, optional MediaEncryptedEventInit eventInitDict)]
+[
+  Constructor(DOMString type, optional MediaEncryptedEventInit eventInitDict),
+  ConstructorCallWith=EnvironmentSettings,
+]
 interface MediaEncryptedEvent : Event {
   readonly attribute DOMString initDataType;
   readonly attribute ArrayBuffer? initData;
diff --git a/cobalt/dom/eme/media_key_session.cc b/cobalt/dom/eme/media_key_session.cc
index c36eff2..a703d66 100644
--- a/cobalt/dom/eme/media_key_session.cc
+++ b/cobalt/dom/eme/media_key_session.cc
@@ -29,6 +29,7 @@
 #include "cobalt/web/context.h"
 #include "cobalt/web/dom_exception.h"
 #include "cobalt/web/environment_settings.h"
+#include "cobalt/web/environment_settings_helper.h"
 
 namespace cobalt {
 namespace dom {
@@ -137,14 +138,17 @@
 
   // 10.9. Use the CDM.
   initiated_by_generate_request_ = true;
+  auto* global_wrappable = web::get_global_wrappable(settings);
   drm_system_session_->GenerateUpdateRequest(
       init_data_type, init_data_buffer, init_data_buffer_size,
       base::Bind(&MediaKeySession::OnSessionUpdateRequestGenerated,
                  base::AsWeakPtr(this), settings,
-                 base::Owned(new VoidPromiseValue::Reference(this, promise))),
+                 base::Owned(new VoidPromiseValue::Reference(global_wrappable,
+                                                             promise))),
       base::Bind(&MediaKeySession::OnSessionUpdateRequestDidNotGenerate,
                  base::AsWeakPtr(this),
-                 base::Owned(new VoidPromiseValue::Reference(this, promise))));
+                 base::Owned(new VoidPromiseValue::Reference(global_wrappable,
+                                                             promise))));
 
   // 11. Return promise.
   return promise;
@@ -152,6 +156,7 @@
 
 // See https://www.w3.org/TR/encrypted-media/#dom-mediakeysession-update.
 script::Handle<script::Promise<void>> MediaKeySession::Update(
+    script::EnvironmentSettings* environment_settings,
     const web::BufferSource& response) {
   TRACE_EVENT0("cobalt::dom::eme", "MediaKeySession::Update()");
   script::Handle<script::Promise<void>> promise =
@@ -183,12 +188,15 @@
   // Sanitation is the responsibility of Starboard implementers.
 
   // 6.7. Use the CDM.
+  auto* global_wrappable = web::get_global_wrappable(environment_settings);
   drm_system_session_->Update(
       response_buffer, response_buffer_size,
       base::Bind(&MediaKeySession::OnSessionUpdated, base::AsWeakPtr(this),
-                 base::Owned(new VoidPromiseValue::Reference(this, promise))),
+                 base::Owned(new VoidPromiseValue::Reference(global_wrappable,
+                                                             promise))),
       base::Bind(&MediaKeySession::OnSessionDidNotUpdate, base::AsWeakPtr(this),
-                 base::Owned(new VoidPromiseValue::Reference(this, promise))));
+                 base::Owned(new VoidPromiseValue::Reference(global_wrappable,
+                                                             promise))));
 
   // 7. Return promise.
   return promise;
diff --git a/cobalt/dom/eme/media_key_session.h b/cobalt/dom/eme/media_key_session.h
index 0de0834..75bbd2d 100644
--- a/cobalt/dom/eme/media_key_session.h
+++ b/cobalt/dom/eme/media_key_session.h
@@ -64,6 +64,7 @@
       script::EnvironmentSettings* settings, const std::string& init_data_type,
       const web::BufferSource& init_data);
   script::Handle<script::Promise<void>> Update(
+      script::EnvironmentSettings* environment_settings,
       const web::BufferSource& response);
   script::Handle<script::Promise<void>> Close();
 
diff --git a/cobalt/dom/eme/media_key_session.idl b/cobalt/dom/eme/media_key_session.idl
index fd5a171..21032b7 100644
--- a/cobalt/dom/eme/media_key_session.idl
+++ b/cobalt/dom/eme/media_key_session.idl
@@ -25,7 +25,7 @@
   [CallWith=EnvironmentSettings] Promise<void> generateRequest(DOMString initDataType, BufferSource initData);
   // TODO: Trivially implement persistent sessions.
   // Promise<boolean> load(DOMString sessionId);
-  Promise<void> update(BufferSource response);
+  [CallWith=EnvironmentSettings] Promise<void> update(BufferSource response);
   Promise<void> close();
   // TODO: Implement |remove|.
   // Promise<void> remove();
diff --git a/cobalt/dom/eme/media_keys.cc b/cobalt/dom/eme/media_keys.cc
index e902445..5a3c25c 100644
--- a/cobalt/dom/eme/media_keys.cc
+++ b/cobalt/dom/eme/media_keys.cc
@@ -22,6 +22,7 @@
 #include "cobalt/dom/eme/media_key_session.h"
 #include "cobalt/web/context.h"
 #include "cobalt/web/dom_exception.h"
+#include "cobalt/web/environment_settings_helper.h"
 
 namespace cobalt {
 namespace dom {
@@ -93,10 +94,12 @@
   // 5.1 Let sanitized certificate be a validated and/or sanitized version of
   //     certificate.
   // 5.2 Use this object's cdm instance to process sanitized certificate.
+  auto* global_wrappable = web::get_global_wrappable(dom_settings_);
   drm_system_->UpdateServerCertificate(
       server_certificate_buffer, server_certificate_buffer_size,
       base::Bind(&MediaKeys::OnServerCertificateUpdated, base::AsWeakPtr(this),
-                 base::Owned(new BoolPromiseValue::Reference(this, promise))));
+                 base::Owned(new BoolPromiseValue::Reference(global_wrappable,
+                                                             promise))));
 
   // 5.3 and 5.4 are pending processing in OnServerCertificateUpdated().
   // 6. Return promise.
diff --git a/cobalt/dom/html_element.cc b/cobalt/dom/html_element.cc
index a30f22b..36ad437 100644
--- a/cobalt/dom/html_element.cc
+++ b/cobalt/dom/html_element.cc
@@ -580,6 +580,7 @@
 
   // 11. Scroll the element to x,scrollTop, with the scroll behavior being
   //     "auto".
+  node_document()->window()->CancelScroll(ui_nav_item_);
   float left, top;
   ui_nav_item_->GetContentOffset(&left, &top);
   ui_nav_item_->SetContentOffset(x, top);
@@ -633,6 +634,7 @@
 
   // 11. Scroll the element to scrollLeft,y, with the scroll behavior being
   //     "auto".
+  node_document()->window()->CancelScroll(ui_nav_item_);
   float left, top;
   ui_nav_item_->GetContentOffset(&left, &top);
   ui_nav_item_->SetContentOffset(left, y);
diff --git a/cobalt/dom/html_media_element.cc b/cobalt/dom/html_media_element.cc
index 5812afb..aaa4675 100644
--- a/cobalt/dom/html_media_element.cc
+++ b/cobalt/dom/html_media_element.cc
@@ -1713,8 +1713,9 @@
                                  init_data_length)
             .GetScriptValue());
   }
-  event_queue_.Enqueue(
-      new eme::MediaEncryptedEvent("encrypted", media_encrypted_event_init));
+  auto* environment_settings = html_element_context()->environment_settings();
+  event_queue_.Enqueue(new eme::MediaEncryptedEvent(
+      environment_settings, "encrypted", media_encrypted_event_init));
 }
 
 void HTMLMediaElement::ClearMediaSource() {
diff --git a/cobalt/dom/html_script_element.cc b/cobalt/dom/html_script_element.cc
index 3634e62..1a1f7ba 100644
--- a/cobalt/dom/html_script_element.cc
+++ b/cobalt/dom/html_script_element.cc
@@ -341,7 +341,7 @@
           base::Bind(
               &loader::FetcherFactory::CreateSecureFetcher,
               base::Unretained(html_element_context()->fetcher_factory()), url_,
-              csp_callback, request_mode_,
+              /*main_resource=*/false, csp_callback, request_mode_,
               document_->location() ? document_->location()->GetOriginAsObject()
                                     : loader::Origin(),
               disk_cache::kUncompiledScript, net::HttpRequestHeaders(),
@@ -443,7 +443,9 @@
             &prevent_gc_until_error_event_dispatch_);
       }
     } break;
-    default: { NOTREACHED(); }
+    default: {
+      NOTREACHED();
+    }
   }
 }
 
diff --git a/cobalt/dom/media_settings.cc b/cobalt/dom/media_settings.cc
index 411889d..2915df3 100644
--- a/cobalt/dom/media_settings.cc
+++ b/cobalt/dom/media_settings.cc
@@ -53,6 +53,12 @@
       LOG(INFO) << name << ": set to " << value;
       return true;
     }
+  } else if (name == "MediaSource.EnableCallingEndedWhenClosed") {
+    if (value == 0 || value == 1) {
+      is_calling_ended_when_closed_enabled_ = value != 0;
+      LOG(INFO) << name << ": set to " << value;
+      return true;
+    }
   } else if (name == "MediaSource.MaxSizeForImmediateJob") {
     if (value >= 0) {
       max_size_for_immediate_job_ = value;
diff --git a/cobalt/dom/media_settings.h b/cobalt/dom/media_settings.h
index a6acb1c..eace022 100644
--- a/cobalt/dom/media_settings.h
+++ b/cobalt/dom/media_settings.h
@@ -35,6 +35,7 @@
       const = 0;
   virtual base::Optional<bool> IsAsynchronousReductionEnabled() const = 0;
   virtual base::Optional<bool> IsAvoidCopyingArrayBufferEnabled() const = 0;
+  virtual base::Optional<bool> IsCallingEndedWhenClosedEnabled() const = 0;
   virtual base::Optional<int> GetMaxSizeForImmediateJob() const = 0;
   virtual base::Optional<int> GetMaxSourceBufferAppendSizeInBytes() const = 0;
 
@@ -71,6 +72,10 @@
     base::AutoLock auto_lock(lock_);
     return is_avoid_copying_array_buffer_enabled_;
   }
+  base::Optional<bool> IsCallingEndedWhenClosedEnabled() const override {
+    base::AutoLock auto_lock(lock_);
+    return is_calling_ended_when_closed_enabled_;
+  }
   base::Optional<int> GetMaxSizeForImmediateJob() const override {
     base::AutoLock auto_lock(lock_);
     return max_size_for_immediate_job_;
@@ -96,6 +101,7 @@
   base::Optional<int> minimum_processor_count_to_offload_algorithm_;
   base::Optional<bool> is_asynchronous_reduction_enabled_;
   base::Optional<bool> is_avoid_copying_array_buffer_enabled_;
+  base::Optional<bool> is_calling_ended_when_closed_enabled_;
   base::Optional<int> max_size_for_immediate_job_;
   base::Optional<int> max_source_buffer_append_size_in_bytes_;
 
diff --git a/cobalt/dom/media_settings_test.cc b/cobalt/dom/media_settings_test.cc
index 9b10847..8850f72 100644
--- a/cobalt/dom/media_settings_test.cc
+++ b/cobalt/dom/media_settings_test.cc
@@ -27,6 +27,7 @@
   EXPECT_FALSE(impl.GetMinimumProcessorCountToOffloadAlgorithm());
   EXPECT_FALSE(impl.IsAsynchronousReductionEnabled());
   EXPECT_FALSE(impl.IsAvoidCopyingArrayBufferEnabled());
+  EXPECT_FALSE(impl.IsCallingEndedWhenClosedEnabled());
   EXPECT_FALSE(impl.GetMaxSizeForImmediateJob());
   EXPECT_FALSE(impl.GetMaxSourceBufferAppendSizeInBytes());
   EXPECT_FALSE(impl.GetMediaElementTimeupdateEventIntervalInMilliseconds());
@@ -40,6 +41,7 @@
       impl.Set("MediaSource.MinimumProcessorCountToOffloadAlgorithm", 101));
   ASSERT_TRUE(impl.Set("MediaSource.EnableAsynchronousReduction", 1));
   ASSERT_TRUE(impl.Set("MediaSource.EnableAvoidCopyingArrayBuffer", 1));
+  ASSERT_TRUE(impl.Set("MediaSource.EnableCallingEndedWhenClosed", 1));
   ASSERT_TRUE(impl.Set("MediaSource.MaxSizeForImmediateJob", 103));
   ASSERT_TRUE(impl.Set("MediaSource.MaxSourceBufferAppendSizeInBytes", 100000));
   ASSERT_TRUE(
@@ -49,6 +51,7 @@
   EXPECT_EQ(impl.GetMinimumProcessorCountToOffloadAlgorithm().value(), 101);
   EXPECT_TRUE(impl.IsAsynchronousReductionEnabled().value());
   EXPECT_TRUE(impl.IsAvoidCopyingArrayBufferEnabled().value());
+  EXPECT_TRUE(impl.IsCallingEndedWhenClosedEnabled().value());
   EXPECT_EQ(impl.GetMaxSizeForImmediateJob().value(), 103);
   EXPECT_EQ(impl.GetMaxSourceBufferAppendSizeInBytes().value(), 100000);
   EXPECT_EQ(impl.GetMediaElementTimeupdateEventIntervalInMilliseconds().value(),
@@ -63,6 +66,7 @@
       impl.Set("MediaSource.MinimumProcessorCountToOffloadAlgorithm", -101));
   ASSERT_FALSE(impl.Set("MediaSource.EnableAsynchronousReduction", 2));
   ASSERT_FALSE(impl.Set("MediaSource.EnableAvoidCopyingArrayBuffer", 2));
+  ASSERT_FALSE(impl.Set("MediaSource.EnableCallingEndedWhenClosed", 2));
   ASSERT_FALSE(impl.Set("MediaSource.MaxSizeForImmediateJob", -103));
   ASSERT_FALSE(impl.Set("MediaSource.MaxSourceBufferAppendSizeInBytes", 0));
   ASSERT_FALSE(
@@ -72,6 +76,7 @@
   EXPECT_FALSE(impl.GetMinimumProcessorCountToOffloadAlgorithm());
   EXPECT_FALSE(impl.IsAsynchronousReductionEnabled());
   EXPECT_FALSE(impl.IsAvoidCopyingArrayBufferEnabled());
+  EXPECT_FALSE(impl.IsCallingEndedWhenClosedEnabled());
   EXPECT_FALSE(impl.GetMaxSizeForImmediateJob());
   EXPECT_FALSE(impl.GetMaxSourceBufferAppendSizeInBytes());
   EXPECT_FALSE(impl.GetMediaElementTimeupdateEventIntervalInMilliseconds());
@@ -85,6 +90,7 @@
       impl.Set("MediaSource.MinimumProcessorCountToOffloadAlgorithm", 0));
   ASSERT_TRUE(impl.Set("MediaSource.EnableAsynchronousReduction", 0));
   ASSERT_TRUE(impl.Set("MediaSource.EnableAvoidCopyingArrayBuffer", 0));
+  ASSERT_TRUE(impl.Set("MediaSource.EnableCallingEndedWhenClosed", 0));
   ASSERT_TRUE(impl.Set("MediaSource.MaxSizeForImmediateJob", 0));
   // O is an invalid value for "MediaSource.MaxSourceBufferAppendSizeInBytes".
   // O is an invalid value for
@@ -94,6 +100,7 @@
   EXPECT_EQ(impl.GetMinimumProcessorCountToOffloadAlgorithm().value(), 0);
   EXPECT_FALSE(impl.IsAsynchronousReductionEnabled().value());
   EXPECT_FALSE(impl.IsAvoidCopyingArrayBufferEnabled().value());
+  EXPECT_FALSE(impl.IsCallingEndedWhenClosedEnabled().value());
   EXPECT_EQ(impl.GetMaxSizeForImmediateJob().value(), 0);
 }
 
@@ -105,6 +112,7 @@
       impl.Set("MediaSource.MinimumProcessorCountToOffloadAlgorithm", 0));
   ASSERT_TRUE(impl.Set("MediaSource.EnableAsynchronousReduction", 0));
   ASSERT_TRUE(impl.Set("MediaSource.EnableAvoidCopyingArrayBuffer", 0));
+  ASSERT_TRUE(impl.Set("MediaSource.EnableCallingEndedWhenClosed", 0));
   ASSERT_TRUE(impl.Set("MediaSource.MaxSizeForImmediateJob", 0));
   ASSERT_TRUE(impl.Set("MediaSource.MaxSourceBufferAppendSizeInBytes", 1));
   ASSERT_TRUE(
@@ -115,6 +123,7 @@
       impl.Set("MediaSource.MinimumProcessorCountToOffloadAlgorithm", 1));
   ASSERT_TRUE(impl.Set("MediaSource.EnableAsynchronousReduction", 1));
   ASSERT_TRUE(impl.Set("MediaSource.EnableAvoidCopyingArrayBuffer", 1));
+  ASSERT_TRUE(impl.Set("MediaSource.EnableCallingEndedWhenClosed", 1));
   ASSERT_TRUE(impl.Set("MediaSource.MaxSizeForImmediateJob", 1));
   ASSERT_TRUE(impl.Set("MediaSource.MaxSourceBufferAppendSizeInBytes", 2));
   ASSERT_TRUE(
@@ -124,6 +133,7 @@
   EXPECT_EQ(impl.GetMinimumProcessorCountToOffloadAlgorithm().value(), 1);
   EXPECT_TRUE(impl.IsAsynchronousReductionEnabled().value());
   EXPECT_TRUE(impl.IsAvoidCopyingArrayBufferEnabled().value());
+  EXPECT_TRUE(impl.IsCallingEndedWhenClosedEnabled().value());
   EXPECT_EQ(impl.GetMaxSizeForImmediateJob().value(), 1);
   EXPECT_EQ(impl.GetMaxSourceBufferAppendSizeInBytes().value(), 2);
   EXPECT_EQ(impl.GetMediaElementTimeupdateEventIntervalInMilliseconds().value(),
diff --git a/cobalt/dom/media_source.cc b/cobalt/dom/media_source.cc
index e3e5223..8871b83 100644
--- a/cobalt/dom/media_source.cc
+++ b/cobalt/dom/media_source.cc
@@ -107,6 +107,15 @@
       false);
 }
 
+// If this function returns true, MediaSource::EndOfStreamAlgorithm() will call
+// SetReadyState(kMediaSourceReadyStateEnded) even if MediaSource object is
+// closed.
+// The default value is false.
+bool IsCallingEndedWhenClosedEnabled(web::EnvironmentSettings* settings) {
+  return GetMediaSettings(settings).IsCallingEndedWhenClosedEnabled().value_or(
+      false);
+}
+
 // If the size of a job that is part of an algorithm is less than or equal to
 // the return value of this function, the implementation will run the job
 // immediately instead of scheduling it to run later to reduce latency.
@@ -289,7 +298,23 @@
 }
 
 void MediaSource::EndOfStreamAlgorithm(MediaSourceEndOfStreamError error) {
-  SetReadyState(kMediaSourceReadyStateEnded);
+  if (IsClosed()) {
+    if (IsCallingEndedWhenClosedEnabled(environment_settings())) {
+      LOG(INFO) << "Setting state to ended when MediaSource object is closed";
+      // Calling the function below here leads to ANR in production, as
+      // EndOfStreamAlgorithm() can be called by SetReadyState().
+      // Calling SetReadyState() nestedly leads to re-entrance of Abort() on
+      // the SourceBuffer algorithm handle, where a mutex gets re-acquired.
+      // Keep this code path here so we have the option to revert it to the
+      // original behavior in production.
+      SetReadyState(kMediaSourceReadyStateEnded);
+    } else {
+      LOG(INFO)
+          << "Skip setting state to ended when MediaSource object is closed";
+    }
+  } else {
+    SetReadyState(kMediaSourceReadyStateEnded);
+  }
 
   PipelineStatus pipeline_status = PIPELINE_OK;
 
diff --git a/cobalt/dom/navigator_licenses_test.cc b/cobalt/dom/navigator_licenses_test.cc
index fade4a7..e5277aa 100644
--- a/cobalt/dom/navigator_licenses_test.cc
+++ b/cobalt/dom/navigator_licenses_test.cc
@@ -23,10 +23,11 @@
 // Tests the Navigator::licenses function for non-empty return.
 TEST(NavigatorLicensesTest, NonEmpty) {
   std::unique_ptr<web::Context> web_context(new web::testing::StubWebContext());
-  web_context->setup_environment_settings(
+  web_context->SetupEnvironmentSettings(
       new dom::testing::StubEnvironmentSettings());
   scoped_refptr<cobalt::dom::Navigator> navigator =
       new cobalt::dom::Navigator(web_context->environment_settings(), nullptr);
+  web_context->SetupFinished();
 
   ASSERT_TRUE(navigator != nullptr);
   EXPECT_FALSE(navigator->licenses().empty());
diff --git a/cobalt/dom/on_screen_keyboard.cc b/cobalt/dom/on_screen_keyboard.cc
index 6f8da1b..ec41ff4 100644
--- a/cobalt/dom/on_screen_keyboard.cc
+++ b/cobalt/dom/on_screen_keyboard.cc
@@ -19,6 +19,7 @@
 #include "base/callback.h"
 #include "base/compiler_specific.h"
 #include "cobalt/dom/window.h"
+#include "cobalt/web/environment_settings_helper.h"
 #include "cobalt/web/event_target.h"
 
 namespace cobalt {
@@ -87,6 +88,7 @@
     : web::EventTarget(settings),
       bridge_(bridge),
       script_value_factory_(script_value_factory),
+      environment_settings_(settings),
       next_ticket_(0) {
   DCHECK(bridge_) << "OnScreenKeyboardBridge must not be NULL";
   suggestions_supported_ = bridge_->SuggestionsSupported();
@@ -96,10 +98,12 @@
   script::Handle<script::Promise<void>> promise =
       script_value_factory_->CreateBasicPromise<void>();
   int ticket = next_ticket_++;
+  auto* global_wrappable = web::get_global_wrappable(environment_settings_);
   bool is_emplaced =
       ticket_to_show_promise_map_
           .emplace(ticket, std::unique_ptr<VoidPromiseValue::Reference>(
-                               new VoidPromiseValue::Reference(this, promise)))
+                               new VoidPromiseValue::Reference(global_wrappable,
+                                                               promise)))
           .second;
   DCHECK(is_emplaced);
   bridge_->Show(data_.c_str(), ticket);
@@ -125,10 +129,12 @@
   script::Handle<script::Promise<void>> promise =
       script_value_factory_->CreateBasicPromise<void>();
   int ticket = next_ticket_++;
+  auto* global_wrappable = web::get_global_wrappable(environment_settings_);
   bool is_emplaced =
       ticket_to_hide_promise_map_
           .emplace(ticket, std::unique_ptr<VoidPromiseValue::Reference>(
-                               new VoidPromiseValue::Reference(this, promise)))
+                               new VoidPromiseValue::Reference(global_wrappable,
+                                                               promise)))
           .second;
   DCHECK(is_emplaced);
   bridge_->Hide(ticket);
@@ -139,10 +145,12 @@
   script::Handle<script::Promise<void>> promise =
       script_value_factory_->CreateBasicPromise<void>();
   int ticket = next_ticket_++;
+  auto* global_wrappable = web::get_global_wrappable(environment_settings_);
   bool is_emplaced =
       ticket_to_focus_promise_map_
           .emplace(ticket, std::unique_ptr<VoidPromiseValue::Reference>(
-                               new VoidPromiseValue::Reference(this, promise)))
+                               new VoidPromiseValue::Reference(global_wrappable,
+                                                               promise)))
           .second;
   DCHECK(is_emplaced);
   bridge_->Focus(ticket);
@@ -153,10 +161,12 @@
   script::Handle<script::Promise<void>> promise =
       script_value_factory_->CreateBasicPromise<void>();
   int ticket = next_ticket_++;
+  auto* global_wrappable = web::get_global_wrappable(environment_settings_);
   bool is_emplaced =
       ticket_to_blur_promise_map_
           .emplace(ticket, std::unique_ptr<VoidPromiseValue::Reference>(
-                               new VoidPromiseValue::Reference(this, promise)))
+                               new VoidPromiseValue::Reference(global_wrappable,
+                                                               promise)))
           .second;
   DCHECK(is_emplaced);
   bridge_->Blur(ticket);
@@ -169,11 +179,12 @@
       script_value_factory_->CreateBasicPromise<void>();
   if (suggestions_supported_) {
     int ticket = next_ticket_++;
+    auto* global_wrappable = web::get_global_wrappable(environment_settings_);
     bool is_emplaced =
         ticket_to_update_suggestions_promise_map_
-            .emplace(ticket,
-                     std::unique_ptr<VoidPromiseValue::Reference>(
-                         new VoidPromiseValue::Reference(this, promise)))
+            .emplace(ticket, std::unique_ptr<VoidPromiseValue::Reference>(
+                                 new VoidPromiseValue::Reference(
+                                     global_wrappable, promise)))
             .second;
     DCHECK(is_emplaced);
     bridge_->UpdateSuggestions(suggestions, ticket);
diff --git a/cobalt/dom/on_screen_keyboard.h b/cobalt/dom/on_screen_keyboard.h
index ecad6bf..927a197 100644
--- a/cobalt/dom/on_screen_keyboard.h
+++ b/cobalt/dom/on_screen_keyboard.h
@@ -137,6 +137,7 @@
   OnScreenKeyboardBridge* bridge_;
 
   script::ScriptValueFactory* const script_value_factory_;
+  script::EnvironmentSettings* environment_settings_;
 
   std::string data_;
   bool is_composing_;
diff --git a/cobalt/dom/pointer_state.cc b/cobalt/dom/pointer_state.cc
index 619fadf..79f7974 100644
--- a/cobalt/dom/pointer_state.cc
+++ b/cobalt/dom/pointer_state.cc
@@ -15,6 +15,7 @@
 #include "cobalt/dom/pointer_state.h"
 
 #include <algorithm>
+#include <memory>
 #include <utility>
 
 #include "base/trace_event/trace_event.h"
@@ -297,6 +298,43 @@
   client_time_stamps_.erase(pointer_id);
 }
 
+void PointerState::SetPossibleScrollTargets(
+    int32_t pointer_id,
+    std::unique_ptr<PossibleScrollTargets> possible_scroll_targets) {
+  client_possible_scroll_targets_[pointer_id] =
+      std::move(possible_scroll_targets);
+}
+PossibleScrollTargets* PointerState::GetPossibleScrollTargets(
+    int32_t pointer_id) {
+  auto possible_scroll_targets =
+      client_possible_scroll_targets_.find(pointer_id);
+  if (possible_scroll_targets != client_possible_scroll_targets_.end()) {
+    return possible_scroll_targets->second.get();
+  }
+  return nullptr;
+}
+void PointerState::ClearPossibleScrollTargets(int32_t pointer_id) {
+  client_possible_scroll_targets_.erase(pointer_id);
+}
+
+void PointerState::SetClientTransformMatrix(int32_t pointer_id,
+                                            const math::Matrix3F& matrix) {
+  client_matrices_.emplace(pointer_id, matrix);
+}
+
+const math::Matrix3F& PointerState::GetClientTransformMatrix(
+    int32_t pointer_id) {
+  auto matrix_entry = client_matrices_.find(pointer_id);
+  if (matrix_entry != client_matrices_.end()) {
+    return matrix_entry->second;
+  }
+  return identity_matrix_;
+}
+
+void PointerState::ClearMatrix(int32_t pointer_id) {
+  client_matrices_.erase(pointer_id);
+}
+
 void PointerState::SetWasCancelled(int32_t pointer_id) {
   client_cancellations_.insert(pointer_id);
 }
diff --git a/cobalt/dom/pointer_state.h b/cobalt/dom/pointer_state.h
index 5552f9d..1c3e5a2 100644
--- a/cobalt/dom/pointer_state.h
+++ b/cobalt/dom/pointer_state.h
@@ -16,6 +16,7 @@
 #define COBALT_DOM_POINTER_STATE_H_
 
 #include <map>
+#include <memory>
 #include <queue>
 #include <set>
 
@@ -24,6 +25,7 @@
 #include "base/memory/weak_ptr.h"
 #include "cobalt/dom/html_element.h"
 #include "cobalt/dom/pointer_event_init.h"
+#include "cobalt/math/matrix3_f.h"
 #include "cobalt/math/vector2d_f.h"
 #include "cobalt/web/dom_exception.h"
 #include "cobalt/web/event.h"
@@ -31,6 +33,13 @@
 namespace cobalt {
 namespace dom {
 
+struct PossibleScrollTargets {
+  scoped_refptr<dom::HTMLElement> up;
+  scoped_refptr<dom::HTMLElement> down;
+  scoped_refptr<dom::HTMLElement> left;
+  scoped_refptr<dom::HTMLElement> right;
+};
+
 // This class contains various state related to pointer and mouse support.
 class PointerState {
  public:
@@ -85,6 +94,17 @@
   base::Optional<uint64> GetClientTimeStamp(int32_t pointer_id);
   void ClearTimeStamp(int32_t pointer_id);
 
+  void SetPossibleScrollTargets(
+      int32_t pointer_id,
+      std::unique_ptr<PossibleScrollTargets> possible_scroll_targets);
+  PossibleScrollTargets* GetPossibleScrollTargets(int32_t pointer_id);
+  void ClearPossibleScrollTargets(int32_t pointer_id);
+
+  void SetClientTransformMatrix(int32_t pointer_id,
+                                const math::Matrix3F& matrix);
+  const math::Matrix3F& GetClientTransformMatrix(int32_t pointer_id);
+  void ClearMatrix(int32_t pointer_id);
+
   // Tracks whether a certain pointer was cancelled, i.e. if it panned the
   // page viewport.
   // https://www.w3.org/TR/pointerevents1/#the-pointercancel-event
@@ -96,12 +116,12 @@
 
  private:
   // Stores pointer events until they are handled after a layout.
-  std::queue<scoped_refptr<web::Event> > pointer_events_;
+  std::queue<scoped_refptr<web::Event>> pointer_events_;
 
   // This stores the elements with target overrides
   //   https://www.w3.org/TR/2015/REC-pointerevents-20150224/#pointer-capture
-  std::map<int32_t, base::WeakPtr<Element> > target_override_;
-  std::map<int32_t, base::WeakPtr<Element> > pending_target_override_;
+  std::map<int32_t, base::WeakPtr<Element>> target_override_;
+  std::map<int32_t, base::WeakPtr<Element>> pending_target_override_;
 
   // Store the set of active pointers.
   //   https://www.w3.org/TR/2015/REC-pointerevents-20150224/#dfn-active-pointer
@@ -113,7 +133,12 @@
 
   std::map<int32_t, math::Vector2dF> client_coordinates_;
   std::map<int32_t, uint64> client_time_stamps_;
+  std::map<int32_t, std::unique_ptr<PossibleScrollTargets>>
+      client_possible_scroll_targets_;
+  std::map<int32_t, const math::Matrix3F> client_matrices_;
   std::set<int32_t> client_cancellations_;
+
+  const math::Matrix3F identity_matrix_ = math::Matrix3F::Identity();
 };
 
 }  // namespace dom
diff --git a/cobalt/dom/source_buffer.idl b/cobalt/dom/source_buffer.idl
index 1fd8053..39a9248 100644
--- a/cobalt/dom/source_buffer.idl
+++ b/cobalt/dom/source_buffer.idl
@@ -16,16 +16,11 @@
 // https://www.w3.org/TR/2016/CR-media-source-20160705/#sourcebuffer
 
 interface SourceBuffer : EventTarget {
-  [RaisesException] readonly attribute TimeRanges buffered;
-  [RaisesException] attribute double timestampOffset;
-
-  [RaisesException] void abort();
-
   // MSE 2016 Interface
   [RaisesException] attribute SourceBufferAppendMode mode;
   readonly attribute boolean updating;
-  // [RaisesException] readonly attribute TimeRanges buffered;
-  // [RaisesException] attribute double timestampOffset;
+  [RaisesException] readonly attribute TimeRanges buffered;
+  [RaisesException] attribute double timestampOffset;
   readonly attribute AudioTrackList audioTracks;
   readonly attribute VideoTrackList videoTracks;
   // readonly attribute TextTrackList textTracks;
@@ -35,7 +30,7 @@
   [RaisesException] void appendBuffer(ArrayBufferView data);
 
   // appendStream() omitted as it is not used.
-  // [RaisesException] void abort();
+  [RaisesException] void abort();
   [RaisesException] void remove(double start, unrestricted double end);
   [RaisesException] attribute TrackDefaultList trackDefaults;
 };
diff --git a/cobalt/dom/source_buffer_algorithm.cc b/cobalt/dom/source_buffer_algorithm.cc
index a24e51c..b55e9cd 100644
--- a/cobalt/dom/source_buffer_algorithm.cc
+++ b/cobalt/dom/source_buffer_algorithm.cc
@@ -101,6 +101,7 @@
 void SourceBufferAppendAlgorithm::Finalize() {
   TRACE_EVENT1("cobalt::dom", "SourceBufferAppendAlgorithm::Finalize()",
                "succeeded", succeeded_);
+
   if (succeeded_) {
     schedule_event_cb_.Run(base::Tokens::update());
     schedule_event_cb_.Run(base::Tokens::updateend());
@@ -143,6 +144,7 @@
 
 void SourceBufferRemoveAlgorithm::Finalize() {
   TRACE_EVENT0("cobalt::dom", "SourceBufferRemoveAlgorithm::Finalize()");
+
   schedule_event_cb_.Run(base::Tokens::update());
   schedule_event_cb_.Run(base::Tokens::updateend());
   std::move(finalized_cb_).Run();
diff --git a/cobalt/dom/testing/fake_document.h b/cobalt/dom/testing/fake_document.h
index 494da4e..429481f 100644
--- a/cobalt/dom/testing/fake_document.h
+++ b/cobalt/dom/testing/fake_document.h
@@ -19,7 +19,6 @@
 #include <utility>
 
 #include "cobalt/dom/document.h"
-
 #include "cobalt/web/csp_delegate_factory.h"
 
 namespace cobalt {
@@ -29,30 +28,14 @@
 class FakeDocument : public dom::Document {
  public:
   explicit FakeDocument(dom::HTMLElementContext* html_element_context)
-      : dom::Document(html_element_context) {
-    web::WindowOrWorkerGlobalScope::Options options(
-        base::ApplicationState::kApplicationStateStarted);
-    std::unique_ptr<web::CspViolationReporter> violation_reporter(
-        new web::CspViolationReporter(nullptr, options.post_sender));
-    csp_delegate_ = web::CspDelegateFactory::GetInstance()->Create(
-        options.csp_enforcement_mode, std::move(violation_reporter),
-        environment_settings()->creation_url(), options.require_csp,
-        options.csp_policy_changed_callback,
-        options.csp_insecure_allowed_token);
-  }
+      : FakeDocument(html_element_context, dom::Document::Options()) {}
 
   FakeDocument(dom::HTMLElementContext* html_element_context,
-               dom::Document::Options doc_options)
+               const dom::Document::Options& doc_options)
       : dom::Document(html_element_context, doc_options) {
-    web::WindowOrWorkerGlobalScope::Options options(
-        base::ApplicationState::kApplicationStateStarted);
-    std::unique_ptr<web::CspViolationReporter> violation_reporter(
-        new web::CspViolationReporter(nullptr, options.post_sender));
-    csp_delegate_ = web::CspDelegateFactory::GetInstance()->Create(
-        options.csp_enforcement_mode, std::move(violation_reporter),
-        environment_settings()->creation_url(), options.require_csp,
-        options.csp_policy_changed_callback,
-        options.csp_insecure_allowed_token);
+    web::WindowOrWorkerGlobalScope::Options options;
+    csp_delegate_ =
+        web::CspDelegateFactory::Create(nullptr, options.csp_options);
   }
 
   web::CspDelegate* GetCSPDelegate() const override {
diff --git a/cobalt/dom/testing/stub_window.h b/cobalt/dom/testing/stub_window.h
index 34a2d94..41f6bf1 100644
--- a/cobalt/dom/testing/stub_window.h
+++ b/cobalt/dom/testing/stub_window.h
@@ -28,6 +28,7 @@
 #include "cobalt/cssom/viewport_size.h"
 #include "cobalt/dom/captions/system_caption_settings.h"
 #include "cobalt/dom/dom_settings.h"
+#include "cobalt/dom/dom_stat_tracker.h"
 #include "cobalt/dom/local_storage_database.h"
 #include "cobalt/dom/testing/stub_environment_settings.h"
 #include "cobalt/dom/window.h"
@@ -107,6 +108,8 @@
     dom_parser_.reset(
         new dom_parser::Parser(base::Bind(&StubLoadCompleteCallback)));
     dom_stat_tracker_.reset(new dom::DomStatTracker("StubWindow"));
+    web::CspDelegate::Options csp_options;
+    csp_options.header_policy = csp::kCSPOptional;
     window_ = new dom::Window(
         web_context()->environment_settings(), cssom::ViewportSize(1920, 1080),
         base::kApplicationStateStarted, css_parser_.get(), dom_parser_.get(),
@@ -115,15 +118,14 @@
         nullptr, nullptr, nullptr, nullptr,
         web_context()->global_environment()->script_value_factory(), nullptr,
         dom_stat_tracker_.get(), "en", base::Callback<void(const GURL&)>(),
-        base::Bind(&StubLoadCompleteCallback), nullptr,
-        network_bridge::PostSender(), csp::kCSPOptional,
-        web::kCspEnforcementEnable, base::Closure() /* csp_policy_changed */,
-        base::Closure() /* ran_animation_frame_callbacks */,
+        base::Bind(&StubLoadCompleteCallback), nullptr /* cookie_jar */,
+        csp_options, base::Closure() /* ran_animation_frame_callbacks */,
         dom::Window::CloseCallback() /* window_close */,
         base::Closure() /* window_minimize */, on_screen_keyboard_bridge_,
         nullptr /* camera_3d */, dom::Window::OnStartDispatchEventCallback(),
         dom::Window::OnStopDispatchEventCallback(),
         dom::ScreenshotManager::ProvideScreenshotFunctionCallback(),
+        dom::Window::NavItemCallback(),
         nullptr /* synchronous_loader_interrupt */,
         false /* enable_inline_script_warnings */, nullptr /* ui_nav_root */,
         true /* enable_map_to_mesh */, 0 /* csp_insecure_allowed_token */,
@@ -131,9 +133,10 @@
         dom::Window::kClockTypeSystemTime /* clock_type */,
         dom::Window::CacheCallback() /* splash_screen_cache_callback */,
         system_caption_settings_ /* captions */
-        );
+    );
     global_environment()->CreateGlobalObject(
         window_, web_context()->environment_settings());
+    web_context()->SetupFinished();
   }
 
  private:
@@ -142,7 +145,7 @@
 
   void InitializeWebContext() {
     web_context_.reset(new web::testing::StubWebContext());
-    web_context()->setup_environment_settings(
+    web_context()->SetupEnvironmentSettings(
         new dom::testing::StubEnvironmentSettings(options_));
     web_context()->environment_settings()->set_creation_url(
         GURL("about:blank"));
diff --git a/cobalt/dom/window.cc b/cobalt/dom/window.cc
index c5d5ac0..1644cdc 100644
--- a/cobalt/dom/window.cc
+++ b/cobalt/dom/window.cc
@@ -53,8 +53,7 @@
 #include "cobalt/speech/speech_synthesis.h"
 #include "cobalt/web/context.h"
 #include "cobalt/web/environment_settings.h"
-#include "cobalt/web/error_event.h"
-#include "cobalt/web/error_event_init.h"
+#include "cobalt/web/environment_settings_helper.h"
 #include "cobalt/web/event.h"
 #include "cobalt/web/window_or_worker_global_scope.h"
 #include "starboard/file.h"
@@ -107,10 +106,7 @@
     const base::Callback<void(const GURL&)> navigation_callback,
     const loader::Decoder::OnCompleteFunction& load_complete_callback,
     network_bridge::CookieJar* cookie_jar,
-    const network_bridge::PostSender& post_sender,
-    csp::CSPHeaderPolicy require_csp,
-    web::CspEnforcementType csp_enforcement_mode,
-    const base::Closure& csp_policy_changed_callback,
+    const web::CspDelegate::Options& csp_options,
     const base::Closure& ran_animation_frame_callbacks_callback,
     CloseCallback window_close_callback, base::Closure window_minimize_callback,
     OnScreenKeyboardBridge* on_screen_keyboard_bridge,
@@ -119,6 +115,7 @@
     const OnStopDispatchEventCallback& on_stop_dispatch_event_callback,
     const ScreenshotManager::ProvideScreenshotFunctionCallback&
         screenshot_function_callback,
+    const NavItemCallback& cancel_scroll_callback,
     base::WaitableEvent* synchronous_loader_interrupt,
     bool enable_inline_script_warnings,
     const scoped_refptr<ui_navigation::NavItem>& ui_nav_root,
@@ -130,14 +127,11 @@
     // 'window' object EventTargets require special handling for onerror events,
     // see EventTarget constructor for more details.
     : web::WindowOrWorkerGlobalScope(
-          settings, dom_stat_tracker,
+          settings,
           web::WindowOrWorkerGlobalScope::Options(
-              initial_application_state, post_sender, require_csp,
-              csp_enforcement_mode, csp_policy_changed_callback,
-              csp_insecure_allowed_token)),
+              initial_application_state, csp_options, dom_stat_tracker)),
       viewport_size_(view_size),
       is_resize_event_pending_(false),
-      is_reporting_script_error_(false),
 #if defined(ENABLE_TEST_RUNNER)
       test_runner_(new TestRunner()),
 #endif  // ENABLE_TEST_RUNNER
@@ -178,6 +172,7 @@
                                                      script_value_factory)
                               : NULL),
       splash_screen_cache_callback_(splash_screen_cache_callback),
+      cancel_scroll_callback_(cancel_scroll_callback),
       on_start_dispatch_event_callback_(on_start_dispatch_event_callback),
       on_stop_dispatch_event_callback_(on_stop_dispatch_event_callback),
       screenshot_manager_(settings, screenshot_function_callback),
@@ -213,7 +208,8 @@
     const loader::Decoder::OnCompleteFunction& load_complete_callback) {
   document_loader_.reset(new loader::Loader(
       base::Bind(&loader::FetcherFactory::CreateFetcher,
-                 base::Unretained(fetcher_factory), url, disk_cache::kHTML),
+                 base::Unretained(fetcher_factory), url, /*main_resource=*/true,
+                 disk_cache::kHTML),
       base::Bind(&Parser::ParseDocumentAsync, base::Unretained(dom_parser),
                  document_, base::SourceLocation(url.spec(), 1, 1)),
       load_complete_callback));
@@ -268,7 +264,8 @@
 
 const scoped_refptr<Navigator>& Window::navigator() const { return navigator_; }
 
-script::Handle<ScreenshotManager::InterfacePromise> Window::Screenshot() {
+script::Handle<ScreenshotManager::InterfacePromise> Window::Screenshot(
+    script::EnvironmentSettings* environment_settings) {
   scoped_refptr<render_tree::Node> render_tree_root =
       document_->DoSynchronousLayoutAndGetRenderTree();
 
@@ -277,9 +274,10 @@
           ->script_value_factory()
           ->CreateInterfacePromise<dom::Screenshot>();
 
+  auto* global_wrappable = web::get_global_wrappable(environment_settings);
   std::unique_ptr<ScreenshotManager::InterfacePromiseValue::Reference>
       promise_reference(new ScreenshotManager::InterfacePromiseValue::Reference(
-          this, promise));
+          global_wrappable, promise));
 
   screenshot_manager_.Screenshot(
       loader::image::EncodedStaticImage::ImageFormat::kPNG, render_tree_root,
@@ -488,63 +486,6 @@
   window_timers_.SetApplicationState(state);
 }
 
-bool Window::ReportScriptError(const script::ErrorReport& error_report) {
-  // Runtime script errors: when the user agent is required to report an error
-  // for a particular script, it must run these steps, after which the error is
-  // either handled or not handled:
-  //   https://www.w3.org/TR/html50/webappapis.html#runtime-script-errors
-
-  // 1. If target is in error reporting mode, then abort these steps; the error
-  //    is not handled.
-  if (is_reporting_script_error_) {
-    return false;
-  }
-
-  // 2. Let target be in error reporting mode.
-  is_reporting_script_error_ = true;
-
-  // 7. Let event be a new trusted ErrorEvent object that does not bubble but is
-  //    cancelable, and which has the event name error.
-  // NOTE: Cobalt does not currently support trusted events.
-  web::ErrorEventInit error;
-  error.set_bubbles(false);
-  error.set_cancelable(true);
-
-  if (error_report.is_muted) {
-    // 6. If script has muted errors, then set message to "Script error.", set
-    //    location to the empty string, set line and col to 0, and set error
-    //    object to null.
-    error.set_message("Script error.");
-    error.set_filename("");
-    error.set_lineno(0);
-    error.set_colno(0);
-    error.set_error(NULL);
-  } else {
-    // 8. Initialize event's message attribute to message.
-    error.set_message(error_report.message);
-    // 9. Initialize event's filename attribute to location.
-    error.set_filename(error_report.filename);
-    // 10. Initialize event's lineno attribute to line.
-    error.set_lineno(error_report.line_number);
-    // 11. Initialize event's colno attribute to col.
-    error.set_colno(error_report.column_number);
-    // 12. Initialize event's error attribute to error object.
-    error.set_error(error_report.error ? error_report.error.get() : NULL);
-  }
-
-  scoped_refptr<web::ErrorEvent> error_event(new web::ErrorEvent(error));
-
-  // 13. Dispatch event at target.
-  DispatchEvent(error_event);
-
-  // 14. Let target no longer be in error reporting mode.
-  is_reporting_script_error_ = false;
-
-  // 15. If event was canceled, then the error is handled. Otherwise, the error
-  //     is not handled.
-  return error_event->default_prevented();
-}
-
 void Window::SetSynchronousLayoutCallback(const base::Closure& callback) {
   document_->set_synchronous_layout_callback(callback);
 }
@@ -669,6 +610,14 @@
   splash_screen_cache_callback_.Run(content, topic);
 }
 
+void Window::CancelScroll(
+    const scoped_refptr<ui_navigation::NavItem>& nav_item) {
+  if (cancel_scroll_callback_.is_null()) {
+    return;
+  }
+  cancel_scroll_callback_.Run(nav_item);
+}
+
 const scoped_refptr<OnScreenKeyboard>& Window::on_screen_keyboard() const {
   return on_screen_keyboard_;
 }
diff --git a/cobalt/dom/window.h b/cobalt/dom/window.h
index 73688a1..5bbf76b 100644
--- a/cobalt/dom/window.h
+++ b/cobalt/dom/window.h
@@ -123,6 +123,9 @@
   typedef base::Callback<void(const std::string&,
                               const base::Optional<std::string>&)>
       CacheCallback;
+  typedef base::Callback<void(
+      const scoped_refptr<ui_navigation::NavItem>& nav_item)>
+      NavItemCallback;
 
   enum ClockType {
     kClockTypeTestRunner,
@@ -154,10 +157,7 @@
       const base::Callback<void(const GURL&)> navigation_callback,
       const loader::Decoder::OnCompleteFunction& load_complete_callback,
       network_bridge::CookieJar* cookie_jar,
-      const network_bridge::PostSender& post_sender,
-      csp::CSPHeaderPolicy require_csp,
-      web::CspEnforcementType csp_enforcement_mode,
-      const base::Closure& csp_policy_changed_callback,
+      const web::CspDelegate::Options& csp_options,
       const base::Closure& ran_animation_frame_callbacks_callback,
       CloseCallback window_close_callback,
       base::Closure window_minimize_callback,
@@ -168,6 +168,7 @@
       const OnStopDispatchEventCallback& stop_tracking_dispatch_event_callback,
       const ScreenshotManager::ProvideScreenshotFunctionCallback&
           screenshot_function_callback,
+      const NavItemCallback& cancel_scroll_callback,
       base::WaitableEvent* synchronous_loader_interrupt,
       bool enable_inline_script_warnings = false,
       const scoped_refptr<ui_navigation::NavItem>& ui_nav_root = nullptr,
@@ -203,7 +204,8 @@
 
   const scoped_refptr<Navigator>& navigator() const;
 
-  script::Handle<ScreenshotManager::InterfacePromise> Screenshot();
+  script::Handle<ScreenshotManager::InterfacePromise> Screenshot(
+      script::EnvironmentSettings* environment_settings);
 
   // Web API: CSSOM (partial interface)
   // Returns the computed style of the given element, as described in
@@ -338,11 +340,6 @@
   void SetApplicationState(base::ApplicationState state,
                            SbTimeMonotonic timestamp);
 
-  // Performs the steps specified for runtime script errors:
-  //   https://www.w3.org/TR/html50/webappapis.html#runtime-script-errors
-  // Returns whether or not the script was handled.
-  bool ReportScriptError(const script::ErrorReport& error_report);
-
   // ApplicationLifecycleState::Observer implementation.
   void OnWindowFocusChanged(bool has_focus) override;
   void OnVisibilityStateChanged(VisibilityState visibility_state) override;
@@ -359,6 +356,8 @@
   void CacheSplashScreen(const std::string& content,
                          const base::Optional<std::string>& topic);
 
+  void CancelScroll(const scoped_refptr<ui_navigation::NavItem>& nav_item);
+
   // Custom on screen keyboard.
   const scoped_refptr<OnScreenKeyboard>& on_screen_keyboard() const;
   void ReleaseOnScreenKeyboard();
@@ -410,11 +409,6 @@
   // visibility state changes to visible.
   bool is_resize_event_pending_;
 
-  // Whether or not the window is currently reporting a script error. This is
-  // used to prevent infinite recursion, because reporting the error causes an
-  // event to be dispatched, which can generate a new script error.
-  bool is_reporting_script_error_;
-
 #if defined(ENABLE_TEST_RUNNER)
   scoped_refptr<TestRunner> test_runner_;
 #endif  // ENABLE_TEST_RUNNER
@@ -445,6 +439,8 @@
 
   CacheCallback splash_screen_cache_callback_;
 
+  NavItemCallback cancel_scroll_callback_;
+
   OnStartDispatchEventCallback on_start_dispatch_event_callback_;
   OnStopDispatchEventCallback on_stop_dispatch_event_callback_;
 
diff --git a/cobalt/dom/window.idl b/cobalt/dom/window.idl
index fc782d5..1e7597b 100644
--- a/cobalt/dom/window.idl
+++ b/cobalt/dom/window.idl
@@ -48,7 +48,7 @@
   // https://developer.mozilla.org/en-US/docs/Web/API/Window/minimize
   void minimize();
 
-  Promise<Screenshot> screenshot();
+  [CallWith=EnvironmentSettings] Promise<Screenshot> screenshot();
 };
 Window implements GlobalEventHandlers;
 Window implements WindowEventHandlers;
diff --git a/cobalt/dom/window_test.cc b/cobalt/dom/window_test.cc
index 2bf4d12..a984cb9 100644
--- a/cobalt/dom/window_test.cc
+++ b/cobalt/dom/window_test.cc
@@ -249,7 +249,8 @@
       "error", FakeScriptValue<web::EventListener>(fake_event_listener_.get()),
       true);
   fake_event_listener_->ExpectHandleEventCall("error", window());
-  window()->DispatchEvent(new web::ErrorEvent());
+  window()->DispatchEvent(
+      new web::ErrorEvent(/*environment_settings=*/nullptr));
 }
 
 TEST_F(WindowTest, OnErrorEvent) {
diff --git a/cobalt/dom_parser/html_decoder.cc b/cobalt/dom_parser/html_decoder.cc
index 01267f3..1e3bc18 100644
--- a/cobalt/dom_parser/html_decoder.cc
+++ b/cobalt/dom_parser/html_decoder.cc
@@ -28,12 +28,12 @@
     const scoped_refptr<dom::Node>& reference_node,
     const int dom_max_element_depth, const base::SourceLocation& input_location,
     const loader::Decoder::OnCompleteFunction& load_complete_callback,
-    const bool should_run_scripts, const csp::CSPHeaderPolicy require_csp)
+    const bool should_run_scripts, const csp::CSPHeaderPolicy csp_header_policy)
     : libxml_html_parser_wrapper_(new LibxmlHTMLParserWrapper(
           document, parent_node, reference_node, dom_max_element_depth,
           input_location, load_complete_callback, should_run_scripts)),
       document_(document),
-      require_csp_(require_csp),
+      csp_header_policy_(csp_header_policy),
       load_complete_callback_(load_complete_callback) {}
 
 HTMLDecoder::~HTMLDecoder() {}
@@ -61,7 +61,7 @@
 
   csp::ResponseHeaders csp_headers(headers);
   if (document_->GetCSPDelegate()->OnReceiveHeaders(csp_headers) ||
-      require_csp_ == csp::kCSPOptional) {
+      csp_header_policy_ == csp::kCSPOptional) {
     return loader::kLoadResponseContinue;
   } else {
     LOG(ERROR) << "Failure receiving Content Security Policy headers "
diff --git a/cobalt/dom_parser/html_decoder.h b/cobalt/dom_parser/html_decoder.h
index ecc5cd7..b6de892 100644
--- a/cobalt/dom_parser/html_decoder.h
+++ b/cobalt/dom_parser/html_decoder.h
@@ -49,7 +49,7 @@
               const base::SourceLocation& input_location,
               const loader::Decoder::OnCompleteFunction& load_complete_callback,
               const bool should_run_scripts,
-              const csp::CSPHeaderPolicy require_csp);
+              const csp::CSPHeaderPolicy csp_header_policy);
 
   ~HTMLDecoder();
 
@@ -73,7 +73,7 @@
   THREAD_CHECKER(thread_checker_);
 
   // If Cobalt user forbids rendering Cobalt without csp headers.
-  const csp::CSPHeaderPolicy require_csp_;
+  const csp::CSPHeaderPolicy csp_header_policy_;
 
   const loader::Decoder::OnCompleteFunction load_complete_callback_;
 
diff --git a/cobalt/dom_parser/parser.cc b/cobalt/dom_parser/parser.cc
index 060886a..72f17b9 100644
--- a/cobalt/dom_parser/parser.cc
+++ b/cobalt/dom_parser/parser.cc
@@ -12,10 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
 #include "cobalt/dom_parser/parser.h"
 
+#include <memory>
+
 #include "base/logging.h"
 #include "cobalt/dom/document.h"
 #include "cobalt/dom/xml_document.h"
@@ -33,7 +33,7 @@
       new dom::Document(html_element_context);
   HTMLDecoder html_decoder(document, document, NULL, dom_max_element_depth_,
                            input_location, load_complete_callback_, false,
-                           require_csp_);
+                           csp_header_policy_);
   html_decoder.DecodeChunk(input.c_str(), input.length());
   html_decoder.Finish();
   return document;
@@ -60,7 +60,7 @@
     const base::SourceLocation& input_location) {
   HTMLDecoder html_decoder(document, parent_node, reference_node,
                            dom_max_element_depth_, input_location,
-                           load_complete_callback_, false, require_csp_);
+                           load_complete_callback_, false, csp_header_policy_);
   html_decoder.DecodeChunk(input.c_str(), input.length());
   html_decoder.Finish();
 }
@@ -85,7 +85,7 @@
     const loader::Decoder::OnCompleteFunction& load_complete_callback) {
   return std::unique_ptr<loader::Decoder>(new HTMLDecoder(
       document, document, NULL, dom_max_element_depth_, input_location,
-      load_complete_callback, true, require_csp_));
+      load_complete_callback, true, csp_header_policy_));
 }
 
 std::unique_ptr<loader::Decoder> Parser::ParseXMLDocumentAsync(
diff --git a/cobalt/dom_parser/parser.h b/cobalt/dom_parser/parser.h
index e6527fb..637828b 100644
--- a/cobalt/dom_parser/parser.h
+++ b/cobalt/dom_parser/parser.h
@@ -34,18 +34,18 @@
       : dom_max_element_depth_(kDefaultDOMMaxElementDepth),
         ALLOW_THIS_IN_INITIALIZER_LIST(load_complete_callback_(
             base::Bind(&Parser::LoadCompleteCallback, base::Unretained(this)))),
-        require_csp_(csp::kCSPRequired) {}
+        csp_header_policy_(csp::kCSPRequired) {}
   explicit Parser(
       const loader::Decoder::OnCompleteFunction& load_complete_callback)
       : dom_max_element_depth_(kDefaultDOMMaxElementDepth),
         load_complete_callback_(load_complete_callback),
-        require_csp_(csp::kCSPRequired) {}
+        csp_header_policy_(csp::kCSPRequired) {}
   Parser(const int dom_max_element_depth,
          const loader::Decoder::OnCompleteFunction& load_complete_callback,
-         csp::CSPHeaderPolicy require_csp)
+         csp::CSPHeaderPolicy csp_header_policy)
       : dom_max_element_depth_(dom_max_element_depth),
         load_complete_callback_(load_complete_callback),
-        require_csp_(require_csp) {}
+        csp_header_policy_(csp_header_policy) {}
   ~Parser() override {}
 
   // From dom::Parser.
@@ -91,7 +91,7 @@
 
   // Cobalt user can specify if they want to forbid Cobalt rendering without csp
   // headers.
-  csp::CSPHeaderPolicy require_csp_;
+  csp::CSPHeaderPolicy csp_header_policy_;
 
   DISALLOW_COPY_AND_ASSIGN(Parser);
 };
diff --git a/cobalt/encoding/BUILD.gn b/cobalt/encoding/BUILD.gn
index 904043f..321f41f 100644
--- a/cobalt/encoding/BUILD.gn
+++ b/cobalt/encoding/BUILD.gn
@@ -52,5 +52,8 @@
     "//testing/gtest",
   ]
 
-  data_deps = [ "//third_party/icu:icudata" ]
+  data_deps = [
+    "//cobalt/network:copy_ssl_certificates",
+    "//third_party/icu:icudata",
+  ]
 }
diff --git a/cobalt/fetch/embedded_scripts/fetch.js b/cobalt/fetch/embedded_scripts/fetch.js
index 87435e2..c181f0d 100644
--- a/cobalt/fetch/embedded_scripts/fetch.js
+++ b/cobalt/fetch/embedded_scripts/fetch.js
@@ -11,7 +11,7 @@
 d.split(":");if(d=l.shift().trim())l=l.join(":").trim(),c.append(d,l)});return c}function u(a,b){b||={};this[Q]="default";this[y]="status"in b?b.status:200;if(200>this[y]||599<this[y])throw new ba("Invalid response status");this[ca]=200<=this[y]&&300>this[y];if("statusText"in b){var c=b.statusText;for(var d=0,l=c.length,f;d<l;d++)if(f=c.charCodeAt(d),9!==f&&(32>f||255<f||127===f))throw e("Invalid response status text");}else c="OK";this[R]=c;this[x]=L(b.headers,S);this[C]=b.url||"";if(a&&-1<da.indexOf(this[y]))throw new e("Response body is not allowed with a null body status");
 this[E]=b.is_aborted||!1;this._initBody(a)}if(!h.fetch){var K=h.Array,aa=h.ArrayBuffer,qa=h.Object.create,W=h.Object.defineProperties,k=h.Symbol,Ba=k.iterator,P=h.Map,ba=h.RangeError,e=h.TypeError,v=h.Uint8Array,z=h.Promise,V=h.ReadableStream,ea=h.ReadableStreamTee,ta=h.IsReadableStreamDisturbed,ra=h.IsReadableStreamLocked,r=k("body"),U=k("bodyUsed"),G=k("cache"),H=k("credentials"),A=k("guardCallback"),x=k("headers"),I=k("integrity"),p=k("map"),D=k("method"),t=k("mode"),ca=k("ok"),N=k("redirect"),
 y=k("status"),R=k("statusText"),Q=k("type"),C=k("url"),E=k("is_aborted"),F=k("signal"),la="accept-charset accept-encoding access-control-request-headers access-control-request-method connection content-length cookie cookie2 date dnt expect host keep-alive origin referer te trailer transfer-encoding upgrade via".split(" "),pa=["set-cookie","set-cookie2"],na=["accept","accept-language","content-language"],oa=["application/x-www-form-urlencoded","multipart/form-data","text/plain"],ua="default no-store reload no-cache force-cache only-if-cached".split(" "),
-va=["omit","same-origin","include"],wa="DELETE GET HEAD OPTIONS POST PUT".split(" "),ya=["GET","HEAD","POST"],xa=["same-origin","no-cors","cors"],za=["follow","error","manual"],da=[101,204,205,304],Ca=[301,302,303,307,308],Da="[object Int8Array];[object Uint8Array];[object Uint8ClampedArray];[object Int16Array];[object Uint16Array];[object Int32Array];[object Uint32Array];[object Float32Array];[object Float64Array]".split(";"),sa=aa.isView||function(a){return a&&-1<Da.indexOf(Object.prototype.toString.call(a))};
+va=["omit","same-origin","include"],wa="DELETE GET HEAD OPTIONS POST PUT".split(" "),ya=["GET","HEAD","POST"],xa=["same-origin","no-cors","cors","navigate"],za=["follow","error","manual"],da=[101,204,205,304],Ca=[301,302,303,307,308],Da="[object Int8Array];[object Uint8Array];[object Uint8ClampedArray];[object Int16Array];[object Uint16Array];[object Int32Array];[object Uint32Array];[object Float32Array];[object Float64Array]".split(";"),sa=aa.isView||function(a){return a&&-1<Da.indexOf(Object.prototype.toString.call(a))};
 n.prototype.append=function(a,b){if(2!==arguments.length)throw e("Invalid parameters to append");a=J(a);b=Y(b);this[A](a,b)||(this[p].has(a)?this[p].set(a,this[p].get(a)+", "+b):this[p].set(a,b))};n.prototype["delete"]=function(a){if(1!==arguments.length)throw e("Invalid parameters to delete");this[A](a,"invalid")||this[p].delete(J(a))};n.prototype.get=function(a){if(1!==arguments.length)throw e("Invalid parameters to get");a=J(a);var b=this[p].get(a);return void 0!==b?b:null};n.prototype.has=function(a){if(1!==
 arguments.length)throw e("Invalid parameters to has");return this[p].has(J(a))};n.prototype.set=function(a,b){if(2!==arguments.length)throw e("Invalid parameters to set");a=J(a);b=Y(b);this[A](a,b)||this[p].set(a,b)};n.prototype.forEach=function(a,b){var c=this;K.from(this[p].entries()).sort().forEach(function(d){a.call(b,d[1],d[0],c)})};n.prototype.keys=function(){return(new P(K.from(this[p].entries()).sort())).keys()};n.prototype.values=function(){return(new P(K.from(this[p].entries()).sort())).values()};
 n.prototype.entries=function(){return(new P(K.from(this[p].entries()).sort())).entries()};n.prototype[Ba]=n.prototype.entries;B.prototype.clone=function(){var a=null;null!==this[r]&&(a=ea(this[r],!0),this[r]=a[0],a=a[1]);return new B(this,{cloneBody:a,signal:this[F]})};W(B.prototype,{cache:{get:function(){return this[G]}},credentials:{get:function(){return this[H]}},headers:{get:function(){return this[x]}},integrity:{get:function(){return this[I]}},method:{get:function(){return this[D]}},mode:{get:function(){return this[t]}},
diff --git a/cobalt/fetch/fetch.js b/cobalt/fetch/fetch.js
index cae8152..5940740 100644
--- a/cobalt/fetch/fetch.js
+++ b/cobalt/fetch/fetch.js
@@ -146,8 +146,11 @@
   const VALID_METHODS_NOCORS = ['GET', 'HEAD', 'POST']
 
   // Modes that are allowed for RequestInit. Although 'navigate' is a valid
-  // request mode, it is not allowed in the RequestInit parameter.
-  const VALID_MODES = ['same-origin', 'no-cors', 'cors']
+  // request mode, it is not allowed in the RequestInit parameter. However,
+  // the request mode 'navigate' needs to be allowed since Request is
+  // polyfilled, so there is no other way to set request mode to 'navigae'
+  // even when it is correct to do so (requesting the main resource).
+  const VALID_MODES = ['same-origin', 'no-cors', 'cors', 'navigate']
 
   // Values that are allowed for Request redirect mode.
   const VALID_REDIRECT_MODES = ['follow', 'error', 'manual']
diff --git a/cobalt/h5vcc/BUILD.gn b/cobalt/h5vcc/BUILD.gn
index c31a775..7ecc1ee 100644
--- a/cobalt/h5vcc/BUILD.gn
+++ b/cobalt/h5vcc/BUILD.gn
@@ -85,6 +85,7 @@
     "//cobalt/trace_event",
     "//cobalt/watchdog",
     "//cobalt/web:dom_exception",
+    "//cobalt/worker",
     "//net",
     "//net:http_server",
     "//starboard",
diff --git a/cobalt/h5vcc/h5vcc.cc b/cobalt/h5vcc/h5vcc.cc
index 6f2b436..48c2ed5 100644
--- a/cobalt/h5vcc/h5vcc.cc
+++ b/cobalt/h5vcc/h5vcc.cc
@@ -33,7 +33,7 @@
   runtime_ = new H5vccRuntime(settings.event_dispatcher);
   settings_ =
       new H5vccSettings(settings.set_web_setting_func, settings.media_module,
-                        settings.network_module,
+                        settings.can_play_type_handler, settings.network_module,
 #if SB_IS(EVERGREEN)
                         settings.updater_module,
 #endif
diff --git a/cobalt/h5vcc/h5vcc.h b/cobalt/h5vcc/h5vcc.h
index 138a67b..7836da7 100644
--- a/cobalt/h5vcc/h5vcc.h
+++ b/cobalt/h5vcc/h5vcc.h
@@ -46,6 +46,7 @@
   struct Settings {
     Settings()
         : media_module(NULL),
+          can_play_type_handler(NULL),
           network_module(NULL),
 #if SB_IS(EVERGREEN)
           updater_module(NULL),
@@ -57,6 +58,7 @@
     }
     H5vccSettings::SetSettingFunc set_web_setting_func;
     media::MediaModule* media_module;
+    media::CanPlayTypeHandler* can_play_type_handler;
     network::NetworkModule* network_module;
 #if SB_IS(EVERGREEN)
     updater::UpdaterModule* updater_module;
diff --git a/cobalt/h5vcc/h5vcc_account_manager_internal.cc b/cobalt/h5vcc/h5vcc_account_manager_internal.cc
index 1c0a3c2..d3897c1 100644
--- a/cobalt/h5vcc/h5vcc_account_manager_internal.cc
+++ b/cobalt/h5vcc/h5vcc_account_manager_internal.cc
@@ -12,22 +12,25 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <memory>
-
 #include "cobalt/h5vcc/h5vcc_account_manager_internal.h"
 
+#include <memory>
+
 #include "base/command_line.h"
 #include "base/memory/weak_ptr.h"
 #include "cobalt/browser/switches.h"
+#include "cobalt/web/environment_settings_helper.h"
 #include "starboard/user.h"
 
 namespace cobalt {
 namespace h5vcc {
 
-H5vccAccountManagerInternal::H5vccAccountManagerInternal()
+H5vccAccountManagerInternal::H5vccAccountManagerInternal(
+    script::EnvironmentSettings* environment_settings)
     : user_authorizer_(account::UserAuthorizer::Create()),
       owning_message_loop_(base::MessageLoop::current()),
-      thread_("AccountManager") {
+      thread_("AccountManager"),
+      environment_settings_(environment_settings) {
   thread_.Start();
 }
 
@@ -62,8 +65,9 @@
 void H5vccAccountManagerInternal::PostOperation(
     OperationType operation_type, const AccessTokenCallbackHolder& callback) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  auto* global_wrappable = web::get_global_wrappable(environment_settings_);
   AccessTokenCallbackReference* token_callback =
-      new AccessTokenCallbackHolder::Reference(this, callback);
+      new AccessTokenCallbackHolder::Reference(global_wrappable, callback);
   pending_callbacks_.push_back(
       std::unique_ptr<AccessTokenCallbackReference>(token_callback));
   thread_.message_loop()->task_runner()->PostTask(
diff --git a/cobalt/h5vcc/h5vcc_account_manager_internal.h b/cobalt/h5vcc/h5vcc_account_manager_internal.h
index 94585a0..bc32e6d 100644
--- a/cobalt/h5vcc/h5vcc_account_manager_internal.h
+++ b/cobalt/h5vcc/h5vcc_account_manager_internal.h
@@ -26,6 +26,7 @@
 #include "base/threading/thread_checker.h"
 #include "cobalt/account/user_authorizer.h"
 #include "cobalt/script/callback_function.h"
+#include "cobalt/script/environment_settings.h"
 #include "cobalt/script/script_value.h"
 #include "cobalt/script/wrappable.h"
 
@@ -50,7 +51,8 @@
   // "H5vccAccountManager".
   static bool IsSupported();
 
-  H5vccAccountManagerInternal();
+  explicit H5vccAccountManagerInternal(
+      script::EnvironmentSettings* environment_settings);
 
   // H5vccAccountManagerInternal interface.
   void GetAuthToken(const AccessTokenCallbackHolder& callback);
@@ -114,6 +116,8 @@
   // message loop gets flushed.
   base::Thread thread_;
 
+  script::EnvironmentSettings* environment_settings_;
+
   friend class scoped_refptr<H5vccAccountManagerInternal>;
   DISALLOW_COPY_AND_ASSIGN(H5vccAccountManagerInternal);
 };
diff --git a/cobalt/h5vcc/h5vcc_account_manager_internal.idl b/cobalt/h5vcc/h5vcc_account_manager_internal.idl
index 0c648a2..76a3364 100644
--- a/cobalt/h5vcc/h5vcc_account_manager_internal.idl
+++ b/cobalt/h5vcc/h5vcc_account_manager_internal.idl
@@ -13,7 +13,8 @@
 // limitations under the License.
 [
   Conditional=COBALT_ENABLE_ACCOUNT_MANAGER,
-  Constructor
+  Constructor,
+  ConstructorCallWith=EnvironmentSettings,
 ]
 interface H5vccAccountManagerInternal {
   void getAuthToken(AccessTokenCallback callback);
diff --git a/cobalt/h5vcc/h5vcc_settings.cc b/cobalt/h5vcc/h5vcc_settings.cc
index 1eef9e6..ca8a59c 100644
--- a/cobalt/h5vcc/h5vcc_settings.cc
+++ b/cobalt/h5vcc/h5vcc_settings.cc
@@ -19,16 +19,29 @@
 namespace cobalt {
 namespace h5vcc {
 
-H5vccSettings::H5vccSettings(const SetSettingFunc& set_web_setting_func,
-                             cobalt::media::MediaModule* media_module,
-                             cobalt::network::NetworkModule* network_module,
+namespace {
+// Only including needed video combinations for the moment.
+// option 0 disables all video codecs except h264
+// option 1 disables all video codecs except av1
+// option 2 disables all video codecs except vp9
+constexpr std::array<const char*, 3> kDisableCodecCombinations{
+    "av01;hev1;hvc1;vp09;vp8.vp9", "avc1;avc3;hev1;hvc1;vp09;vp8;vp9",
+    "av01;avc1;avc3;hev1;hvc1;vp8"};
+};  // namespace
+
+H5vccSettings::H5vccSettings(
+    const SetSettingFunc& set_web_setting_func,
+    cobalt::media::MediaModule* media_module,
+    cobalt::media::CanPlayTypeHandler* can_play_type_handler,
+    cobalt::network::NetworkModule* network_module,
 #if SB_IS(EVERGREEN)
-                             cobalt::updater::UpdaterModule* updater_module,
+    cobalt::updater::UpdaterModule* updater_module,
 #endif
-                             web::NavigatorUAData* user_agent_data,
-                             script::GlobalEnvironment* global_environment)
+    web::NavigatorUAData* user_agent_data,
+    script::GlobalEnvironment* global_environment)
     : set_web_setting_func_(set_web_setting_func),
       media_module_(media_module),
+      can_play_type_handler_(can_play_type_handler),
       network_module_(network_module),
 #if SB_IS(EVERGREEN)
       updater_module_(updater_module),
@@ -39,6 +52,7 @@
 
 bool H5vccSettings::Set(const std::string& name, int32 value) const {
   const char kMediaPrefix[] = "Media.";
+  const char kDisableMediaCodec[] = "DisableMediaCodec";
   const char kNavigatorUAData[] = "NavigatorUAData";
   const char kQUIC[] = "QUIC";
 
@@ -46,6 +60,13 @@
   const char kUpdaterMinFreeSpaceBytes[] = "Updater.MinFreeSpaceBytes";
 #endif
 
+  if (name == kDisableMediaCodec &&
+      value < static_cast<int32>(kDisableCodecCombinations.size())) {
+    can_play_type_handler_->SetDisabledMediaCodecs(
+        kDisableCodecCombinations[value]);
+    return true;
+  }
+
   if (set_web_setting_func_ && set_web_setting_func_.Run(name, value)) {
     return true;
   }
diff --git a/cobalt/h5vcc/h5vcc_settings.h b/cobalt/h5vcc/h5vcc_settings.h
index 83a3adb..e6e5b4a 100644
--- a/cobalt/h5vcc/h5vcc_settings.h
+++ b/cobalt/h5vcc/h5vcc_settings.h
@@ -40,6 +40,7 @@
 
   H5vccSettings(const SetSettingFunc& set_web_setting_func,
                 cobalt::media::MediaModule* media_module,
+                cobalt::media::CanPlayTypeHandler* can_play_type_handler,
                 cobalt::network::NetworkModule* network_module,
 #if SB_IS(EVERGREEN)
                 cobalt::updater::UpdaterModule* updater_module,
@@ -57,6 +58,7 @@
  private:
   const SetSettingFunc set_web_setting_func_;
   cobalt::media::MediaModule* media_module_ = nullptr;
+  cobalt::media::CanPlayTypeHandler* can_play_type_handler_ = nullptr;
   cobalt::network::NetworkModule* network_module_ = nullptr;
 #if SB_IS(EVERGREEN)
   cobalt::updater::UpdaterModule* updater_module_ = nullptr;
diff --git a/cobalt/h5vcc/h5vcc_storage.cc b/cobalt/h5vcc/h5vcc_storage.cc
index 301c0f2..6c83852 100644
--- a/cobalt/h5vcc/h5vcc_storage.cc
+++ b/cobalt/h5vcc/h5vcc_storage.cc
@@ -25,6 +25,7 @@
 #include "cobalt/cache/cache.h"
 #include "cobalt/persistent_storage/persistent_settings.h"
 #include "cobalt/storage/storage_manager.h"
+#include "cobalt/worker/service_worker_consts.h"
 #include "net/base/completion_once_callback.h"
 #include "net/disk_cache/cobalt/cobalt_backend_impl.h"
 #include "net/disk_cache/cobalt/resource_type.h"
@@ -68,13 +69,32 @@
   return response;
 }
 
+void DeleteCacheResourceTypeDirectory(disk_cache::ResourceType type) {
+  auto metadata = disk_cache::kTypeMetadata[type];
+  std::vector<char> cache_dir(kSbFileMaxPath + 1, 0);
+  SbSystemGetPath(kSbSystemPathCacheDirectory, cache_dir.data(),
+                  kSbFileMaxPath);
+  base::FilePath cache_type_dir =
+      base::FilePath(cache_dir.data())
+          .Append(FILE_PATH_LITERAL(metadata.directory));
+  starboard::SbFileDeleteRecursive(cache_type_dir.value().data(), true);
+}
+
 void ClearCacheHelper(disk_cache::Backend* backend) {
   backend->DoomAllEntries(base::DoNothing());
+
+
+  for (int type_index = 0; type_index < disk_cache::kTypeCount; type_index++) {
+    DeleteCacheResourceTypeDirectory(
+        static_cast<disk_cache::ResourceType>(type_index));
+  }
 }
 
 void ClearCacheOfTypeHelper(disk_cache::ResourceType type,
                             disk_cache::CobaltBackendImpl* backend) {
   backend->DoomAllEntriesOfType(type, base::DoNothing());
+
+  DeleteCacheResourceTypeDirectory(type);
 }
 
 }  // namespace
@@ -377,6 +397,35 @@
   cobalt::cache::Cache::GetInstance()->DeleteAll();
 }
 
+void H5vccStorage::ClearCacheOfType(int type_index) {
+  if (type_index < 0 || type_index > disk_cache::kTypeCount) {
+    DLOG(INFO)
+        << "Invalid type_index, out of bounds of disk_cache::kTypeMetadata";
+    return;
+  }
+  disk_cache::ResourceType type =
+      static_cast<disk_cache::ResourceType>(type_index);
+  if (ValidatedCacheBackend()) {
+    network_module_->task_runner()->PostTask(
+        FROM_HERE, base::Bind(&ClearCacheOfTypeHelper, type,
+                              base::Unretained(cache_backend_)));
+  }
+  cobalt::cache::Cache::GetInstance()->Delete(type);
+}
+
+void H5vccStorage::ClearServiceWorkerCache() {
+  ClearCacheOfType(
+      static_cast<int>(disk_cache::ResourceType::kServiceWorkerScript));
+  // Add deletion of service worker persistent settings file
+  std::vector<char> storage_dir(kSbFileMaxPath, 0);
+  SbSystemGetPath(kSbSystemPathCacheDirectory, storage_dir.data(),
+                  kSbFileMaxPath);
+  std::string service_worker_file_path =
+      std::string(storage_dir.data()) + kSbFileSepString +
+      worker::ServiceWorkerConsts::kSettingsJson;
+  SbFileDelete(service_worker_file_path.c_str());
+}
+
 bool H5vccStorage::ValidatedCacheBackend() {
   if (!http_cache_) {
     return false;
diff --git a/cobalt/h5vcc/h5vcc_storage.h b/cobalt/h5vcc/h5vcc_storage.h
index 54b06c8..1ba86e3 100644
--- a/cobalt/h5vcc/h5vcc_storage.h
+++ b/cobalt/h5vcc/h5vcc_storage.h
@@ -66,6 +66,10 @@
 
   void ClearCache();
 
+  void ClearCacheOfType(int type_index);
+
+  void ClearServiceWorkerCache();
+
   DEFINE_WRAPPABLE_TYPE(H5vccStorage);
 
  private:
diff --git a/cobalt/h5vcc/h5vcc_storage.idl b/cobalt/h5vcc/h5vcc_storage.idl
index f1a15d2..9d4b1aa 100644
--- a/cobalt/h5vcc/h5vcc_storage.idl
+++ b/cobalt/h5vcc/h5vcc_storage.idl
@@ -29,4 +29,6 @@
   void disableCache();
 
   void clearCache();
+  void clearCacheOfType(octet type_index);
+  void clearServiceWorkerCache();
 };
diff --git a/cobalt/layout/box.cc b/cobalt/layout/box.cc
index 2e48d7d..99f53dc 100644
--- a/cobalt/layout/box.cc
+++ b/cobalt/layout/box.cc
@@ -2159,54 +2159,34 @@
   return false;
 }
 
-bool Box::ApplyTransformActionToCoordinate(TransformAction action,
-                                           math::Vector2dF* coordinate) const {
+bool Box::ApplyTransformActionToCoordinate(math::Vector2dF* coordinate) const {
   std::vector<math::Vector2dF> coordinate_vector;
   coordinate_vector.push_back(*coordinate);
-  bool result = ApplyTransformActionToCoordinates(action, &coordinate_vector);
+  bool result = ApplyTransformActionToCoordinates(&coordinate_vector);
   *coordinate = coordinate_vector[0];
   return result;
 }
 
 bool Box::ApplyTransformActionToCoordinates(
-    TransformAction action, std::vector<math::Vector2dF>* coordinates) const {
+    std::vector<math::Vector2dF>* coordinates) const {
   const scoped_refptr<cssom::PropertyValue>& transform =
       computed_style()->transform();
   if (transform == cssom::KeywordValue::GetNone()) {
     return true;
   }
 
-  // The border box offset is calculated in two steps because we want to
-  // stop at the second transform and not the first (which is this box).
   Vector2dLayoutUnit containing_block_offset_from_root =
       GetContainingBlockOffsetFromRoot(true /*transform_forms_root*/);
 
-  // The transform rect always includes the offset from the containing block.
-  // However, in the case where the action is entering the transform, the full
-  // offset from the root needs to be included in the transform.
-  Vector2dLayoutUnit transform_rect_offset =
-      margin_box_offset_from_containing_block() +
-      GetBorderBoxOffsetFromMarginBox();
-  if (action == kEnterTransform) {
-    transform_rect_offset += containing_block_offset_from_root;
-  }
+  auto matrix = GetCSSTransformForBoxWithPredefinedOffset(
+      containing_block_offset_from_root);
 
-  // Transform the coordinates.
-  math::Matrix3F matrix = GetCSSTransform(
-      transform.get(), computed_style()->transform_origin().get(),
-      math::RectF(transform_rect_offset.x().toFloat(),
-                  transform_rect_offset.y().toFloat(),
-                  GetBorderBoxWidth().toFloat(),
-                  GetBorderBoxHeight().toFloat()),
-      ComputeUiNavFocusForTransform());
   if (!matrix.IsIdentity()) {
-    if (action == kEnterTransform) {
-      matrix = matrix.Inverse();
-      // The matrix is not invertible. Return that applying the transform
-      // failed.
-      if (matrix.IsZeros()) {
-        return false;
-      }
+    matrix = matrix.Inverse();
+    // The matrix is not invertible. Return that applying the transform
+    // failed.
+    if (matrix.IsZeros()) {
+      return false;
     }
 
     for (std::vector<math::Vector2dF>::iterator coordinate_iter =
@@ -2230,15 +2210,61 @@
            coordinates->begin();
        coordinate_iter != coordinates->end(); ++coordinate_iter) {
     math::Vector2dF& coordinate = *coordinate_iter;
-    if (action == kEnterTransform) {
-      coordinate -= containing_block_offset_from_root_as_float;
-    } else {
-      coordinate += containing_block_offset_from_root_as_float;
-    }
+    coordinate -= containing_block_offset_from_root_as_float;
   }
   return true;
 }
 
+math::Matrix3F Box::GetCSSTransformForBox() const {
+  if (!IsTransformed()) {
+    return math::Matrix3F::Identity();
+  }
+
+  Vector2dLayoutUnit containing_block_offset_from_root =
+      GetContainingBlockOffsetFromRoot(true /*transform_forms_root*/);
+  return GetCSSTransformForBoxWithPredefinedOffset(
+      containing_block_offset_from_root);
+}
+
+math::Matrix3F Box::GetCSSTransformForBoxWithPredefinedOffset(
+    Vector2dLayoutUnit containing_block_offset_from_root) const {
+  if (!IsTransformed()) {
+    return math::Matrix3F::Identity();
+  }
+
+  // The border box offset is calculated in two steps because we want to
+  // stop at the second transform and not the first (which is the containing
+  // block).
+  //
+  // The transform rect always includes the offset from the containing block.
+  // However, in the case where the action is entering the transform, the full
+  // offset from the root needs to be included in the transform.
+  Vector2dLayoutUnit transform_rect_offset =
+      margin_box_offset_from_containing_block() +
+      GetBorderBoxOffsetFromMarginBox() + containing_block_offset_from_root;
+
+  // Transform the coordinates.
+  math::Matrix3F matrix =
+      GetCSSTransform(computed_style()->transform().get(),
+                      computed_style()->transform_origin().get(),
+                      math::RectF(transform_rect_offset.x().toFloat(),
+                                  transform_rect_offset.y().toFloat(),
+                                  GetBorderBoxWidth().toFloat(),
+                                  GetBorderBoxHeight().toFloat()),
+                      ComputeUiNavFocusForTransform());
+
+  return matrix;
+}
+
+bool Box::CoordinateCanTarget(const math::Vector2dF* coordinate) const {
+  if (!cssom::IsOverflowCropped(computed_style())) {
+    return true;
+  }
+  const Vector2dLayoutUnit layout_coordinate(LayoutUnit(coordinate->x()),
+                                             LayoutUnit(coordinate->y()));
+  return IsUnderCoordinate(layout_coordinate);
+}
+
 void Box::AddIntersectionObserverRootsAndTargets(
     BoxIntersectionObserverModule::IntersectionObserverRootVector&& roots,
     BoxIntersectionObserverModule::IntersectionObserverTargetVector&& targets) {
diff --git a/cobalt/layout/box.h b/cobalt/layout/box.h
index 9c17a87..05449cd 100644
--- a/cobalt/layout/box.h
+++ b/cobalt/layout/box.h
@@ -268,6 +268,8 @@
   // Returns the offset from root to this box's containing block.
   Vector2dLayoutUnit GetContainingBlockOffsetFromRoot(
       bool transform_forms_root) const;
+  math::Matrix3F GetCSSTransformForBoxWithPredefinedOffset(
+      Vector2dLayoutUnit containing_block_offset_from_root) const;
 
   // Returns the offset from the containing block (which can be either the
   // containing block's content box or padding box) to its content box.
@@ -705,10 +707,12 @@
   // Applies the specified transform action to the provided coordinates.
   // Returns false if the transform is not invertible and the action requires
   // it being inverted.
-  bool ApplyTransformActionToCoordinate(TransformAction action,
-                                        math::Vector2dF* coordinate) const;
+  bool ApplyTransformActionToCoordinate(math::Vector2dF* coordinate) const;
   bool ApplyTransformActionToCoordinates(
-      TransformAction action, std::vector<math::Vector2dF>* coordinates) const;
+      std::vector<math::Vector2dF>* coordinates) const;
+
+  bool CoordinateCanTarget(const math::Vector2dF* coordinate) const;
+  math::Matrix3F GetCSSTransformForBox() const;
 
   // Intended to be set to false on the initial containing block, this indicates
   // that when the background color is rendered, it will be blended with what,
diff --git a/cobalt/layout/topmost_event_target.cc b/cobalt/layout/topmost_event_target.cc
index fec6280..d7ce92e 100644
--- a/cobalt/layout/topmost_event_target.cc
+++ b/cobalt/layout/topmost_event_target.cc
@@ -14,6 +14,8 @@
 
 #include "cobalt/layout/topmost_event_target.h"
 
+#include <memory>
+#include <utility>
 #include <vector>
 
 #include "base/optional.h"
@@ -82,36 +84,40 @@
   return NULL;
 }
 
-scoped_refptr<dom::HTMLElement> FindFirstElementWithScrollType(
-    scoped_refptr<dom::HTMLElement> target_element,
-    ui_navigation::scroll_engine::ScrollType major_scroll_axis,
-    bool scrolling_right, bool scrolling_down) {
-  auto current_element = target_element;
-  bool scrolling_left = !scrolling_right;
-  bool scrolling_up = !scrolling_down;
-  bool horizontal_scroll_axis =
-      major_scroll_axis == ui_navigation::scroll_engine::ScrollType::Horizontal;
-  bool vertical_scroll_axis =
-      major_scroll_axis == ui_navigation::scroll_engine::ScrollType::Vertical;
+std::unique_ptr<dom::PossibleScrollTargets> FindPossibleScrollTargets(
+    scoped_refptr<dom::Element> target_element) {
+  std::unique_ptr<dom::PossibleScrollTargets> possible_scroll_targets =
+      std::make_unique<dom::PossibleScrollTargets>();
 
-  while (true) {
+  for (auto current_element = target_element; !!current_element;
+       current_element = current_element->parent_element()) {
+    auto current_html_element = current_element->AsHTMLElement();
+    if (!current_html_element) {
+      continue;
+    }
+
+    bool pointer_events_enabled =
+        current_html_element->computed_style()->pointer_events() !=
+        cssom::KeywordValue::GetNone();
+    if (!pointer_events_enabled) {
+      continue;
+    }
+
+    auto current_ui_nav_item = current_html_element->GetUiNavItem();
+    if (!current_ui_nav_item) {
+      continue;
+    }
+
     float scroll_top_lower_bound;
     float scroll_left_lower_bound;
     float scroll_top_upper_bound;
     float scroll_left_upper_bound;
-    float offset_x;
-    float offset_y;
-
-    if (!current_element->parent_element()) {
-      break;
-    }
-    current_element = current_element->parent_element()->AsHTMLElement();
-    auto current_ui_nav_item = current_element->GetUiNavItem();
-    if (!current_ui_nav_item) continue;
-
     current_ui_nav_item->GetBounds(
         &scroll_top_lower_bound, &scroll_left_lower_bound,
         &scroll_top_upper_bound, &scroll_left_upper_bound);
+
+    float offset_x;
+    float offset_y;
     current_ui_nav_item->GetContentOffset(&offset_x, &offset_y);
 
     bool can_scroll_left = scroll_left_lower_bound < offset_x;
@@ -119,197 +125,72 @@
     bool can_scroll_up = scroll_top_lower_bound < offset_y;
     bool can_scroll_down = scroll_top_upper_bound > offset_y;
 
-    if ((scrolling_left && can_scroll_left && horizontal_scroll_axis) ||
-        (scrolling_right && can_scroll_right && horizontal_scroll_axis) ||
-        (scrolling_up && can_scroll_up && vertical_scroll_axis) ||
-        (scrolling_down && can_scroll_down && vertical_scroll_axis)) {
-      return current_element;
+    if (can_scroll_left && !possible_scroll_targets->left) {
+      possible_scroll_targets->left = current_html_element;
     }
+    if (can_scroll_right && !possible_scroll_targets->right) {
+      possible_scroll_targets->right = current_html_element;
+    }
+    if (can_scroll_up && !possible_scroll_targets->up) {
+      possible_scroll_targets->up = current_html_element;
+    }
+    if (can_scroll_down && !possible_scroll_targets->down) {
+      possible_scroll_targets->down = current_html_element;
+    }
+  }
+  return possible_scroll_targets;
+}
+
+scoped_refptr<dom::HTMLElement> FindFirstElementWithScrollType(
+    dom::PossibleScrollTargets* possible_scroll_targets,
+    ui_navigation::scroll_engine::ScrollType major_scroll_axis,
+    bool scrolling_right, bool scrolling_down) {
+  bool scrolling_left = !scrolling_right;
+  bool scrolling_up = !scrolling_down;
+  bool horizontal_scroll_axis =
+      major_scroll_axis == ui_navigation::scroll_engine::ScrollType::Horizontal;
+  bool vertical_scroll_axis =
+      major_scroll_axis == ui_navigation::scroll_engine::ScrollType::Vertical;
+
+  if (scrolling_left && horizontal_scroll_axis) {
+    return possible_scroll_targets->left;
+  } else if (scrolling_right && horizontal_scroll_axis) {
+    return possible_scroll_targets->right;
+  } else if (scrolling_up && vertical_scroll_axis) {
+    return possible_scroll_targets->up;
+  } else if (scrolling_down && vertical_scroll_axis) {
+    return possible_scroll_targets->down;
   }
   return nullptr;
 }
 
 bool TransformCanBeAppliedToBox(const Box* box, math::Vector2dF* coordinate) {
-  return !box->IsTransformed() || box->ApplyTransformActionToCoordinate(
-                                      Box::kEnterTransform, coordinate);
+  return !box->IsTransformed() ||
+         box->ApplyTransformActionToCoordinate(coordinate);
 }
 
-bool CoordinateCanTargetBox(const Box* box, math::Vector2dF* coordinate) {
-  if (!cssom::IsOverflowCropped(box->computed_style())) {
-    return true;
+struct CanTargetBox {
+  const math::Vector2dF* coordinate;
+  explicit CanTargetBox(const math::Vector2dF* coordinate)
+      : coordinate(coordinate) {}
+  bool operator()(const Box* box) const {
+    return box->CoordinateCanTarget(coordinate);
   }
-  LayoutUnit coordinate_x(coordinate->x());
-  LayoutUnit coordinate_y(coordinate->y());
-
-  bool transform_forms_root = false;
-  auto padding_box = box->GetClampedPaddingBox(transform_forms_root);
-  return padding_box.Contains(coordinate_x, coordinate_y);
-}
+};
 
 bool ShouldConsiderElementAndChildren(dom::Element* element,
                                       math::Vector2dF* coordinate) {
   LayoutBoxes* layout_boxes = GetLayoutBoxesIfNotEmpty(element);
-  const Box* box = layout_boxes->boxes().front();
+  const Boxes boxes = layout_boxes->boxes();
+  const Box* box = boxes.front();
   if (!box->computed_style()) {
     return true;
   }
 
   return TransformCanBeAppliedToBox(box, coordinate) &&
-         CoordinateCanTargetBox(box, coordinate);
+         std::any_of(boxes.begin(), boxes.end(), CanTargetBox(coordinate));
 }
 
-}  // namespace
-void TopmostEventTarget::ConsiderElement(dom::Element* element,
-                                         const math::Vector2dF& coordinate) {
-  if (!element) return;
-  math::Vector2dF element_coordinate(coordinate);
-  LayoutBoxes* layout_boxes = GetLayoutBoxesIfNotEmpty(element);
-  if (layout_boxes) {
-    if (!ShouldConsiderElementAndChildren(element, &element_coordinate)) {
-      return;
-    }
-    scoped_refptr<dom::HTMLElement> html_element = element->AsHTMLElement();
-    if (html_element && html_element->CanBeDesignatedByPointerIfDisplayed()) {
-      ConsiderBoxes(html_element, layout_boxes, element_coordinate);
-    }
-  }
-
-  for (dom::Element* child_element = element->first_element_child();
-       child_element; child_element = child_element->next_element_sibling()) {
-    ConsiderElement(child_element, element_coordinate);
-  }
-}
-
-void TopmostEventTarget::ConsiderBoxes(
-    const scoped_refptr<dom::HTMLElement>& html_element,
-    LayoutBoxes* layout_boxes, const math::Vector2dF& coordinate) {
-  const Boxes& boxes = layout_boxes->boxes();
-  Vector2dLayoutUnit layout_coordinate(LayoutUnit(coordinate.x()),
-                                       LayoutUnit(coordinate.y()));
-  for (Boxes::const_iterator box_iterator = boxes.begin();
-       box_iterator != boxes.end(); ++box_iterator) {
-    Box* box = *box_iterator;
-    do {
-      if (box->IsUnderCoordinate(layout_coordinate)) {
-        Box::RenderSequence render_sequence = box->GetRenderSequence();
-        if (Box::IsRenderedLater(render_sequence, render_sequence_)) {
-          html_element_ = html_element;
-          box_ = box;
-          render_sequence_.swap(render_sequence);
-        }
-      }
-      box = box->GetSplitSibling();
-    } while (box != NULL);
-  }
-}
-
-void TopmostEventTarget::CancelScrollsInParentNavItems(
-    scoped_refptr<dom::HTMLElement> target_element) {
-  // Cancel any scrolls in the tree.
-  std::vector<scoped_refptr<ui_navigation::NavItem>> scrolls_to_cancel;
-  auto current_element = target_element;
-  while (true) {
-    if (!current_element->parent_element()) {
-      break;
-    }
-    current_element = current_element->parent_element()->AsHTMLElement();
-    auto current_ui_nav_item = current_element->GetUiNavItem();
-    if (current_ui_nav_item) {
-      scrolls_to_cancel.push_back(current_ui_nav_item);
-    }
-  }
-
-  scroll_engine_->thread()->message_loop()->task_runner()->PostTask(
-      FROM_HERE,
-      base::Bind(&ui_navigation::scroll_engine::ScrollEngine::
-                     CancelActiveScrollsForNavItems,
-                 base::Unretained(scroll_engine_), scrolls_to_cancel));
-}
-
-void TopmostEventTarget::HandleScrollState(
-    scoped_refptr<dom::HTMLElement> target_element,
-    const dom::PointerEvent* pointer_event, dom::PointerState* pointer_state,
-    dom::PointerEventInit* event_init) {
-  // On pointer down, cancel any scrolls happening for UI nav items above
-  // that element. Additionally, save the pointer coordinates.
-  //
-  // On pointer move, check if we've reached the threshold to start
-  // scrolling. If we have, find the first scroll container we can scroll.
-  // Then send that scroll container, initial pointer event coords, current
-  // pointer event coords, scroll direction.
-  bool pointer_type_is_accepted = pointer_event->pointer_type() == "mouse" ||
-                                  pointer_event->pointer_type() == "pen" ||
-                                  pointer_event->pointer_type() == "touch";
-  if (!scroll_engine_ || !pointer_event || !pointer_type_is_accepted) {
-    return;
-  }
-
-  bool should_clear_pointer_state =
-      pointer_event->type() == base::Tokens::pointerup();
-
-  auto pointer_id = pointer_event->pointer_id();
-  auto pointer_coordinates =
-      math::Vector2dF(pointer_event->client_x(), pointer_event->client_y());
-
-  if (pointer_event->type() == base::Tokens::pointerdown()) {
-    CancelScrollsInParentNavItems(target_element);
-    pointer_state->SetClientCoordinates(pointer_id, pointer_coordinates);
-    pointer_state->SetClientTimeStamp(pointer_id, pointer_event->time_stamp());
-    return;
-  }
-
-  auto initial_coordinates = pointer_state->GetClientCoordinates(pointer_id);
-  auto initial_time_stamp = pointer_state->GetClientTimeStamp(pointer_id);
-  if (pointer_event->type() == base::Tokens::pointermove() &&
-      initial_coordinates.has_value() && initial_time_stamp.has_value()) {
-    cobalt::math::Vector2dF drag_vector =
-        initial_coordinates.value() - pointer_coordinates;
-    float x = drag_vector.x();
-    float y = drag_vector.y();
-
-    if (drag_vector.Length() >=
-        ui_navigation::scroll_engine::kDragDistanceThreshold) {
-      // Get major scroll direction.
-      ui_navigation::scroll_engine::ScrollType scroll_type =
-          std::abs(x) > std::abs(y)
-              ? ui_navigation::scroll_engine::ScrollType::Horizontal
-              : ui_navigation::scroll_engine::ScrollType::Vertical;
-      auto element_to_scroll = FindFirstElementWithScrollType(
-          target_element, scroll_type, x > 0, y > 0);
-      if (!element_to_scroll) {
-        return;
-      }
-
-      const scoped_refptr<dom::Window>& view = event_init->view();
-      element_to_scroll->DispatchEvent(new dom::PointerEvent(
-          base::Tokens::pointercancel(), web::Event::kBubbles,
-          web::Event::kNotCancelable, view, *event_init));
-      element_to_scroll->DispatchEvent(
-          new dom::PointerEvent(base::Tokens::pointerout(), view, *event_init));
-      element_to_scroll->DispatchEvent(new dom::PointerEvent(
-          base::Tokens::pointerleave(), web::Event::kNotBubbles,
-          web::Event::kNotCancelable, view, *event_init));
-      pointer_state->SetWasCancelled(pointer_id);
-
-      should_clear_pointer_state = true;
-      scroll_engine_->thread()->message_loop()->task_runner()->PostTask(
-          FROM_HERE,
-          base::Bind(
-              &ui_navigation::scroll_engine::ScrollEngine::HandleScrollStart,
-              base::Unretained(scroll_engine_),
-              element_to_scroll->GetUiNavItem(), scroll_type, pointer_id,
-              initial_coordinates.value(), initial_time_stamp.value(),
-              pointer_coordinates, pointer_event->time_stamp()));
-    }
-  }
-
-  if (should_clear_pointer_state) {
-    pointer_state->ClearClientCoordinates(pointer_id);
-    pointer_state->ClearTimeStamp(pointer_id);
-  }
-}
-
-namespace {
 // Return the nearest common ancestor of previous_element and target_element
 scoped_refptr<dom::Element> GetNearestCommonAncestor(
     scoped_refptr<dom::HTMLElement> previous_element,
@@ -398,6 +279,15 @@
   }
 }
 
+void SendStateChangeLeaveEvents(
+    bool is_pointer_event, scoped_refptr<dom::HTMLElement> previous_element,
+    dom::PointerEventInit* event_init) {
+  scoped_refptr<dom::HTMLElement> target_element = nullptr;
+  scoped_refptr<dom::Element> nearest_common_ancestor = nullptr;
+  SendStateChangeLeaveEvents(is_pointer_event, previous_element, target_element,
+                             nearest_common_ancestor, event_init);
+}
+
 void SendStateChangeEnterEvents(
     bool is_pointer_event, scoped_refptr<dom::HTMLElement> previous_element,
     scoped_refptr<dom::HTMLElement> target_element,
@@ -520,8 +410,190 @@
     event_init->set_is_primary(pointer_event->is_primary());
   }
 }
+
+void DispatchPointerEventsForScrollStart(
+    scoped_refptr<dom::HTMLElement> element,
+    dom::PointerEventInit* event_init) {
+  const scoped_refptr<dom::Window>& view = event_init->view();
+  element->DispatchEvent(
+      new dom::PointerEvent(base::Tokens::pointercancel(), web::Event::kBubbles,
+                            web::Event::kNotCancelable, view, *event_init));
+  bool is_pointer_event = true;
+  SendStateChangeLeaveEvents(is_pointer_event, element, event_init);
+}
+
+math::Matrix3F GetCompleteTransformMatrix(dom::Element* element) {
+  auto complete_matrix = math::Matrix3F::Identity();
+  auto current_element = element;
+  while (current_element) {
+    LayoutBoxes* layout_boxes = GetLayoutBoxesIfNotEmpty(current_element);
+    const Box* box = layout_boxes->boxes().front();
+    complete_matrix = complete_matrix * box->GetCSSTransformForBox();
+    current_element = current_element->parent_element();
+  }
+  return complete_matrix;
+}
+
 }  // namespace
 
+void TopmostEventTarget::ConsiderElement(dom::Element* element,
+                                         const math::Vector2dF& coordinate) {
+  if (!element) return;
+  math::Vector2dF element_coordinate(coordinate);
+  LayoutBoxes* layout_boxes = GetLayoutBoxesIfNotEmpty(element);
+  if (layout_boxes) {
+    if (!ShouldConsiderElementAndChildren(element, &element_coordinate)) {
+      return;
+    }
+    scoped_refptr<dom::HTMLElement> html_element = element->AsHTMLElement();
+    if (html_element && html_element->CanBeDesignatedByPointerIfDisplayed()) {
+      ConsiderBoxes(html_element, layout_boxes, element_coordinate);
+    }
+  }
+
+  for (dom::Element* child_element = element->first_element_child();
+       child_element; child_element = child_element->next_element_sibling()) {
+    ConsiderElement(child_element, element_coordinate);
+  }
+}
+
+void TopmostEventTarget::ConsiderBoxes(
+    const scoped_refptr<dom::HTMLElement>& html_element,
+    LayoutBoxes* layout_boxes, const math::Vector2dF& coordinate) {
+  const Boxes& boxes = layout_boxes->boxes();
+  Vector2dLayoutUnit layout_coordinate(LayoutUnit(coordinate.x()),
+                                       LayoutUnit(coordinate.y()));
+  for (Boxes::const_iterator box_iterator = boxes.begin();
+       box_iterator != boxes.end(); ++box_iterator) {
+    Box* box = *box_iterator;
+    do {
+      if (box->IsUnderCoordinate(layout_coordinate)) {
+        Box::RenderSequence render_sequence = box->GetRenderSequence();
+        if (Box::IsRenderedLater(render_sequence, render_sequence_)) {
+          html_element_ = html_element;
+          box_ = box;
+          render_sequence_.swap(render_sequence);
+        }
+      }
+      box = box->GetSplitSibling();
+    } while (box != NULL);
+  }
+}
+
+void TopmostEventTarget::CancelScrollsInParentNavItems(
+    scoped_refptr<dom::HTMLElement> target_element) {
+  // Cancel any scrolls in the tree.
+  std::vector<scoped_refptr<ui_navigation::NavItem>> scrolls_to_cancel;
+  auto current_element = target_element;
+  while (true) {
+    if (!current_element->parent_element()) {
+      break;
+    }
+    current_element = current_element->parent_element()->AsHTMLElement();
+    auto current_ui_nav_item = current_element->GetUiNavItem();
+    if (current_ui_nav_item) {
+      scrolls_to_cancel.push_back(current_ui_nav_item);
+    }
+  }
+
+  scroll_engine_->thread()->message_loop()->task_runner()->PostTask(
+      FROM_HERE,
+      base::Bind(&ui_navigation::scroll_engine::ScrollEngine::
+                     CancelActiveScrollsForNavItems,
+                 base::Unretained(scroll_engine_), scrolls_to_cancel));
+}
+
+void TopmostEventTarget::HandleScrollState(
+    scoped_refptr<dom::HTMLElement> target_element,
+    const dom::PointerEvent* pointer_event, dom::PointerState* pointer_state,
+    dom::PointerEventInit* event_init) {
+  // On pointer down, cancel any scrolls happening for UI nav items above
+  // that element. Additionally, save the pointer coordinates.
+  //
+  // On pointer move, check if we've reached the threshold to start
+  // scrolling. If we have, find the first scroll container we can scroll.
+  // Then send that scroll container, initial pointer event coords, current
+  // pointer event coords, scroll direction.
+  bool pointer_type_is_accepted = pointer_event->pointer_type() == "mouse" ||
+                                  pointer_event->pointer_type() == "pen" ||
+                                  pointer_event->pointer_type() == "touch";
+  if (!scroll_engine_ || !pointer_event || !pointer_type_is_accepted) {
+    return;
+  }
+
+  bool should_clear_pointer_state =
+      pointer_event->type() == base::Tokens::pointerup();
+
+  auto pointer_id = pointer_event->pointer_id();
+  auto pointer_coordinates =
+      math::Vector2dF(pointer_event->client_x(), pointer_event->client_y());
+
+  if (pointer_event->type() == base::Tokens::pointerdown()) {
+    CancelScrollsInParentNavItems(target_element);
+
+    auto initial_possible_scroll_targets =
+        FindPossibleScrollTargets(target_element);
+    pointer_state->SetPossibleScrollTargets(
+        pointer_id, std::move(initial_possible_scroll_targets));
+
+    auto transform_matrix = GetCompleteTransformMatrix(target_element.get());
+    pointer_state->SetClientTransformMatrix(pointer_id, transform_matrix);
+    pointer_state->SetClientCoordinates(pointer_id, pointer_coordinates);
+    pointer_state->SetClientTimeStamp(pointer_id, pointer_event->time_stamp());
+    return;
+  }
+
+  auto initial_coordinates = pointer_state->GetClientCoordinates(pointer_id);
+  auto initial_time_stamp = pointer_state->GetClientTimeStamp(pointer_id);
+  auto possible_scroll_targets =
+      pointer_state->GetPossibleScrollTargets(pointer_id);
+  auto initial_transform = pointer_state->GetClientTransformMatrix(pointer_id);
+
+  if (pointer_event->type() == base::Tokens::pointermove() &&
+      initial_coordinates.has_value() && initial_time_stamp.has_value() &&
+      possible_scroll_targets) {
+    cobalt::math::Vector2dF drag_vector =
+        initial_coordinates.value() - pointer_coordinates;
+    float x = drag_vector.x();
+    float y = drag_vector.y();
+
+    if (drag_vector.Length() >=
+        ui_navigation::scroll_engine::kDragDistanceThreshold) {
+      // Get major scroll direction.
+      ui_navigation::scroll_engine::ScrollType scroll_type =
+          std::abs(x) > std::abs(y)
+              ? ui_navigation::scroll_engine::ScrollType::Horizontal
+              : ui_navigation::scroll_engine::ScrollType::Vertical;
+      auto element_to_scroll = FindFirstElementWithScrollType(
+          possible_scroll_targets, scroll_type, x > 0, y > 0);
+      if (!element_to_scroll) {
+        return;
+      }
+
+      DispatchPointerEventsForScrollStart(target_element, event_init);
+      pointer_state->SetWasCancelled(pointer_id);
+
+      should_clear_pointer_state = true;
+      scroll_engine_->thread()->message_loop()->task_runner()->PostTask(
+          FROM_HERE,
+          base::Bind(
+              &ui_navigation::scroll_engine::ScrollEngine::HandleScrollStart,
+              base::Unretained(scroll_engine_),
+              element_to_scroll->GetUiNavItem(), scroll_type, pointer_id,
+              initial_coordinates.value(), initial_time_stamp.value(),
+              pointer_coordinates, pointer_event->time_stamp(),
+              initial_transform));
+    }
+  }
+
+  if (should_clear_pointer_state) {
+    pointer_state->ClearPossibleScrollTargets(pointer_id);
+    pointer_state->ClearClientCoordinates(pointer_id);
+    pointer_state->ClearTimeStamp(pointer_id);
+    pointer_state->ClearMatrix(pointer_id);
+  }
+}
+
 TopmostEventTarget::TopmostEventTarget(
     ui_navigation::scroll_engine::ScrollEngine* scroll_engine)
     : scroll_engine_(scroll_engine) {}
diff --git a/cobalt/layout_tests/testdata/web-platform-tests/service-workers/web_platform_tests.txt b/cobalt/layout_tests/testdata/web-platform-tests/service-workers/web_platform_tests.txt
index a26a02e..8072c2b 100644
--- a/cobalt/layout_tests/testdata/web-platform-tests/service-workers/web_platform_tests.txt
+++ b/cobalt/layout_tests/testdata/web-platform-tests/service-workers/web_platform_tests.txt
@@ -1,59 +1,57 @@
 # Service Worker API tests
 
+service-worker/clients-matchall-on-evaluation.https.html, PASS
+service-worker/fetch-event-add-async.https.html, PASS
+service-worker/import-scripts-cross-origin.https.html, PASS
+service-worker/import-scripts-mime-types.https.html, PASS
+service-worker/import-scripts-resource-map.https.html, PASS
+service-worker/import-scripts-updated-flag.https.html, PASS
 service-worker/register-default-scope.https.html, PASS
+service-worker/registration-basic.https.html, PASS
+service-worker/registration-security-error.https.html, PASS
+service-worker/registration-script-url.https.html, PASS
 service-worker/rejections.https.html, PASS
 service-worker/serviceworkerobject-scripturl.https.html, PASS
+service-worker/service-worker-csp-default.https.html, PASS
+service-worker/service-worker-csp-connect.https.html, PASS
+service-worker/service-worker-header.https.html, PASS
+service-worker/service-worker-csp-script.https.html, PASS
+service-worker/Service-Worker-Allowed-header.https.html, PASS
+service-worker/skip-waiting-without-client.https.html, PASS
+service-worker/uncontrolled-page.https.html, PASS
 service-worker/unregister.https.html, PASS
-service-worker/registration-script-url.https.html, DISABLE
-service-worker/registration-security-error.https.html, DISABLE
-service-worker/Service-Worker-Allowed-header.https.html, DISABLE
-service-worker/update-result.https.html, DISABLE
-service-worker/update-missing-import-scripts.https.html, DISABLE
+service-worker/update-missing-import-scripts.https.html, PASS
+service-worker/update-result.https.html, PASS
 
 # Tests pass with memory leakage issue.
 service-worker/update-no-cache-request-headers.https.html, DISABLE
 
-# b/266605500
-# Caught signal: SIGSEGV on linux-x64x11-sbversion-12_evergreen-x64-sbversion-12_nightly
-service-worker/clients-matchall-on-evaluation.https.html, DISABLE
-
-# b/266605087 TypeError: Cannot set property 'onerror' of null"
-service-worker/skip-waiting-without-client.https.html, DISABLE
-
 # b/234788479 Implement waiting for update worker state tasks in Install algorithm.
 service-worker/activation-after-registration.https.html, DISABLE
-
-# b/264920834 heap-use-after-free bug
-service-worker/registration-basic.https.html, DISABLE
 service-worker/activate-event-after-install-state-change.https.html, DISABLE
-service-worker/clients-matchall-frozen.https.html, DISABLE
-service-worker/fetch-event-add-async.https.html, DISABLE
+service-worker/import-scripts-redirect.https.html, DISABLE
 service-worker/multiple-update.https.html, DISABLE
 service-worker/register-wait-forever-in-install-worker.https.html, DISABLE
-service-worker/registration-events.https.html, DISABLE
-service-worker/registration-schedule-job.https.html, DISABLE
-service-worker/service-worker-header.https.html, DISABLE
+service-worker/registration-service-worker-attributes.https.html, DISABLE
 service-worker/state.https.html, DISABLE
-service-worker/uncontrolled-page.https.html, DISABLE
-
-# b/267538636 assert_throws_js: eval() should throw EvalError
-service-worker/service-worker-csp-connect.https.html, DISABLE
-service-worker/service-worker-csp-default.https.html, DISABLE
-service-worker/service-worker-csp-script.https.html, DISABLE
+service-worker/synced-state.https.html, DISABLE
 
 # "Module" type of dedicated worker is supported in Cobalt
 service-worker/dedicated-worker-service-worker-interception.https.html, DISABLE
+service-worker/registration-schedule-job.https.html, DISABLE
 service-worker/registration-scope-module-static-import.https.html, DISABLE
+service-worker/registration-script-module.https.html, DISABLE
 service-worker/update-module-request-mode.https.html, DISABLE
 service-worker/update-registration-with-type.https.html, DISABLE
-service-worker/registration-script-module.https.html, DISABLE
 
 # Channel API is not supported in Cobalt
+service-worker/clients-matchall-frozen.https.html, DISABLE
 service-worker/extendable-event-waituntil.https.html, DISABLE
 service-worker/immutable-prototype-serviceworker.https.html, DISABLE
 service-worker/indexeddb.https.html, DISABLE
 service-worker/postmessage.https.html, DISABLE
 service-worker/registration-end-to-end.https.html, DISABLE
+service-worker/registration-events.https.html, DISABLE
 
 # Below are manual tests from web-platform-tests without automation.
 service-worker/fetch-event-is-history-backward-navigation-manual.https.html, DISABLE
@@ -61,11 +59,6 @@
 service-worker/fetch-event-is-reload-navigation-manual.https.html, DISABLE
 
 # b/265841607 Unhandled rejection with value: object "TypeError"
-service-worker/import-scripts-cross-origin.https.html, DISABLE
-service-worker/import-scripts-mime-types.https.html, DISABLE
-service-worker/import-scripts-redirect.https.html, DISABLE
-service-worker/import-scripts-resource-map.https.html, DISABLE
-service-worker/import-scripts-updated-flag.https.html, DISABLE
 service-worker/same-site-cookies.https.html, DISABLE
 
 # b/265844662
@@ -95,12 +88,6 @@
 service-worker/unregister-immediately-before-installed.https.html, DISABLE
 service-worker/update-not-allowed.https.html, DISABLE
 
-# b/265981629
-service-worker/registration-service-worker-attributes.https.html, DISABLE
-
-# b/265983449
-service-worker/synced-state.https.html, DISABLE
-
 # websocket is not supported in Cobalt
 service-worker/websocket-in-service-worker.https.html, DISABLE
 
diff --git a/cobalt/layout_tests/testdata/web-platform-tests/workers/web_platform_tests.txt b/cobalt/layout_tests/testdata/web-platform-tests/workers/web_platform_tests.txt
index 7845616..48654c3 100644
--- a/cobalt/layout_tests/testdata/web-platform-tests/workers/web_platform_tests.txt
+++ b/cobalt/layout_tests/testdata/web-platform-tests/workers/web_platform_tests.txt
@@ -5,14 +5,12 @@
 # features that are expected to currently work.
 
 Worker_basic.htm, PASS
-
-# b/266711887 SIGSEGV
-Worker_dispatchEvent_ErrorEvent.htm, DISABLE
+Worker_dispatchEvent_ErrorEvent.htm, PASS
 
 # b/225037465
 Worker_cross_origin_security_err.htm, DISABLE
 
-# b/226640425
+# b/275741116
 Worker_ErrorEvent_bubbles_cancelable.htm, DISABLE
 Worker_ErrorEvent_filename.htm, DISABLE
 Worker_ErrorEvent_lineno.htm, DISABLE
diff --git a/cobalt/layout_tests/web_platform_tests.cc b/cobalt/layout_tests/web_platform_tests.cc
index 860755a..ac6e3fd 100644
--- a/cobalt/layout_tests/web_platform_tests.cc
+++ b/cobalt/layout_tests/web_platform_tests.cc
@@ -55,21 +55,22 @@
  public:
   CspDelegatePermissive(
       std::unique_ptr<web::CspViolationReporter> violation_reporter,
-      const GURL& url, csp::CSPHeaderPolicy require_csp,
+      const GURL& url, csp::CSPHeaderPolicy csp_header_policy,
       const base::Closure& policy_changed_callback)
-      : web::CspDelegateSecure(std::move(violation_reporter), url, require_csp,
-                               policy_changed_callback) {
+      : web::CspDelegateSecure(std::move(violation_reporter), url,
+                               csp_header_policy, policy_changed_callback) {
     // Lies, but some checks in our parent require this.
     was_header_received_ = true;
   }
 
   static CspDelegate* Create(
       std::unique_ptr<web::CspViolationReporter> violation_reporter,
-      const GURL& url, csp::CSPHeaderPolicy require_csp,
+      const GURL& url, csp::CSPHeaderPolicy csp_header_policy,
       const base::Closure& policy_changed_callback,
       int insecure_allowed_token) {
     return new CspDelegatePermissive(std::move(violation_reporter), url,
-                                     require_csp, policy_changed_callback);
+                                     csp_header_policy,
+                                     policy_changed_callback);
   }
 
   bool OnReceiveHeaders(const csp::ResponseHeaders& headers) override {
@@ -196,6 +197,7 @@
   // Network module
   network::NetworkModule::Options net_options;
   net_options.https_requirement = network::kHTTPSOptional;
+  net_options.ignore_certificate_errors = true;
   std::string custom_proxy =
       base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("proxy");
   if (!custom_proxy.empty()) net_options.custom_proxy = custom_proxy;
@@ -232,7 +234,8 @@
   // Create Service Worker Registry
   browser::ServiceWorkerRegistry* service_worker_registry =
       new browser::ServiceWorkerRegistry(&web_settings, &network_module,
-                                         new browser::UserAgentPlatformInfo());
+                                         new browser::UserAgentPlatformInfo(),
+                                         url);
   web_module_options.web_options.service_worker_jobs =
       service_worker_registry->service_worker_jobs();
 
diff --git a/cobalt/loader/BUILD.gn b/cobalt/loader/BUILD.gn
index 8d50f70..2db902d 100644
--- a/cobalt/loader/BUILD.gn
+++ b/cobalt/loader/BUILD.gn
@@ -116,6 +116,7 @@
     "//cobalt/renderer/test/png_utils",
     "//cobalt/web",
     "//nb",
+    "//net",
     "//third_party/libjpeg-turbo:libjpeg",
     "//third_party/libpng",
     "//third_party/libwebp",
diff --git a/cobalt/loader/cors_preflight.cc b/cobalt/loader/cors_preflight.cc
index eb3b70a..53e501d 100644
--- a/cobalt/loader/cors_preflight.cc
+++ b/cobalt/loader/cors_preflight.cc
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 
+#include "cobalt/loader/cors_preflight.h"
+
 #include <algorithm>
 #include <cstring>
 #include <iterator>
@@ -23,7 +25,6 @@
 #include "base/basictypes.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
-#include "cobalt/loader/cors_preflight.h"
 #include "starboard/common/string.h"
 
 namespace cobalt {
@@ -412,17 +413,17 @@
   size_t iter = 0;
   if (!response_headers.EnumerateHeader(&iter, kAccessControlAllowOrigin,
                                         &allowed_origin)) {
-    DLOG(WARNING) << "Insecure cross-origin network request returned response "
-                     "with no Access-Control-Allow-Origin header. Request "
-                     "aborted.";
+    LOG(WARNING) << "Insecure cross-origin network request returned response "
+                    "with no Access-Control-Allow-Origin header. Request "
+                    "aborted: ";
     return false;
   }
   DCHECK(iter);
   if (response_headers.EnumerateHeader(&iter, kAccessControlAllowOrigin,
                                        &empty_container)) {
-    DLOG(WARNING) << "Insecure cross-origin network request returned response "
-                     "with multiple Access-Control-Allow-Origin headers. "
-                     "Behavior disallowed and request aborted";
+    LOG(WARNING) << "Insecure cross-origin network request returned response "
+                    "with multiple Access-Control-Allow-Origin headers. "
+                    "Behavior disallowed and request aborted: ";
     return false;
   }
   // 3. If request's credentials mode is not "include" and origin is `*`, return
@@ -432,13 +433,14 @@
   }
   // 2. If origin is null or failure, return failure.
   if (allowed_origin.empty()) {
+    LOG(WARNING) << "CORS check failed: Origin is null or failure.";
     return false;
   }
   // 4. If request's origin, serialized and UTF-8 encoded, is not origin, return
   //    failure.
   if (allowed_origin != serialized_origin) {
-    DLOG(WARNING) << "Network request origin is not allowed by server's "
-                     "Access-Control-Allow-Origin header, request aborted.";
+    LOG(WARNING) << "Network request origin is not allowed by server's "
+                    "Access-Control-Allow-Origin header, request aborted.";
     return false;
   }
   // 5. If request's credentials mode is not "include", return success.
@@ -451,7 +453,7 @@
                                            &allow_credentials)) {
     // 7. If credentials is `true`, return success.
     if (allow_credentials != "true") {
-      DLOG(WARNING)
+      LOG(WARNING)
           << "Network request failed because request want to include credential"
              "but server disallow it.";
       return false;
@@ -459,6 +461,7 @@
       return true;
     }
   }
+  LOG(WARNING) << "CORS check failed.";
   return false;
 }
 
diff --git a/cobalt/loader/fetch_interceptor_coordinator.cc b/cobalt/loader/fetch_interceptor_coordinator.cc
index f4db96c..a7599fc 100644
--- a/cobalt/loader/fetch_interceptor_coordinator.cc
+++ b/cobalt/loader/fetch_interceptor_coordinator.cc
@@ -37,7 +37,9 @@
 
 
 void FetchInterceptorCoordinator::TryIntercept(
-    const GURL& url,
+    const GURL& url, bool main_resource,
+    const net::HttpRequestHeaders& request_headers,
+    scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner,
     base::OnceCallback<void(std::unique_ptr<std::string>)> callback,
     base::OnceCallback<void(const net::LoadTimingInfo&)>
         report_load_timing_info,
@@ -66,7 +68,8 @@
   //       Consider moving the interception out of the ServiceWorkerGlobalScope
   //       to avoid a race condition. Fetches should be able to be intercepted
   //       by an active, registered, service worker.
-  fetch_interceptor_->StartFetch(url, std::move(callback),
+  fetch_interceptor_->StartFetch(url, main_resource, request_headers,
+                                 callback_task_runner, std::move(callback),
                                  std::move(report_load_timing_info),
                                  std::move(fallback));
 }
diff --git a/cobalt/loader/fetch_interceptor_coordinator.h b/cobalt/loader/fetch_interceptor_coordinator.h
index d8b0bbd..b266807 100644
--- a/cobalt/loader/fetch_interceptor_coordinator.h
+++ b/cobalt/loader/fetch_interceptor_coordinator.h
@@ -19,7 +19,9 @@
 #include <string>
 
 #include "base/bind.h"
+#include "base/single_thread_task_runner.h"
 #include "net/base/load_timing_info.h"
+#include "net/http/http_request_headers.h"
 #include "url/gurl.h"
 
 namespace base {
@@ -33,7 +35,9 @@
 class FetchInterceptor {
  public:
   virtual void StartFetch(
-      const GURL& url,
+      const GURL& url, bool main_resource,
+      const net::HttpRequestHeaders& request_headers,
+      scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner,
       base::OnceCallback<void(std::unique_ptr<std::string>)> callback,
       base::OnceCallback<void(const net::LoadTimingInfo&)>
           report_load_timing_info,
@@ -52,7 +56,9 @@
   void Clear() { fetch_interceptor_ = nullptr; }
 
   void TryIntercept(
-      const GURL& url,
+      const GURL& url, bool main_resource,
+      const net::HttpRequestHeaders& request_headers,
+      scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner,
       base::OnceCallback<void(std::unique_ptr<std::string>)> callback,
       base::OnceCallback<void(const net::LoadTimingInfo&)>
           report_load_timing_info,
diff --git a/cobalt/loader/fetcher_cache.cc b/cobalt/loader/fetcher_cache.cc
index 9b0244f..8d6b707 100644
--- a/cobalt/loader/fetcher_cache.cc
+++ b/cobalt/loader/fetcher_cache.cc
@@ -14,6 +14,8 @@
 
 #include "cobalt/loader/fetcher_cache.h"
 
+#include <utility>
+
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
@@ -300,8 +302,15 @@
   if (data->size() <= capacity_) {
     auto entry = new CacheEntry(headers, last_url_origin,
                                 did_fail_from_transient_error, data);
+
+    bool inserted = cache_entries_.insert(std::make_pair(url, entry)).second;
+    if (!inserted) {
+      // The resource is already cached.
+      delete entry;
+      return;
+    }
+
     total_size_ += entry->capacity();
-    cache_entries_.insert(std::make_pair(url, entry));
     while (total_size_ > capacity_) {
       DCHECK(!cache_entries_.empty());
       total_size_ -= cache_entries_.begin()->second->capacity();
diff --git a/cobalt/loader/fetcher_factory.cc b/cobalt/loader/fetcher_factory.cc
index d938046..89322cd 100644
--- a/cobalt/loader/fetcher_factory.cc
+++ b/cobalt/loader/fetcher_factory.cc
@@ -84,15 +84,17 @@
       read_cache_callback_(read_cache_callback) {}
 
 std::unique_ptr<Fetcher> FetcherFactory::CreateFetcher(
-    const GURL& url, const disk_cache::ResourceType type,
+    const GURL& url, bool main_resource, const disk_cache::ResourceType type,
     Fetcher::Handler* handler) {
-  return CreateSecureFetcher(url, csp::SecurityCallback(), kNoCORSMode,
-                             Origin(), type, net::HttpRequestHeaders(),
+  return CreateSecureFetcher(url, main_resource, csp::SecurityCallback(),
+                             kNoCORSMode, Origin(), type,
+                             net::HttpRequestHeaders(),
                              /*skip_fetch_intercept=*/false, handler);
 }
 
 std::unique_ptr<Fetcher> FetcherFactory::CreateSecureFetcher(
-    const GURL& url, const csp::SecurityCallback& url_security_callback,
+    const GURL& url, bool main_resource,
+    const csp::SecurityCallback& url_security_callback,
     RequestMode request_mode, const Origin& origin,
     const disk_cache::ResourceType type, net::HttpRequestHeaders headers,
     bool skip_fetch_intercept, Fetcher::Handler* handler) {
@@ -112,8 +114,8 @@
     options.headers = std::move(headers);
     options.skip_fetch_intercept = skip_fetch_intercept;
     return std::unique_ptr<Fetcher>(
-        new NetFetcher(url, url_security_callback, handler, network_module_,
-                       options, request_mode, origin));
+        new NetFetcher(url, main_resource, url_security_callback, handler,
+                       network_module_, options, request_mode, origin));
   }
 
   if (url.SchemeIs("blob") && !blob_resolver_.is_null()) {
diff --git a/cobalt/loader/fetcher_factory.h b/cobalt/loader/fetcher_factory.h
index cb46a6a..7cff2d8 100644
--- a/cobalt/loader/fetcher_factory.h
+++ b/cobalt/loader/fetcher_factory.h
@@ -50,12 +50,13 @@
           base::Callback<int(const std::string&, std::unique_ptr<char[]>*)>());
 
   // Creates a fetcher. Returns NULL if the creation fails.
-  std::unique_ptr<Fetcher> CreateFetcher(const GURL& url,
+  std::unique_ptr<Fetcher> CreateFetcher(const GURL& url, bool main_resource,
                                          const disk_cache::ResourceType type,
                                          Fetcher::Handler* handler);
 
   std::unique_ptr<Fetcher> CreateSecureFetcher(
-      const GURL& url, const csp::SecurityCallback& url_security_callback,
+      const GURL& url, bool main_resource,
+      const csp::SecurityCallback& url_security_callback,
       RequestMode request_mode, const Origin& origin,
       const disk_cache::ResourceType type, net::HttpRequestHeaders headers,
       bool skip_fetch_intercept, Fetcher::Handler* handler);
diff --git a/cobalt/loader/fetcher_factory_test.cc b/cobalt/loader/fetcher_factory_test.cc
index 9767e69..1f579db 100644
--- a/cobalt/loader/fetcher_factory_test.cc
+++ b/cobalt/loader/fetcher_factory_test.cc
@@ -12,12 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include "cobalt/loader/fetcher_factory.h"
+
 #include <memory>
 #include <string>
 
 #include "base/optional.h"
 #include "base/run_loop.h"
-#include "cobalt/loader/fetcher_factory.h"
 #include "cobalt/loader/file_fetcher.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -83,7 +84,8 @@
   StubFetcherHandler stub_fetcher_handler(&run_loop);
 
   fetcher_ = fetcher_factory_.CreateFetcher(
-      GURL("invalid-url"), disk_cache::kOther, &stub_fetcher_handler);
+      GURL("invalid-url"), /*main_resource=*/false, disk_cache::kOther,
+      &stub_fetcher_handler);
   EXPECT_TRUE(fetcher_);
 
   run_loop.Run();
@@ -95,8 +97,9 @@
   base::RunLoop run_loop;
   StubFetcherHandler stub_fetcher_handler(&run_loop);
 
-  fetcher_ = fetcher_factory_.CreateFetcher(
-      GURL("file:///"), disk_cache::kOther, &stub_fetcher_handler);
+  fetcher_ =
+      fetcher_factory_.CreateFetcher(GURL("file:///"), /*main_resource=*/false,
+                                     disk_cache::kOther, &stub_fetcher_handler);
   EXPECT_TRUE(fetcher_);
 
   run_loop.Run();
@@ -109,7 +112,8 @@
   StubFetcherHandler stub_fetcher_handler(&run_loop);
 
   fetcher_ = fetcher_factory_.CreateFetcher(
-      GURL("file://file.txt"), disk_cache::kOther, &stub_fetcher_handler);
+      GURL("file://file.txt"), /*main_resource=*/false, disk_cache::kOther,
+      &stub_fetcher_handler);
   EXPECT_TRUE(fetcher_);
 
   run_loop.Run();
@@ -124,14 +128,14 @@
   base::RunLoop run_loop;
   StubFetcherHandler stub_fetcher_handler(&run_loop);
 
-  fetcher_ =
-      fetcher_factory_.CreateFetcher(GURL("file:///nonempty-url-1"),
-                                     disk_cache::kOther, &stub_fetcher_handler);
+  fetcher_ = fetcher_factory_.CreateFetcher(
+      GURL("file:///nonempty-url-1"), /*main_resource=*/false,
+      disk_cache::kOther, &stub_fetcher_handler);
   EXPECT_TRUE(fetcher_);
 
-  fetcher_ =
-      fetcher_factory_.CreateFetcher(GURL("file:///nonempty-url-2"),
-                                     disk_cache::kOther, &stub_fetcher_handler);
+  fetcher_ = fetcher_factory_.CreateFetcher(
+      GURL("file:///nonempty-url-2"), /*main_resource=*/false,
+      disk_cache::kOther, &stub_fetcher_handler);
   EXPECT_TRUE(fetcher_);
   run_loop.Run();
   EXPECT_EQ(fetcher_.get(), stub_fetcher_handler.fetcher());
diff --git a/cobalt/loader/net_fetcher.cc b/cobalt/loader/net_fetcher.cc
index 4fa52ec..7f43139 100644
--- a/cobalt/loader/net_fetcher.cc
+++ b/cobalt/loader/net_fetcher.cc
@@ -91,7 +91,7 @@
 
 }  // namespace
 
-NetFetcher::NetFetcher(const GURL& url,
+NetFetcher::NetFetcher(const GURL& url, bool main_resource,
                        const csp::SecurityCallback& security_callback,
                        Handler* handler,
                        const network::NetworkModule* network_module,
@@ -105,7 +105,9 @@
       origin_(origin),
       request_script_(options.resource_type == disk_cache::kUncompiledScript),
       task_runner_(base::MessageLoop::current()->task_runner()),
-      skip_fetch_intercept_(options.skip_fetch_intercept) {
+      skip_fetch_intercept_(options.skip_fetch_intercept),
+      will_destroy_current_message_loop_(false),
+      main_resource_(main_resource) {
   url_fetcher_ = net::URLFetcher::Create(url, options.request_method, this);
   if (!options.headers.IsEmpty()) {
     url_fetcher_->SetExtraRequestHeaders(options.headers.ToString());
@@ -138,6 +140,11 @@
   // while a loader is still being constructed.
   base::MessageLoop::current()->task_runner()->PostTask(
       FROM_HERE, start_callback_.callback());
+  base::MessageLoop::current()->AddDestructionObserver(this);
+}
+
+void NetFetcher::WillDestroyCurrentMessageLoop() {
+  will_destroy_current_message_loop_.store(true);
 }
 
 void NetFetcher::Start() {
@@ -152,12 +159,11 @@
       return;
     }
     FetchInterceptorCoordinator::GetInstance()->TryIntercept(
-        original_url,
-        base::BindOnce(&NetFetcher::OnFetchIntercepted, base::Unretained(this)),
-        base::BindOnce(&NetFetcher::ReportLoadTimingInfo,
-                       base::Unretained(this)),
-        base::BindOnce(&net::URLFetcher::Start,
-                       base::Unretained(url_fetcher_.get())));
+        original_url, main_resource_, url_fetcher_->GetRequestHeaders(),
+        task_runner_,
+        base::BindOnce(&NetFetcher::OnFetchIntercepted, AsWeakPtr()),
+        base::BindOnce(&NetFetcher::ReportLoadTimingInfo, AsWeakPtr()),
+        base::BindOnce(&NetFetcher::InterceptFallback, AsWeakPtr()));
 
   } else {
     std::string msg(base::StringPrintf("URL %s rejected by security policy.",
@@ -166,7 +172,12 @@
   }
 }
 
+void NetFetcher::InterceptFallback() { url_fetcher_->Start(); }
+
 void NetFetcher::OnFetchIntercepted(std::unique_ptr<std::string> body) {
+  if (will_destroy_current_message_loop_.load()) {
+    return;
+  }
   if (task_runner_ != base::MessageLoop::current()->task_runner()) {
     task_runner_->PostTask(
         FROM_HERE, base::BindOnce(&NetFetcher::OnFetchIntercepted,
@@ -303,6 +314,9 @@
 NetFetcher::~NetFetcher() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   start_callback_.Cancel();
+  if (!will_destroy_current_message_loop_.load()) {
+    base::MessageLoop::current()->RemoveDestructionObserver(this);
+  }
 }
 
 NetFetcher::ReturnWrapper NetFetcher::HandleError(const std::string& message) {
diff --git a/cobalt/loader/net_fetcher.h b/cobalt/loader/net_fetcher.h
index 3a6d3d8..984bdcb 100644
--- a/cobalt/loader/net_fetcher.h
+++ b/cobalt/loader/net_fetcher.h
@@ -30,13 +30,17 @@
 #include "net/http/http_request_headers.h"
 #include "net/url_request/url_fetcher.h"
 #include "net/url_request/url_fetcher_delegate.h"
+#include "starboard/common/atomic.h"
 #include "url/gurl.h"
 
 namespace cobalt {
 namespace loader {
 
 // NetFetcher is for fetching data from the network.
-class NetFetcher : public Fetcher, public net::URLFetcherDelegate {
+class NetFetcher : public Fetcher,
+                   public net::URLFetcherDelegate,
+                   public base::SupportsWeakPtr<NetFetcher>,
+                   public base::MessageLoopCurrent::DestructionObserver {
  public:
   struct Options {
    public:
@@ -50,8 +54,9 @@
     bool skip_fetch_intercept;
   };
 
-  NetFetcher(const GURL& url, const csp::SecurityCallback& security_callback,
-             Handler* handler, const network::NetworkModule* network_module,
+  NetFetcher(const GURL& url, bool main_resource,
+             const csp::SecurityCallback& security_callback, Handler* handler,
+             const network::NetworkModule* network_module,
              const Options& options, RequestMode request_mode,
              const Origin& origin);
   ~NetFetcher() override;
@@ -64,6 +69,9 @@
                                   int64_t current_network_bytes) override;
   void ReportLoadTimingInfo(const net::LoadTimingInfo& timing_info) override;
 
+  // base::MessageLoopCurrent::DestructionObserver
+  void WillDestroyCurrentMessageLoop() override;
+
   void OnFetchIntercepted(std::unique_ptr<std::string> body);
 
   net::URLFetcher* url_fetcher() const {
@@ -79,6 +87,7 @@
   }
 
   void Start();
+  void InterceptFallback();
 
   // Empty struct to ensure the caller of |HandleError()| knows that |this|
   // may have been destroyed and handles it appropriately.