diff --git a/DEPS b/DEPS
index 453296bb..2a5bab4 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '747d3ecdac5621e53631a155be7075aefa5aac8c',
+  'v8_revision': '43bd6d3ffbe85d6e20c7ba4e4dcd839891689759',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -64,7 +64,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': 'b4fee4d5d471475ada1d0d9110e1a534b49477ba',
+  'pdfium_revision': 'd1a8458e6390103e123e9d265040b3d02c16955b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling openmax_dl
   # and whatever else without interference from each other.
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 4e310e9..96c7b72 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -2329,8 +2329,6 @@
       "policy/default_geolocation_policy_handler.h",
       "prefs/active_profile_pref_service.cc",
       "prefs/active_profile_pref_service.h",
-      "task_manager/providers/arc/arc_process_filter.cc",
-      "task_manager/providers/arc/arc_process_filter.h",
       "task_manager/providers/arc/arc_process_task.cc",
       "task_manager/providers/arc/arc_process_task.h",
       "task_manager/providers/arc/arc_process_task_provider.cc",
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 31749313e..894f6804 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -257,7 +257,6 @@
   device_client_.reset(new ChromeDeviceClient);
 
 #if BUILDFLAG(ENABLE_EXTENSIONS)
-  // Athena sets its own instance during Athena's init process.
   extensions::AppWindowClient::Set(ChromeAppWindowClient::GetInstance());
 
   extension_event_router_forwarder_ = new extensions::EventRouterForwarder;
@@ -284,6 +283,7 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 #if BUILDFLAG(ENABLE_EXTENSIONS)
   extensions::ExtensionsBrowserClient::Set(nullptr);
+  extensions::AppWindowClient::Set(nullptr);
 #endif
 
 #if !defined(OS_ANDROID)
diff --git a/chrome/browser/resources/settings/site_settings/site_details.js b/chrome/browser/resources/settings/site_settings/site_details.js
index bf14965f..a157cf4d 100644
--- a/chrome/browser/resources/settings/site_settings/site_details.js
+++ b/chrome/browser/resources/settings/site_settings/site_details.js
@@ -10,7 +10,9 @@
 Polymer({
   is: 'site-details',
 
-  behaviors: [SiteSettingsBehavior, settings.RouteObserverBehavior],
+  behaviors: [
+    SiteSettingsBehavior, settings.RouteObserverBehavior, WebUIListenerBehavior
+  ],
 
   properties: {
     /**
@@ -60,6 +62,13 @@
   },
 
   /** @override */
+  attached: function() {
+    this.addWebUIListener(
+        'contentSettingSitePermissionChanged',
+        this.onPermissionChanged_.bind(this));
+  },
+
+  /** @override */
   ready: function() {
     this.ContentSettingsTypes = settings.ContentSettingsTypes;
   },
@@ -84,16 +93,55 @@
     if (this.enableSiteSettings_)
       this.$.usageApi.fetchUsageTotal(this.toUrl(this.origin).hostname);
 
-    var siteDetailsPermissions =
-        /** @type {!NodeList<!SiteDetailsPermissionElement>} */
-        (this.root.querySelectorAll('site-details-permission'));
+    this.updatePermissions_(this.getCategoryList_());
+  },
 
-    this.browserProxy.getOriginPermissions(this.origin, this.getCategoryList_())
+  /**
+   * Called when a site within a category has been changed.
+   * @param {!settings.ContentSettingsTypes} category The category that changed.
+   * @param {string} origin The origin of the site that changed.
+   * @param {string} embeddingOrigin The embedding origin of the site that
+   *     changed.
+   * @private
+   */
+  onPermissionChanged_: function(category, origin, embeddingOrigin) {
+    if (this.origin === undefined || this.origin == '' ||
+        origin === undefined || origin == '')
+      return;
+    if (!this.getCategoryList_().includes(category))
+      return;
+
+    // Site details currently doesn't support embedded origins, so ignore it and
+    // just check whether the origins are the same.
+    if (this.toUrl(origin).origin == this.toUrl(this.origin).origin)
+      this.updatePermissions_([category]);
+  },
+
+  /**
+   * Retrieves the permissions listed in |categoryList| from the backend for
+   * |this.origin|.
+   * @param {!Array<!settings.ContentSettingsTypes>} categoryList The list of
+   *     categories to update permissions for.
+   * @private
+   */
+  updatePermissions_: function(categoryList) {
+    var permissionsMap =
+        /** @type {!Object<!settings.ContentSettingsTypes,
+         *         !SiteDetailsPermissionElement>} */
+        (Array.prototype.reduce.call(
+            this.root.querySelectorAll('site-details-permission'),
+            (map, element) => {
+              if (categoryList.includes(element.category))
+                map[element.category] = element;
+              return map;
+            },
+            {}));
+
+    this.browserProxy.getOriginPermissions(this.origin, categoryList)
         .then((exceptionList) => {
           exceptionList.forEach((exception, i) => {
-            // |exceptionList| should be in the same order as the category list,
-            // which is in the same order as |siteDetailsPermissions|.
-            siteDetailsPermissions[i].site = exception;
+            // |exceptionList| should be in the same order as |categoryList|.
+            permissionsMap[categoryList[i]].site = exception;
           });
 
           // The displayName won't change, so just use the first exception.
@@ -155,7 +203,7 @@
 
   /**
    * Returns list of categories for each permission displayed in <site-details>.
-   * @return {!Array<string>}
+   * @return {!Array<!settings.ContentSettingsTypes>}
    * @private
    */
   getCategoryList_: function() {
diff --git a/chrome/browser/resources/settings/site_settings/site_details_permission.js b/chrome/browser/resources/settings/site_settings/site_details_permission.js
index cc702b4..6ef2465 100644
--- a/chrome/browser/resources/settings/site_settings/site_details_permission.js
+++ b/chrome/browser/resources/settings/site_settings/site_details_permission.js
@@ -10,7 +10,7 @@
 Polymer({
   is: 'site-details-permission',
 
-  behaviors: [SiteSettingsBehavior, WebUIListenerBehavior],
+  behaviors: [SiteSettingsBehavior],
 
   properties: {
     /**
@@ -27,27 +27,7 @@
     defaultSetting_: String,
   },
 
-  observers: ['siteChanged_(site, category)'],
-
-  /** @override */
-  attached: function() {
-    this.addWebUIListener(
-        'contentSettingSitePermissionChanged',
-        this.sitePermissionChanged_.bind(this));
-  },
-
-  /**
-   * Returns true if the origins match, e.g. http://google.com and
-   * http://[*.]google.com.
-   * @param {string} left The first origin to compare.
-   * @param {string} right The second origin to compare.
-   * @return {boolean} True if the origins are the same.
-   * @private
-   */
-  sameOrigin_: function(left, right) {
-    return this.removePatternWildcard(left) ==
-        this.removePatternWildcard(right);
-  },
+  observers: ['siteChanged_(site)'],
 
   /**
    * Updates the drop-down value after |site| has changed.
@@ -81,27 +61,6 @@
   },
 
   /**
-   * Called when a site within a category has been changed.
-   * @param {number} category The category that changed.
-   * @param {string} origin The origin of the site that changed.
-   * @param {string} embeddingOrigin The embedding origin of the site that
-   *     changed.
-   * @private
-   */
-  sitePermissionChanged_: function(category, origin, embeddingOrigin) {
-    if (this.site === undefined)
-      return;
-    if (category != this.category)
-      return;
-
-    if (origin == '' ||
-        (origin == this.site.origin &&
-         embeddingOrigin == this.site.embeddingOrigin)) {
-      this.siteChanged_(this.site);
-    }
-  },
-
-  /**
    * Handles the category permission changing for this origin.
    * @private
    */
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_filter.cc b/chrome/browser/task_manager/providers/arc/arc_process_filter.cc
deleted file mode 100644
index 0d0202ba..0000000
--- a/chrome/browser/task_manager/providers/arc/arc_process_filter.cc
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/task_manager/providers/arc/arc_process_filter.h"
-
-#include <utility>
-
-#include "base/logging.h"
-#include "components/arc/common/process.mojom.h"
-
-namespace task_manager {
-
-namespace {
-
-const char* kDefaultWhitelist[] = {"/system/bin/surfaceflinger"};
-
-}  // namespace
-
-ArcProcessFilter::ArcProcessFilter()
-    : whitelist_(std::begin(kDefaultWhitelist), std::end(kDefaultWhitelist)) {}
-
-ArcProcessFilter::ArcProcessFilter(const std::set<std::string>& whitelist)
-    : whitelist_(whitelist) {}
-
-ArcProcessFilter::~ArcProcessFilter() = default;
-
-bool ArcProcessFilter::ShouldDisplayProcess(
-    const arc::ArcProcess& process) const {
-  // Check the explicit whitelist. If it is not in there, decide based on its
-  // ProcessState.
-  if (whitelist_.count(process.process_name()))
-    return true;
-  // Implicitly whitelist processes that might be important to the user.
-  // See process.mojom.
-  // ProcessState::TOP: Process is hosting the current top activities
-  // ProcessState::IMPORTANT_FOREGROUND: Process is important to the user
-  // ProcessState::TOP_SLEEPING: Same as TOP, but while the device is sleeping
-  // ProcessState::LAST_ACTIVITY: The last activity - see crbug.com/738651.
-  // ProcessState::FOREGROUND_SERVICE: Foreground service - in Android, the user
-  //   is made aware of these via a notification.
-  switch (process.process_state()) {
-    case arc::mojom::ProcessState::TOP:  // Fallthrough.
-    case arc::mojom::ProcessState::IMPORTANT_FOREGROUND:
-    case arc::mojom::ProcessState::TOP_SLEEPING:
-    case arc::mojom::ProcessState::LAST_ACTIVITY:
-    case arc::mojom::ProcessState::FOREGROUND_SERVICE:
-      return true;
-    case arc::mojom::ProcessState::NONEXISTENT:  // Fallthrough.
-    case arc::mojom::ProcessState::PERSISTENT:
-    case arc::mojom::ProcessState::PERSISTENT_UI:
-    case arc::mojom::ProcessState::BOUND_FOREGROUND_SERVICE:
-    case arc::mojom::ProcessState::IMPORTANT_BACKGROUND:
-    case arc::mojom::ProcessState::BACKUP:
-    case arc::mojom::ProcessState::HEAVY_WEIGHT:
-    case arc::mojom::ProcessState::SERVICE:
-    case arc::mojom::ProcessState::RECEIVER:
-    case arc::mojom::ProcessState::HOME:
-    case arc::mojom::ProcessState::CACHED_ACTIVITY:
-    case arc::mojom::ProcessState::CACHED_ACTIVITY_CLIENT:
-    case arc::mojom::ProcessState::CACHED_EMPTY:
-      return false;
-  }
-  NOTREACHED();
-  return false;
-}
-
-}  // namespace task_manager
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_filter.h b/chrome/browser/task_manager/providers/arc/arc_process_filter.h
deleted file mode 100644
index 8b0b9932..0000000
--- a/chrome/browser/task_manager/providers/arc/arc_process_filter.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_TASK_MANAGER_PROVIDERS_ARC_ARC_PROCESS_FILTER_H_
-#define CHROME_BROWSER_TASK_MANAGER_PROVIDERS_ARC_ARC_PROCESS_FILTER_H_
-
-#include <set>
-#include <string>
-
-#include "base/macros.h"
-#include "chrome/browser/chromeos/arc/process/arc_process.h"
-
-namespace task_manager {
-
-// The many ARC system apps can make the task manager noisy. This filter
-// determines whether to show an ARC process in the task manager or not.
-// Apps can be whitelisted explicitly, or allowed based on their ProcessState.
-// See crbug.com/654564
-class ArcProcessFilter {
- public:
-  // Zero argument constructor will use a default whitelist.
-  ArcProcessFilter();
-  explicit ArcProcessFilter(const std::set<std::string>& whitelist);
-  ~ArcProcessFilter();
-
-  bool ShouldDisplayProcess(const arc::ArcProcess& process) const;
-
- private:
-  const std::set<std::string> whitelist_;
-
-  DISALLOW_COPY_AND_ASSIGN(ArcProcessFilter);
-};
-
-}  // namespace task_manager
-
-#endif  // CHROME_BROWSER_TASK_MANAGER_PROVIDERS_ARC_ARC_PROCESS_FILTER_H_
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_filter_unittest.cc b/chrome/browser/task_manager/providers/arc/arc_process_filter_unittest.cc
deleted file mode 100644
index f26ae4d6..0000000
--- a/chrome/browser/task_manager/providers/arc/arc_process_filter_unittest.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/task_manager/providers/arc/arc_process_filter.h"
-
-#include <string>
-
-#include "chrome/browser/chromeos/arc/process/arc_process.h"
-#include "components/arc/common/process.mojom.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace task_manager {
-
-namespace {
-
-const arc::ArcProcess kTest1Process(0 /* nspid */,
-                                    0 /* pid */,
-                                    "/system/test1_process",
-                                    arc::mojom::ProcessState::PERSISTENT,
-                                    false /* is_focused */,
-                                    0 /* last_activity_time */);
-
-const arc::ArcProcess kTest2Process(0 /* nspid */,
-                                    0 /* pid */,
-                                    "/system/test2_process",
-                                    arc::mojom::ProcessState::PERSISTENT,
-                                    false /* is_focused */,
-                                    0 /* last_activity_time */);
-
-const arc::ArcProcess kTopProcess(0 /* nspid */,
-                                  0 /* pid */,
-                                  "top_process",
-                                  arc::mojom::ProcessState::TOP,
-                                  false /* is_focused */,
-                                  0 /* last_activity_time */);
-
-}  // namespace
-
-using ArcProcessFilterTest = testing::Test;
-
-TEST_F(ArcProcessFilterTest, ExplicitWhitelist) {
-  ArcProcessFilter filter({"/system/test1_process", "test"});
-  EXPECT_TRUE(filter.ShouldDisplayProcess(kTest1Process));
-  EXPECT_FALSE(filter.ShouldDisplayProcess(kTest2Process));
-}
-
-TEST_F(ArcProcessFilterTest, ProcessStateFiltering) {
-  ArcProcessFilter filter;
-  EXPECT_FALSE(filter.ShouldDisplayProcess(kTest1Process));
-  EXPECT_FALSE(filter.ShouldDisplayProcess(kTest2Process));
-  EXPECT_TRUE(filter.ShouldDisplayProcess(kTopProcess));
-}
-
-}  // namespace task_manager
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_task_provider.cc b/chrome/browser/task_manager/providers/arc/arc_process_task_provider.cc
index ebbdbdf..36a390d 100644
--- a/chrome/browser/task_manager/providers/arc/arc_process_task_provider.cc
+++ b/chrome/browser/task_manager/providers/arc/arc_process_task_provider.cc
@@ -60,10 +60,6 @@
     nspid_to_remove.insert(entry.first);
 
   for (const auto& entry : processes) {
-    // Skip adding or updating processes we will not display.
-    if (!process_filter_.ShouldDisplayProcess(entry))
-      continue;
-
     if (nspid_to_remove.erase(entry.nspid()) == 0) {
       // New arc process.
       std::unique_ptr<ArcProcessTask>& task = (*pid_to_task)[entry.nspid()];
diff --git a/chrome/browser/task_manager/providers/arc/arc_process_task_provider.h b/chrome/browser/task_manager/providers/arc/arc_process_task_provider.h
index e7565d8..b5a38c1 100644
--- a/chrome/browser/task_manager/providers/arc/arc_process_task_provider.h
+++ b/chrome/browser/task_manager/providers/arc/arc_process_task_provider.h
@@ -14,7 +14,6 @@
 #include "base/memory/weak_ptr.h"
 #include "base/process/process.h"
 #include "chrome/browser/chromeos/arc/process/arc_process.h"
-#include "chrome/browser/task_manager/providers/arc/arc_process_filter.h"
 #include "chrome/browser/task_manager/providers/arc/arc_process_task.h"
 #include "chrome/browser/task_manager/providers/task_provider.h"
 
@@ -66,10 +65,6 @@
   // Whether to continue the periodical polling.
   bool is_updating_;
 
-  // Filters out ARC processes that are not useful to display.
-  // See crbug.com/654564
-  const ArcProcessFilter process_filter_;
-
   // Always keep this the last member of this class to make sure it's the
   // first thing to be destructed.
   base::WeakPtrFactory<ArcProcessTaskProvider> weak_ptr_factory_;
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 584cc15..4853a9b 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -4505,7 +4505,6 @@
       "../browser/signin/signin_manager_unittest.cc",
     ]
     sources += [
-      "../browser/task_manager/providers/arc/arc_process_filter_unittest.cc",
       "base/ash_test_environment_chrome.cc",
       "base/ash_test_environment_chrome.h",
     ]
diff --git a/chrome/test/base/testing_browser_process.cc b/chrome/test/base/testing_browser_process.cc
index e5b85538..cf6952d 100644
--- a/chrome/test/base/testing_browser_process.cc
+++ b/chrome/test/base/testing_browser_process.cc
@@ -92,6 +92,7 @@
   ShutdownBrowserPolicyConnector();
 #if BUILDFLAG(ENABLE_EXTENSIONS)
   extensions::ExtensionsBrowserClient::Set(nullptr);
+  extensions::AppWindowClient::Set(nullptr);
 #endif
 
   // Destructors for some objects owned by TestingBrowserProcess will use
diff --git a/chrome/test/data/webui/settings/site_details_tests.js b/chrome/test/data/webui/settings/site_details_tests.js
index ace998f..fc2735c 100644
--- a/chrome/test/data/webui/settings/site_details_tests.js
+++ b/chrome/test/data/webui/settings/site_details_tests.js
@@ -259,4 +259,55 @@
       assertEquals(settings.ContentSetting.DEFAULT, args[2]);
     })
   });
+
+  test('permissions update dynamically', function() {
+    browserProxy.setPrefs(prefs);
+    testElement = createSiteDetails('https://foo.com:443');
+
+    var siteDetailsPermission =
+        testElement.root.querySelector('#notifications');
+
+    // Wait for all the permissions to be populated initially.
+    return browserProxy.whenCalled('getOriginPermissions')
+        .then(function(result) {
+          // Make sure initial state is as expected.
+          assertEquals(
+              settings.ContentSetting.BLOCK,
+              siteDetailsPermission.site.setting);
+          assertEquals(
+              settings.SiteSettingSource.POLICY,
+              siteDetailsPermission.site.source);
+          assertEquals(
+              settings.ContentSetting.BLOCK,
+              siteDetailsPermission.$.permission.value);
+
+          // Set new prefs and make sure only that permission is updated.
+          var newException = {
+            embeddingOrigin: testElement.origin,
+            origin: testElement.origin,
+            setting: settings.ContentSetting.ASK,
+            source: settings.SiteSettingSource.DEFAULT,
+          };
+          browserProxy.resetResolver('getOriginPermissions');
+          browserProxy.setSinglePref(
+              settings.ContentSettingsTypes.NOTIFICATIONS, newException);
+          return browserProxy.whenCalled('getOriginPermissions');
+        })
+        .then(function(args) {
+          // The notification pref was just updated, so make sure the call to
+          // getOriginPermissions was to check notifications.
+          assertTrue(
+              args[1].includes(settings.ContentSettingsTypes.NOTIFICATIONS));
+
+          // Check |siteDetailsPermission| now shows the new permission value.
+          assertEquals(
+              settings.ContentSetting.ASK, siteDetailsPermission.site.setting);
+          assertEquals(
+              settings.SiteSettingSource.DEFAULT,
+              siteDetailsPermission.site.source);
+          assertEquals(
+              settings.ContentSetting.DEFAULT,
+              siteDetailsPermission.$.permission.value);
+        });
+  });
 });
diff --git a/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.js b/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.js
index 5902ab7..1db641a 100644
--- a/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.js
+++ b/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.js
@@ -131,6 +131,27 @@
   }
 
   /**
+   * Sets one exception for a given category, replacing any existing exceptions
+   * for the same origin. Note this ignores embedding origins.
+   * @param {!settings.ContentSettingsTypes} category The category the new
+   *     exception belongs to.
+   * @param {!RawSiteException} newException The new preference to add/replace.
+   */
+  setSinglePref(category, newException) {
+    // Remove entries from the current prefs which have the same origin.
+    var newPrefs = /** @type {!Array<RawSiteException>} */
+        (this.prefs_.exceptions[category].filter((categoryException) => {
+          if (categoryException.origin != newException.origin)
+            return true;
+        }));
+    newPrefs.push(newException);
+    this.prefs_.exceptions[category] = newPrefs;
+
+    cr.webUIListenerCallback(
+        'contentSettingSitePermissionChanged', category, newException.origin);
+  }
+
+  /**
    * Sets the prefs to use when testing.
    * @param {!Array<ZoomLevelEntry>} list The zoom list to set.
    */
@@ -327,7 +348,7 @@
 
       var setting;
       var source;
-      this.prefs_.exceptions[contentType].some(function(originPrefs) {
+      this.prefs_.exceptions[contentType].some((originPrefs) => {
         if (originPrefs.origin == origin) {
           setting = originPrefs.setting;
           source = originPrefs.source;
@@ -335,7 +356,7 @@
         }
       });
       assert(
-          settings !== undefined,
+          setting != undefined,
           'There was no exception set for origin: ' + origin +
               ' and contentType: ' + contentType);
 
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc b/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc
index 39343ee9..2ee010b 100644
--- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc
+++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc
@@ -126,12 +126,6 @@
 const int kMediaDuckFadeMs = 150;
 const int kMediaUnduckFadeMs = 700;
 
-// Force chunk_size to be multiple of 4. Needed for some NEON implementations.
-// Some third-party AudioPostProcessors require it.
-const int kBufferAlignment = 4;
-static_assert((kBufferAlignment & (kBufferAlignment - 1)) == 0,
-              "alignment must be a power of 2");
-
 int64_t TimespecToMicroseconds(struct timespec time) {
   return static_cast<int64_t>(time.tv_sec) *
              base::Time::kMicrosecondsPerSecond +
@@ -859,14 +853,13 @@
   const int min_frames_in_buffer =
       output_samples_per_second_ * kMinBufferedDataMs / 1000;
   int chunk_size =
-      (output_samples_per_second_ * kMaxAudioWriteTimeMilliseconds / 1000) &
-      ~(kBufferAlignment - 1);
+      output_samples_per_second_ * kMaxAudioWriteTimeMilliseconds / 1000;
   bool is_silence = true;
   for (auto&& filter_group : filter_groups_) {
     filter_group->ClearActiveInputs();
   }
   for (auto&& input : inputs_) {
-    int read_size = input->MaxReadSize() & ~(kBufferAlignment - 1);
+    int read_size = input->MaxReadSize();
     if (read_size > 0) {
       DCHECK(input->filter_group());
       input->filter_group()->AddActiveInput(input.get());
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
index 717828f..45983232 100644
--- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
+++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
@@ -32,10 +32,6 @@
 
 namespace {
 
-const int kBufferAlignment = 4;
-static_assert((kBufferAlignment & (kBufferAlignment - 1)) == 0,
-              "alignment must be a power of 2");
-
 using FloatType = ::media::Float32SampleTypeTraits;
 
 // Testing constants that are common to multiple test cases.
@@ -186,10 +182,6 @@
   return data;
 }
 
-int AlignedBufferSize(int size) {
-  return size & ~(kBufferAlignment - 1);
-}
-
 class MockInputQueue : public StreamMixerAlsa::InputQueue {
  public:
   MockInputQueue(int samples_per_second,
@@ -567,27 +559,19 @@
   // The mixer should pull data from all streams, using the smallest
   // MaxReadSize provided by any of the channels.
   // TODO(slan): Check that the proper number of frames is pulled.
-  // Actual size of pulled data should be truncated to factor of
-  // kBufferAlignment.
-
   ASSERT_EQ(3u, inputs.size());
-  inputs[0]->SetMaxReadSize(kMaxChunkSize + 4);
+  inputs[0]->SetMaxReadSize(kMaxChunkSize + 1);
   inputs[1]->SetMaxReadSize(kMaxChunkSize - 1);
   inputs[2]->SetMaxReadSize(kMaxChunkSize * 2);
   for (auto* input : inputs) {
-    EXPECT_CALL(*input,
-                GetResampledData(_, AlignedBufferSize(kMaxChunkSize - 1)))
-        .Times(1);
-    EXPECT_CALL(*input, VolumeScaleAccumulate(
-                            _, _, AlignedBufferSize(kMaxChunkSize - 1), _))
+    EXPECT_CALL(*input, GetResampledData(_, kMaxChunkSize - 1)).Times(1);
+    EXPECT_CALL(*input, VolumeScaleAccumulate(_, _, kMaxChunkSize - 1, _))
         .Times(kNumChannels);
     EXPECT_CALL(*input, AfterWriteFrames(_)).Times(1);
   }
 
   // TODO(slan): Verify that the data is mixed properly with math.
-  EXPECT_CALL(*mock_alsa(),
-              PcmWritei(_, _, AlignedBufferSize(kMaxChunkSize - 1)))
-      .Times(1);
+  EXPECT_CALL(*mock_alsa(), PcmWritei(_, _, kMaxChunkSize - 1)).Times(1);
   mixer->WriteFramesForTest();
 
   // Make two of these streams non-primary, and exhaust a non-primary stream.
@@ -781,7 +765,7 @@
   // ::media::AudioBus instances, rather than wrapping statically declared float
   // arrays. The latter method is brittle, as ::media::AudioBus requires 16-bit
   // alignment for internal data.
-  const int kNumFrames = 4;
+  const int kNumFrames = 3;
 
   const int32_t kMaxSample = std::numeric_limits<int32_t>::max();
   const int32_t kMinSample = std::numeric_limits<int32_t>::min();
@@ -842,11 +826,11 @@
   EXPECT_EQ(StreamMixerAlsa::kStateNormalPlayback, mixer->state());
 
   // The input stream will provide buffers of several different lengths.
-  input->SetMaxReadSize(4);
-  EXPECT_CALL(*input, GetResampledData(_, 4));
-  EXPECT_CALL(*input, VolumeScaleAccumulate(_, _, 4, _)).Times(kNumChannels);
+  input->SetMaxReadSize(7);
+  EXPECT_CALL(*input, GetResampledData(_, 7));
+  EXPECT_CALL(*input, VolumeScaleAccumulate(_, _, 7, _)).Times(kNumChannels);
   EXPECT_CALL(*input, AfterWriteFrames(_));
-  EXPECT_CALL(*mock_alsa(), PcmWritei(_, _, 4)).Times(1);
+  EXPECT_CALL(*mock_alsa(), PcmWritei(_, _, 7)).Times(1);
   mixer->WriteFramesForTest();
 
   input->SetMaxReadSize(100);
@@ -1005,7 +989,7 @@
   std::transform(delays.begin(), delays.end(), delays.begin(),
                  &FramesToDelayUs);
 
-  const int kNumFrames = 12;
+  const int kNumFrames = 10;
   for (auto* input : inputs) {
     input->SetMaxReadSize(kNumFrames);
     input->SetPaused(false);
@@ -1043,30 +1027,6 @@
   mixer->WriteFramesForTest();
 }
 
-TEST_F(StreamMixerAlsaTest, OneStreamTruncatedProperly) {
-  auto* input = new testing::StrictMock<MockInputQueue>(kTestSamplesPerSecond);
-  input->SetPaused(false);
-
-  StreamMixerAlsa* mixer = StreamMixerAlsa::Get();
-  EXPECT_CALL(*input, Initialize(_)).Times(1);
-  mixer->AddInput(base::WrapUnique(input));
-  EXPECT_EQ(StreamMixerAlsa::kStateNormalPlayback, mixer->state());
-
-  int preCalc[6][2] = {{4, 4}, {7, 4}, {8, 8}, {9, 8}, {880, 880}, {882, 880}};
-
-  for (int i = 0; i < 6; ++i) {
-    int readSize = preCalc[i][0];
-    int expectedSize = preCalc[i][1];
-    input->SetMaxReadSize(readSize);
-    EXPECT_CALL(*input, GetResampledData(_, expectedSize));
-    EXPECT_CALL(*input, VolumeScaleAccumulate(_, _, expectedSize, _))
-        .Times(kNumChannels);
-    EXPECT_CALL(*input, AfterWriteFrames(_));
-    EXPECT_CALL(*mock_alsa(), PcmWritei(_, _, expectedSize)).Times(1);
-    mixer->WriteFramesForTest();
-  }
-}
-
 TEST_F(StreamMixerAlsaTest, PostProcessorDelayUnlistedDevice) {
   const std::string device_id = "not-a-device-id";
   testing::StrictMock<MockInputQueue>* input =
@@ -1075,7 +1035,7 @@
   // Delay should be based on default processor
   int64_t delay = FramesToDelayUs(
       kDefaultProcessorDelay + kLinearizeProcessorDelay + kMixProcessorDelay);
-  const int kNumFrames = 12;
+  const int kNumFrames = 10;
   input->SetMaxReadSize(kNumFrames);
   input->SetPaused(false);
 
diff --git a/components/metrics/metrics_log.cc b/components/metrics/metrics_log.cc
index e6215d799..7fc04fc 100644
--- a/components/metrics/metrics_log.cc
+++ b/components/metrics/metrics_log.cc
@@ -27,6 +27,7 @@
 #include "components/metrics/metrics_pref_names.h"
 #include "components/metrics/metrics_provider.h"
 #include "components/metrics/metrics_service_client.h"
+#include "components/metrics/persistent_system_profile.h"
 #include "components/metrics/proto/histogram_event.pb.h"
 #include "components/metrics/proto/system_profile.pb.h"
 #include "components/metrics/proto/user_action_event.pb.h"
@@ -87,11 +88,13 @@
 MetricsLog::MetricsLog(const std::string& client_id,
                        int session_id,
                        LogType log_type,
-                       MetricsServiceClient* client)
+                       MetricsServiceClient* client,
+                       PrefService* local_state)
     : closed_(false),
       log_type_(log_type),
       client_(client),
-      creation_time_(base::TimeTicks::Now()) {
+      creation_time_(base::TimeTicks::Now()),
+      local_state_(local_state) {
   if (IsTestingID(client_id))
     uma_proto_.set_client_id(0);
   else
@@ -106,6 +109,10 @@
 
   SystemProfileProto* system_profile = uma_proto()->mutable_system_profile();
   RecordCoreSystemProfile(client_, system_profile);
+  if (log_type_ == ONGOING_LOG) {
+    GlobalPersistentSystemProfile::GetInstance()->SetSystemProfile(
+        *system_profile, /*complete=*/false);
+  }
 }
 
 MetricsLog::~MetricsLog() {
@@ -210,6 +217,9 @@
   // uma log upload, just as we send histogram data.
   WriteRealtimeStabilityAttributes(incremental_uptime, uptime);
 
+  if (local_state_->GetBoolean(prefs::kMetricsResetIds))
+    UMA_HISTOGRAM_BOOLEAN("UMA.IsClonedInstall", true);
+
   delegating_provider->ProvideCurrentSessionData(uma_proto());
 }
 
@@ -259,7 +269,7 @@
     stability->set_uptime_sec(uptime_sec);
 }
 
-const SystemProfileProto& MetricsLog::RecordEnvironment(
+std::string MetricsLog::RecordEnvironment(
     DelegatingProvider* delegating_provider,
     int64_t install_date,
     int64_t metrics_reporting_enabled_date) {
@@ -290,7 +300,16 @@
 
   delegating_provider->ProvideSystemProfileMetrics(system_profile);
 
-  return *system_profile;
+  EnvironmentRecorder recorder(local_state_);
+  std::string serialized_proto =
+      recorder.SerializeAndRecordEnvironmentToPrefs(*system_profile);
+
+  if (log_type_ == ONGOING_LOG) {
+    GlobalPersistentSystemProfile::GetInstance()->SetSystemProfile(
+        serialized_proto, /*complete=*/true);
+  }
+
+  return serialized_proto;
 }
 
 bool MetricsLog::LoadIndependentMetrics(MetricsProvider* metrics_provider) {
@@ -302,13 +321,12 @@
                                                      &snapshot_manager);
 }
 
-bool MetricsLog::LoadSavedEnvironmentFromPrefs(PrefService* local_state,
-                                               std::string* app_version) {
+bool MetricsLog::LoadSavedEnvironmentFromPrefs(std::string* app_version) {
   DCHECK(app_version);
   app_version->clear();
 
   SystemProfileProto* system_profile = uma_proto()->mutable_system_profile();
-  EnvironmentRecorder recorder(local_state);
+  EnvironmentRecorder recorder(local_state_);
   bool success = recorder.LoadEnvironmentFromPrefs(system_profile);
   if (success)
     *app_version = system_profile->app_version();
diff --git a/components/metrics/metrics_log.h b/components/metrics/metrics_log.h
index af30a57..d113e06 100644
--- a/components/metrics/metrics_log.h
+++ b/components/metrics/metrics_log.h
@@ -55,7 +55,8 @@
   MetricsLog(const std::string& client_id,
              int session_id,
              LogType log_type,
-             MetricsServiceClient* client);
+             MetricsServiceClient* client,
+             PrefService* local_state);
   virtual ~MetricsLog();
 
   // Registers local state prefs used by this class.
@@ -90,12 +91,14 @@
   // TODO(rkaplow): I think this can be a little refactored as it currently
   // records a pretty arbitrary set of things.
   // Records the current operating environment, including metrics provided by
-  // the specified |delegating_provider|. The current environment is
-  // returned as a SystemProfileProto.
-  const SystemProfileProto& RecordEnvironment(
-      DelegatingProvider* delegating_provider,
-      int64_t install_date,
-      int64_t metrics_reporting_enabled_date);
+  // the specified |delegating_provider|.  Takes the list of synthetic
+  // trial IDs as a parameter. A synthetic trial is one that is set up
+  // dynamically by code in Chrome. For example, a pref may be mapped to a
+  // synthetic trial such that the group is determined by the pref value. The
+  // current environment is returned serialized as a string.
+  std::string RecordEnvironment(DelegatingProvider* delegating_provider,
+                                int64_t install_date,
+                                int64_t metrics_reporting_enabled_date);
 
   // Loads a saved system profile and the associated metrics into the log.
   // Returns true on success. Keep calling it with fresh logs until it returns
@@ -106,8 +109,7 @@
   // call from prefs. On success, returns true and |app_version| contains the
   // recovered version. Otherwise (if there was no saved environment in prefs
   // or it could not be decoded), returns false and |app_version| is empty.
-  bool LoadSavedEnvironmentFromPrefs(PrefService* local_state,
-                                     std::string* app_version);
+  bool LoadSavedEnvironmentFromPrefs(std::string* app_version);
 
   // Record data from providers about the previous session into the log.
   void RecordPreviousSessionData(DelegatingProvider* delegating_provider);
@@ -179,6 +181,8 @@
   // The time when the current log was created.
   const base::TimeTicks creation_time_;
 
+  PrefService* local_state_;
+
   DISALLOW_COPY_AND_ASSIGN(MetricsLog);
 };
 
diff --git a/components/metrics/metrics_log_manager_unittest.cc b/components/metrics/metrics_log_manager_unittest.cc
index 4857a99..3dafa34 100644
--- a/components/metrics/metrics_log_manager_unittest.cc
+++ b/components/metrics/metrics_log_manager_unittest.cc
@@ -35,7 +35,7 @@
   MetricsLogStore* log_store() { return &log_store_; }
 
   MetricsLog* CreateLog(MetricsLog::LogType log_type) {
-    return new MetricsLog("id", 0, log_type, &client_);
+    return new MetricsLog("id", 0, log_type, &client_, &pref_service_);
   }
 
  private:
diff --git a/components/metrics/metrics_log_store_unittest.cc b/components/metrics/metrics_log_store_unittest.cc
index 50b78c7..5c35274 100644
--- a/components/metrics/metrics_log_store_unittest.cc
+++ b/components/metrics/metrics_log_store_unittest.cc
@@ -21,7 +21,7 @@
   ~MetricsLogStoreTest() override {}
 
   MetricsLog* CreateLog(MetricsLog::LogType log_type) {
-    return new MetricsLog("id", 0, log_type, &client_);
+    return new MetricsLog("id", 0, log_type, &client_, &pref_service_);
   }
 
   // Returns the stored number of logs of the given type.
diff --git a/components/metrics/metrics_log_unittest.cc b/components/metrics/metrics_log_unittest.cc
index 3a91d46..58160a0e7 100644
--- a/components/metrics/metrics_log_unittest.cc
+++ b/components/metrics/metrics_log_unittest.cc
@@ -55,7 +55,8 @@
                  LogType log_type,
                  MetricsServiceClient* client,
                  TestingPrefServiceSimple* prefs)
-      : MetricsLog(client_id, session_id, log_type, client), prefs_(prefs) {
+      : MetricsLog(client_id, session_id, log_type, client, prefs),
+        prefs_(prefs) {
     InitPrefs();
   }
 
@@ -129,10 +130,10 @@
   TestMetricsServiceClient client;
   TestingPrefServiceSimple prefs;
 
-  MetricsLog log1("id", 0, MetricsLog::ONGOING_LOG, &client);
+  MetricsLog log1("id", 0, MetricsLog::ONGOING_LOG, &client, &prefs);
   EXPECT_EQ(MetricsLog::ONGOING_LOG, log1.log_type());
 
-  MetricsLog log2("id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client);
+  MetricsLog log2("id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &prefs);
   EXPECT_EQ(MetricsLog::INITIAL_STABILITY_LOG, log2.log_type());
 }
 
@@ -141,7 +142,7 @@
   client.set_version_string("bogus version");
   TestingPrefServiceSimple prefs;
   MetricsLog log("totally bogus client ID", 137, MetricsLog::ONGOING_LOG,
-                 &client);
+                 &client, &prefs);
   log.CloseLog();
 
   std::string encoded;
@@ -256,17 +257,14 @@
       kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_);
 
   DelegatingProvider delegating_provider;
-  const SystemProfileProto& system_profile =
-      log.RecordEnvironment(&delegating_provider, kInstallDate, kEnabledDate);
-  EnvironmentRecorder writer(&prefs_);
-  writer.SerializeAndRecordEnvironmentToPrefs(system_profile);
+  log.RecordEnvironment(&delegating_provider, kInstallDate, kEnabledDate);
   // Check that the system profile on the log has the correct values set.
   CheckSystemProfile(log.system_profile());
 
   // Check that the system profile has also been written to prefs.
   SystemProfileProto decoded_system_profile;
-  EnvironmentRecorder reader(&prefs_);
-  EXPECT_TRUE(reader.LoadEnvironmentFromPrefs(&decoded_system_profile));
+  EnvironmentRecorder recorder(&prefs_);
+  EXPECT_TRUE(recorder.LoadEnvironmentFromPrefs(&decoded_system_profile));
   CheckSystemProfile(decoded_system_profile);
 }
 
diff --git a/components/metrics/metrics_service.cc b/components/metrics/metrics_service.cc
index a3aa510..5a93e5b 100644
--- a/components/metrics/metrics_service.cc
+++ b/components/metrics/metrics_service.cc
@@ -154,7 +154,6 @@
 #include "components/metrics/metrics_rotation_scheduler.h"
 #include "components/metrics/metrics_service_client.h"
 #include "components/metrics/metrics_state_manager.h"
-#include "components/metrics/persistent_system_profile.h"
 #include "components/metrics/stability_metrics_provider.h"
 #include "components/metrics/url_constants.h"
 #include "components/prefs/pref_registry_simple.h"
@@ -237,8 +236,6 @@
   RegisterMetricsProvider(
       base::MakeUnique<StabilityMetricsProvider>(local_state_));
 
-  RegisterMetricsProvider(state_manager_->GetProvider());
-
   RegisterMetricsProvider(base::MakeUnique<variations::FieldTrialsProvider>(
       &synthetic_trial_registry_, base::StringPiece()));
 }
@@ -319,12 +316,6 @@
 
   state_manager_->ForceClientIdCreation();
   client_->SetMetricsClientId(state_manager_->client_id());
-
-  SystemProfileProto system_profile;
-  MetricsLog::RecordCoreSystemProfile(client_, &system_profile);
-  GlobalPersistentSystemProfile::GetInstance()->SetSystemProfile(
-      system_profile, /*complete=*/false);
-
   if (!log_manager_.current_log())
     OpenNewLog();
 
@@ -742,7 +733,7 @@
   // log describes stats from the _previous_ session.
   std::string system_profile_app_version;
   if (!initial_stability_log->LoadSavedEnvironmentFromPrefs(
-          local_state_, &system_profile_app_version)) {
+          &system_profile_app_version)) {
     return false;
   }
   if (system_profile_app_version != prefs_previous_version)
@@ -821,29 +812,15 @@
 std::unique_ptr<MetricsLog> MetricsService::CreateLog(
     MetricsLog::LogType log_type) {
   return base::MakeUnique<MetricsLog>(state_manager_->client_id(), session_id_,
-                                      log_type, client_);
-}
-
-std::string MetricsService::RecordCurrentEnvironmentHelper(
-    MetricsLog* log,
-    PrefService* local_state,
-    DelegatingProvider* delegating_provider,
-    int64_t install_date,
-    int64_t enable_date) {
-  const SystemProfileProto& system_profile =
-      log->RecordEnvironment(delegating_provider, install_date, enable_date);
-  EnvironmentRecorder recorder(local_state);
-  return recorder.SerializeAndRecordEnvironmentToPrefs(system_profile);
+                                      log_type, client_, local_state_);
 }
 
 void MetricsService::RecordCurrentEnvironment(MetricsLog* log) {
   DCHECK(client_);
-  std::string serialized_proto = RecordCurrentEnvironmentHelper(
-      log, local_state_, &delegating_provider_, GetInstallDate(),
-      GetMetricsReportingEnabledDate());
-  GlobalPersistentSystemProfile::GetInstance()->SetSystemProfile(
-      serialized_proto, /*complete=*/true);
-  client_->OnEnvironmentUpdate(&serialized_proto);
+  std::string serialized_environment =
+      log->RecordEnvironment(&delegating_provider_, GetInstallDate(),
+                             GetMetricsReportingEnabledDate());
+  client_->OnEnvironmentUpdate(&serialized_environment);
 }
 
 void MetricsService::RecordCurrentHistograms() {
diff --git a/components/metrics/metrics_service.h b/components/metrics/metrics_service.h
index 2dfe686..cbb53e15 100644
--- a/components/metrics/metrics_service.h
+++ b/components/metrics/metrics_service.h
@@ -183,16 +183,6 @@
     return reporting_service_.metrics_log_store();
   }
 
-  // Records the current environment (system profile) in |log|, and persists
-  // the results in prefs.
-  // Exposed for testing.
-  static std::string RecordCurrentEnvironmentHelper(
-      MetricsLog* log,
-      PrefService* local_state,
-      DelegatingProvider* delegating_provider,
-      int64_t install_date,
-      int64_t enable_date);
-
  private:
   // The MetricsService has a lifecycle that is stored as a state.
   // See metrics_service.cc for description of this lifecycle.
@@ -294,9 +284,7 @@
   // Creates a new MetricsLog instance with the given |log_type|.
   std::unique_ptr<MetricsLog> CreateLog(MetricsLog::LogType log_type);
 
-  // Records the current environment (system profile) in |log|, and persists
-  // the results in prefs and GlobalPersistentSystemProfile.
-  // Exposed for testing.
+  // Records the current environment (system profile) in |log|.
   void RecordCurrentEnvironment(MetricsLog* log);
 
   // Record complete list of histograms into the current log.
diff --git a/components/metrics/metrics_service_unittest.cc b/components/metrics/metrics_service_unittest.cc
index bcf85090..30d64a7d 100644
--- a/components/metrics/metrics_service_unittest.cc
+++ b/components/metrics/metrics_service_unittest.cc
@@ -56,7 +56,6 @@
 
   using MetricsService::log_manager;
   using MetricsService::log_store;
-  using MetricsService::RecordCurrentEnvironmentHelper;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(TestMetricsService);
@@ -66,8 +65,13 @@
  public:
   TestMetricsLog(const std::string& client_id,
                  int session_id,
-                 MetricsServiceClient* client)
-      : MetricsLog(client_id, session_id, MetricsLog::ONGOING_LOG, client) {}
+                 MetricsServiceClient* client,
+                 PrefService* local_state)
+      : MetricsLog(client_id,
+                   session_id,
+                   MetricsLog::ONGOING_LOG,
+                   client,
+                   local_state) {}
 
   ~TestMetricsLog() override {}
 
@@ -186,10 +190,9 @@
   // Save an existing system profile to prefs, to correspond to what would be
   // saved from a previous session.
   TestMetricsServiceClient client;
-  TestMetricsLog log("client", 1, &client);
+  TestMetricsLog log("client", 1, &client, GetLocalState());
   DelegatingProvider delegating_provider;
-  TestMetricsService::RecordCurrentEnvironmentHelper(
-      &log, GetLocalState(), &delegating_provider, 0, 0);
+  log.RecordEnvironment(&delegating_provider, 0, 0);
 
   // Record stability build time and version from previous session, so that
   // stability metrics (including exited cleanly flag) won't be cleared.
@@ -258,10 +261,9 @@
   // Save an existing system profile to prefs, to correspond to what would be
   // saved from a previous session.
   TestMetricsServiceClient client;
-  TestMetricsLog log("client", 1, &client);
+  TestMetricsLog log("client", 1, &client, GetLocalState());
   DelegatingProvider delegating_provider;
-  TestMetricsService::RecordCurrentEnvironmentHelper(
-      &log, GetLocalState(), &delegating_provider, 0, 0);
+  log.RecordEnvironment(&delegating_provider, 0, 0);
 
   // Record stability build time and version from previous session, so that
   // stability metrics (including exited cleanly flag) won't be cleared.
diff --git a/components/metrics/metrics_state_manager.cc b/components/metrics/metrics_state_manager.cc
index 2e93a8e..45c2c48 100644
--- a/components/metrics/metrics_state_manager.cc
+++ b/components/metrics/metrics_state_manager.cc
@@ -20,7 +20,6 @@
 #include "components/metrics/enabled_state_provider.h"
 #include "components/metrics/machine_id_provider.h"
 #include "components/metrics/metrics_pref_names.h"
-#include "components/metrics/metrics_provider.h"
 #include "components/metrics/metrics_switches.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
@@ -51,22 +50,6 @@
                               low_entropy_source_value);
 }
 
-class MetricsStateMetricsProvider : public MetricsProvider {
- public:
-  MetricsStateMetricsProvider(PrefService* local_state)
-      : local_state_(local_state) {}
-
-  // MetricsProvider:
-  void ProvideCurrentSessionData(
-      ChromeUserMetricsExtension* uma_proto) override {
-    if (local_state_->GetBoolean(prefs::kMetricsResetIds))
-      UMA_HISTOGRAM_BOOLEAN("UMA.IsClonedInstall", true);
-  }
-
- private:
-  PrefService* local_state_;
-};
-
 }  // namespace
 
 // static
@@ -98,10 +81,6 @@
   instance_exists_ = false;
 }
 
-std::unique_ptr<MetricsProvider> MetricsStateManager::GetProvider() {
-  return base::MakeUnique<MetricsStateMetricsProvider>(local_state_);
-}
-
 bool MetricsStateManager::IsMetricsReportingEnabled() {
   return enabled_state_provider_->IsReportingEnabled();
 }
diff --git a/components/metrics/metrics_state_manager.h b/components/metrics/metrics_state_manager.h
index 2eb84369..fbb0f595 100644
--- a/components/metrics/metrics_state_manager.h
+++ b/components/metrics/metrics_state_manager.h
@@ -23,7 +23,6 @@
 
 class ClonedInstallDetector;
 class EnabledStateProvider;
-class MetricsProvider;
 
 // Responsible for managing MetricsService state prefs, specifically the UMA
 // client id and low entropy source. Code outside the metrics directory should
@@ -42,8 +41,6 @@
 
   virtual ~MetricsStateManager();
 
-  std::unique_ptr<MetricsProvider> GetProvider();
-
   // Returns true if the user has consented to sending metric reports, and there
   // is no other reason to disable reporting. One such reason is client
   // sampling, and this client isn't in the sample.
diff --git a/content/app/strings/content_strings.grd b/content/app/strings/content_strings.grd
index 0158c2b..ea3c1d883 100644
--- a/content/app/strings/content_strings.grd
+++ b/content/app/strings/content_strings.grd
@@ -824,7 +824,10 @@
       <message name="IDS_MEDIA_REMOTING_DISABLE_TEXT" desc="Media remoting disable button label.">
        Play on both screens
       </message>
-      <message name="IDS_MEDIA_REMOTING_CAST_TEXT" desc="Media remoting cast video text message.">
+      <message name="IDS_MEDIA_REMOTING_CAST_TEXT" desc="Text message shown to the user when casting a video to a known remote device.">
+       Now casting to <ph name="DEVICE_FRIENDLY_NAME">$1<ex>Living Room TV</ex></ph>
+      </message>
+      <message name="IDS_MEDIA_REMOTING_CAST_TO_UNKNOWN_DEVICE_TEXT" desc="Text message shown to the user when casting a video to an unknown remote device.">
        Now casting to your TV
       </message>
       <message name="IDS_MEDIA_TRACKS_NO_LABEL" desc="Menu item label for a text track that has no name specified. The number represents the track number in the list of tracks.">
diff --git a/content/browser/service_worker/service_worker_url_loader_job_unittest.cc b/content/browser/service_worker/service_worker_url_loader_job_unittest.cc
index fdb5083..4079851 100644
--- a/content/browser/service_worker/service_worker_url_loader_job_unittest.cc
+++ b/content/browser/service_worker/service_worker_url_loader_job_unittest.cc
@@ -13,9 +13,11 @@
 #include "content/public/common/resource_response.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "content/public/test/test_url_loader_client.h"
+#include "mojo/common/data_pipe_utils.h"
 #include "net/ssl/ssl_info.h"
 #include "net/test/cert_test_util.h"
 #include "net/test/test_data_directory.h"
+#include "storage/browser/blob/blob_data_builder.h"
 #include "storage/browser/blob/blob_storage_context.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/WebKit/public/platform/modules/fetch/fetch_api_request.mojom.h"
@@ -31,6 +33,65 @@
 
 }  // namespace
 
+// Helper simulates a service worker handling fetch events. The response can be
+// customized via RespondWith* functions.
+class Helper : public EmbeddedWorkerTestHelper {
+ public:
+  Helper() : EmbeddedWorkerTestHelper(base::FilePath()) {}
+  ~Helper() override = default;
+
+  // Tells this helper to respond to fetch events with the specified blob.
+  void RespondWithBlob(const std::string blob_uuid, uint64_t blob_size) {
+    response_mode_ = ResponseMode::kBlob;
+    blob_uuid_ = blob_uuid;
+    blob_size_ = blob_size;
+  }
+
+ protected:
+  void OnFetchEvent(
+      int embedded_worker_id,
+      int fetch_event_id,
+      const ServiceWorkerFetchRequest& request,
+      mojom::FetchEventPreloadHandlePtr preload_handle,
+      mojom::ServiceWorkerFetchResponseCallbackPtr response_callback,
+      FetchCallback finish_callback) override {
+    switch (response_mode_) {
+      case ResponseMode::kDefault:
+        EmbeddedWorkerTestHelper::OnFetchEvent(
+            embedded_worker_id, fetch_event_id, request,
+            std::move(preload_handle), std::move(response_callback),
+            std::move(finish_callback));
+        return;
+      case ResponseMode::kBlob:
+        response_callback->OnResponse(
+            ServiceWorkerResponse(
+                base::MakeUnique<std::vector<GURL>>(), 200, "OK",
+                blink::mojom::FetchResponseType::kDefault,
+                base::MakeUnique<ServiceWorkerHeaderMap>(), blob_uuid_,
+                blob_size_, nullptr /* blob */,
+                blink::kWebServiceWorkerResponseErrorUnknown, base::Time(),
+                false /* response_is_in_cache_storage */,
+                std::string() /* response_cache_storage_cache_name */,
+                base::MakeUnique<
+                    ServiceWorkerHeaderList>() /* cors_exposed_header_names */),
+            base::Time::Now());
+        std::move(finish_callback).Run(SERVICE_WORKER_OK, base::Time::Now());
+        return;
+    }
+    NOTREACHED();
+  }
+
+ private:
+  enum class ResponseMode { kDefault, kBlob };
+  ResponseMode response_mode_ = ResponseMode::kDefault;
+
+  // For ResponseMode::kBlob.
+  std::string blob_uuid_;
+  uint64_t blob_size_ = 0;
+
+  DISALLOW_COPY_AND_ASSIGN(Helper);
+};
+
 // ServiceWorkerURLLoaderJobTest is for testing the handling of requests
 // by a service worker via ServiceWorkerURLLoaderJob.
 //
@@ -48,7 +109,7 @@
  public:
   ServiceWorkerURLLoaderJobTest()
       : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP),
-        helper_(base::MakeUnique<EmbeddedWorkerTestHelper>(base::FilePath())) {}
+        helper_(base::MakeUnique<Helper>()) {}
   ~ServiceWorkerURLLoaderJobTest() override = default;
 
   void SetUp() override {
@@ -77,8 +138,6 @@
                                  CreateReceiverOnCurrentThread(&status));
     base::RunLoop().RunUntilIdle();
     ASSERT_EQ(SERVICE_WORKER_OK, status);
-
-    // TODO(falken): Also setup blob_context_ for tests that will need it.
   }
 
   ServiceWorkerStorage* storage() { return helper_->context()->storage(); }
@@ -87,6 +146,46 @@
     return blob_context_.AsWeakPtr();
   }
 
+  // Performs a request. When this returns, |client_| will have information
+  // about the response.
+  void TestRequest() {
+    ResourceRequest request;
+    request.url = GURL("https://www.example.com/");
+    request.method = "GET";
+
+    // Start a ServiceWorkerURLLoaderJob. It should return a
+    // StartLoaderCallback.
+    StartLoaderCallback callback;
+    auto job = base::MakeUnique<ServiceWorkerURLLoaderJob>(
+        base::BindOnce(&ReceiveStartLoaderCallback, &callback), this, request,
+        GetBlobStorageContext());
+    job->ForwardToServiceWorker();
+    base::RunLoop().RunUntilIdle();
+    // TODO(falken): When fallback to network tests are added,
+    // callback can be null. In that case this function should return cleanly
+    // and somehow tell the caller we're falling back to network.
+    EXPECT_FALSE(callback.is_null());
+
+    // Start the loader. It will load |request.url|.
+    mojom::URLLoaderPtr loader;
+    std::move(callback).Run(mojo::MakeRequest(&loader),
+                            client_.CreateInterfacePtr());
+    client_.RunUntilComplete();
+  }
+
+  void ExpectFetchedViaServiceWorker(const ResourceResponseHead& info) {
+    EXPECT_TRUE(info.was_fetched_via_service_worker);
+    EXPECT_FALSE(info.was_fallback_required_by_service_worker);
+    EXPECT_TRUE(info.url_list_via_service_worker.empty());
+    EXPECT_EQ(blink::mojom::FetchResponseType::kDefault,
+              info.response_type_via_service_worker);
+    // TODO(falken): start and ready time should be set.
+    EXPECT_TRUE(info.service_worker_start_time.is_null());
+    EXPECT_TRUE(info.service_worker_ready_time.is_null());
+    EXPECT_FALSE(info.is_in_cache_storage);
+    EXPECT_EQ(std::string(), info.cache_storage_cache_name);
+  }
+
  protected:
   // ServiceWorkerURLLoaderJob::Delegate --------------------------------------
   void OnPrepareToRestart() override {}
@@ -105,47 +204,45 @@
   // --------------------------------------------------------------------------
 
   TestBrowserThreadBundle thread_bundle_;
-  std::unique_ptr<EmbeddedWorkerTestHelper> helper_;
+  std::unique_ptr<Helper> helper_;
   scoped_refptr<ServiceWorkerRegistration> registration_;
   scoped_refptr<ServiceWorkerVersion> version_;
   storage::BlobStorageContext blob_context_;
+  TestURLLoaderClient client_;
 };
 
 TEST_F(ServiceWorkerURLLoaderJobTest, Basic) {
-  ResourceRequest request;
-  request.url = GURL("https://www.example.com/");
-  request.method = "GET";
-
-  // Start a ServiceWorkerURLLoaderJob. It should return a StartLoaderCallback.
-  StartLoaderCallback callback;
-  auto job = base::MakeUnique<ServiceWorkerURLLoaderJob>(
-      base::BindOnce(&ReceiveStartLoaderCallback, &callback), this, request,
-      GetBlobStorageContext());
-  job->ForwardToServiceWorker();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_FALSE(callback.is_null());
-
-  // Start the loader. It will load the URL.
-  TestURLLoaderClient client;
-  mojom::URLLoaderPtr loader;
-  std::move(callback).Run(mojo::MakeRequest(&loader),
-                          client.CreateInterfacePtr());
-  client.RunUntilComplete();
-  EXPECT_EQ(net::OK, client.completion_status().error_code);
-
-  // The URL should have loaded successfully via service worker.
-  const ResourceResponseHead& info = client.response_head();
+  TestRequest();
+  EXPECT_EQ(net::OK, client_.completion_status().error_code);
+  const ResourceResponseHead& info = client_.response_head();
   EXPECT_EQ(200, info.headers->response_code());
-  EXPECT_TRUE(info.was_fetched_via_service_worker);
-  EXPECT_FALSE(info.was_fallback_required_by_service_worker);
-  EXPECT_TRUE(info.url_list_via_service_worker.empty());
-  EXPECT_EQ(blink::mojom::FetchResponseType::kDefault,
-            info.response_type_via_service_worker);
-  // TODO(falken): start and ready time should be set.
-  EXPECT_TRUE(info.service_worker_start_time.is_null());
-  EXPECT_TRUE(info.service_worker_ready_time.is_null());
-  EXPECT_FALSE(info.is_in_cache_storage);
-  EXPECT_EQ(std::string(), info.cache_storage_cache_name);
+  ExpectFetchedViaServiceWorker(info);
 }
 
+TEST_F(ServiceWorkerURLLoaderJobTest, BlobResponse) {
+  // Construct the blob to respond with.
+  const std::string kResponseBody = "Here is sample text for the blob.";
+  auto blob_data = base::MakeUnique<storage::BlobDataBuilder>("blob-id:myblob");
+  blob_data->AppendData(kResponseBody);
+  std::unique_ptr<storage::BlobDataHandle> blob_handle =
+      blob_context_.AddFinishedBlob(blob_data.get());
+  helper_->RespondWithBlob(blob_handle->uuid(), blob_handle->size());
+
+  // Perform the request.
+  TestRequest();
+  const ResourceResponseHead& info = client_.response_head();
+  EXPECT_EQ(200, info.headers->response_code());
+  ExpectFetchedViaServiceWorker(info);
+
+  // Test the body.
+  std::string response;
+  EXPECT_TRUE(client_.response_body().is_valid());
+  EXPECT_TRUE(mojo::common::BlockingCopyToString(
+      client_.response_body_release(), &response));
+  EXPECT_EQ(kResponseBody, response);
+}
+
+// TODO(falken): Add tests for stream response, network fallback, etc. Basically
+// everything in ServiceWorkerURLRequestJobTest.
+
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_url_request_job_unittest.cc b/content/browser/service_worker/service_worker_url_request_job_unittest.cc
index 94d867b..ee3a0cb3 100644
--- a/content/browser/service_worker/service_worker_url_request_job_unittest.cc
+++ b/content/browser/service_worker/service_worker_url_request_job_unittest.cc
@@ -788,7 +788,7 @@
       : EmbeddedWorkerTestHelper(base::FilePath()),
         blob_uuid_(blob_uuid),
         blob_size_(blob_size) {}
-  ~BlobResponder() override {}
+  ~BlobResponder() override = default;
 
  protected:
   void OnFetchEvent(
diff --git a/content/child/blink_platform_impl.cc b/content/child/blink_platform_impl.cc
index a82b4d08..c61fe81c 100644
--- a/content/child/blink_platform_impl.cc
+++ b/content/child/blink_platform_impl.cc
@@ -191,6 +191,8 @@
       return IDS_MEDIA_REMOTING_DISABLE_TEXT;
     case WebLocalizedString::kMediaRemotingCastText:
       return IDS_MEDIA_REMOTING_CAST_TEXT;
+    case WebLocalizedString::kMediaRemotingCastToUnknownDeviceText:
+      return IDS_MEDIA_REMOTING_CAST_TO_UNKNOWN_DEVICE_TEXT;
     case WebLocalizedString::kMultipleFileUploadText:
       return IDS_FORM_FILE_MULTIPLE_UPLOAD;
     case WebLocalizedString::kOtherColorLabel:
diff --git a/content/common/service_worker/service_worker_types.h b/content/common/service_worker/service_worker_types.h
index 0cc29de..6b73559ac 100644
--- a/content/common/service_worker/service_worker_types.h
+++ b/content/common/service_worker/service_worker_types.h
@@ -162,6 +162,7 @@
   // ServiceWorkerFetchResponseCallback.
   std::string blob_uuid;
   uint64_t blob_size;
+  // |blob| is only used when features::kMojoBlobs is enabled.
   scoped_refptr<storage::BlobHandle> blob;
   blink::WebServiceWorkerResponseError error;
   base::Time response_time;
diff --git a/content/renderer/media/webmediaplayer_ms_unittest.cc b/content/renderer/media/webmediaplayer_ms_unittest.cc
index 49b1748..d559eff 100644
--- a/content/renderer/media/webmediaplayer_ms_unittest.cc
+++ b/content/renderer/media/webmediaplayer_ms_unittest.cc
@@ -522,6 +522,10 @@
   blink::WebMediaPlayer::DisplayType DisplayType() const override {
     return blink::WebMediaPlayer::DisplayType::kInline;
   }
+  void ActivateViewportIntersectionMonitoring(bool activate) override {}
+  void MediaRemotingStarted(
+      const blink::WebString& remote_device_friendly_name) override {}
+  void MediaRemotingStopped() override {}
 
   // Implementation of cc::VideoFrameProvider::Client
   void StopUsingProvider() override;
diff --git a/extensions/browser/app_window/app_window_client.cc b/extensions/browser/app_window/app_window_client.cc
index 4b71b96..fcbce73 100644
--- a/extensions/browser/app_window/app_window_client.cc
+++ b/extensions/browser/app_window/app_window_client.cc
@@ -4,12 +4,13 @@
 
 #include "extensions/browser/app_window/app_window_client.h"
 
+#include "base/logging.h"
 
 namespace extensions {
 
 namespace {
 
-AppWindowClient* g_client = NULL;
+AppWindowClient* g_client = nullptr;
 
 }  // namespace
 
@@ -18,9 +19,16 @@
 }
 
 void AppWindowClient::Set(AppWindowClient* client) {
-  // This can happen in unit tests, where the utility thread runs in-process.
-  if (g_client)
+  // Unit tests that set the AppWindowClient should clear it afterward.
+  if (g_client && client) {
+    // Rarely, a test may run multiple BrowserProcesses in a single process:
+    // crbug.com/751242. This will lead to redundant calls, but the pointers
+    // should at least be the same.
+    DCHECK_EQ(g_client, client)
+        << "AppWindowClient::Set called with different non-null pointers twice "
+        << "in a row. A previous test may have set this without clearing it.";
     return;
+  }
 
   g_client = client;
 }
diff --git a/extensions/shell/browser/shell_native_app_window_aura_unittest.cc b/extensions/shell/browser/shell_native_app_window_aura_unittest.cc
index cd9523d..f4297ff7d 100644
--- a/extensions/shell/browser/shell_native_app_window_aura_unittest.cc
+++ b/extensions/shell/browser/shell_native_app_window_aura_unittest.cc
@@ -29,7 +29,7 @@
     AppWindowClient::Set(&app_window_client_);
   }
 
-  ~ShellNativeAppWindowAuraTest() override {}
+  ~ShellNativeAppWindowAuraTest() override { AppWindowClient::Set(nullptr); }
 
  protected:
   ShellAppWindowClient app_window_client_;
diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json
index 89a64a8..0c69f98 100644
--- a/gpu/config/gpu_driver_bug_list.json
+++ b/gpu/config/gpu_driver_bug_list.json
@@ -1,6 +1,6 @@
 {
   "name": "gpu driver bug list",
-  "version": "10.23",
+  "version": "10.24",
   "entries": [
     {
       "id": 1,
@@ -2573,6 +2573,19 @@
       "features": [
         "dont_disable_webgl_when_compositor_context_lost"
       ]
+    },
+    {
+      "id": 238,
+      "description": "On Intel GPUs MSAA performance is not acceptable for GPU rasterization",
+      "cr_bugs": [527565, 751919],
+      "os": {
+        "type": "macosx"
+      },
+      "vendor_id": "0x8086",
+      "multi_gpu_category": "any",
+      "features": [
+        "msaa_is_slow"
+      ]
     }
   ],
   "comment": [
diff --git a/ios/chrome/today_extension/today_metrics_logger.h b/ios/chrome/today_extension/today_metrics_logger.h
index c4d62fdf..7d93f55e 100644
--- a/ios/chrome/today_extension/today_metrics_logger.h
+++ b/ios/chrome/today_extension/today_metrics_logger.h
@@ -15,6 +15,7 @@
 namespace base {
 
 class SequencedWorkerPool;
+class SequencedTaskRunner;
 
 }  // namespace base
 
@@ -25,6 +26,10 @@
 
 }  // namespace
 
+class ValueMapPrefStore;
+class PrefRegistrySimple;
+class PrefService;
+
 // Utility class to create metrics log that can be pushed to Chrome. The
 // extension creates and fills the logs with UserAction. The upload is done by
 // the Chrome application.
@@ -51,6 +56,10 @@
   bool CreateNewLog();
 
   base::MessageLoop message_loop_;
+  scoped_refptr<PrefRegistrySimple> pref_registry_;
+  std::unique_ptr<PrefService> pref_service_;
+  scoped_refptr<ValueMapPrefStore> value_map_prefs_;
+  scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_;
   std::unique_ptr<TodayMetricsLog> log_;
   scoped_refptr<base::SequencedWorkerPool> thread_pool_;
   std::unique_ptr<TodayMetricsServiceClient> metrics_service_client_;
diff --git a/ios/chrome/today_extension/today_metrics_logger.mm b/ios/chrome/today_extension/today_metrics_logger.mm
index 55b210c..6d02986c 100644
--- a/ios/chrome/today_extension/today_metrics_logger.mm
+++ b/ios/chrome/today_extension/today_metrics_logger.mm
@@ -84,7 +84,8 @@
   TodayMetricsLog(const std::string& client_id,
                   int session_id,
                   LogType log_type,
-                  TodayMetricsServiceClient* client);
+                  TodayMetricsServiceClient* client,
+                  PrefService* local_state);
 
   // Fills |encoded_log| with the serialized protobuf representation of the
   // record. Can be called even on open log.
@@ -157,8 +158,13 @@
 TodayMetricsLog::TodayMetricsLog(const std::string& client_id,
                                  int session_id,
                                  LogType log_type,
-                                 TodayMetricsServiceClient* client)
-    : metrics::MetricsLog(client_id, session_id, log_type, client) {}
+                                 TodayMetricsServiceClient* client,
+                                 PrefService* local_state)
+    : metrics::MetricsLog(client_id,
+                          session_id,
+                          log_type,
+                          client,
+                          local_state) {}
 
 void TodayMetricsLog::GetOpenEncodedLog(std::string* encoded_log) const {
   uma_proto()->SerializeToString(encoded_log);
@@ -233,7 +239,8 @@
       session_id, app_group::APP_GROUP_TODAY_EXTENSION);
   log_.reset(new TodayMetricsLog(base::SysNSStringToUTF8(client_id), session_id,
                                  metrics::MetricsLog::ONGOING_LOG,
-                                 metrics_service_client_.get()));
+                                 metrics_service_client_.get(),
+                                 pref_service_.get()));
 
   metrics::DelegatingProvider delegating_provider;
   log_->RecordEnvironment(&delegating_provider, [install_date longLongValue],
@@ -243,12 +250,25 @@
 }
 
 TodayMetricsLogger::TodayMetricsLogger()
-    : thread_pool_(
+    : pref_registry_(new PrefRegistrySimple()),
+      thread_pool_(
           new base::SequencedWorkerPool(2,
                                         "LoggerPool",
                                         base::TaskPriority::BACKGROUND)),
       metrics_service_client_(new TodayMetricsServiceClient()),
       histogram_snapshot_manager_(this) {
+  metrics::MetricsLog::RegisterPrefs(pref_registry_.get());
+
+  NSString* url = [[NSSearchPathForDirectoriesInDomains(
+      NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]
+      stringByAppendingPathComponent:@"Application Support/localstate"];
+  base::FilePath path(base::SysNSStringToUTF8(url));
+  sequenced_task_runner_ =
+      JsonPrefStore::GetTaskRunnerForFile(path, thread_pool_.get());
+  PrefServiceFactory factory;
+  factory.set_extension_prefs(value_map_prefs_.get());
+  factory.SetUserPrefsFile(path, sequenced_task_runner_.get());
+  pref_service_ = factory.Create(pref_registry_.get());
   base::StatisticsRecorder::Initialize();
 }
 
diff --git a/media/base/media_observer.h b/media/base/media_observer.h
index 5037c853..db8eee4 100644
--- a/media/base/media_observer.h
+++ b/media/base/media_observer.h
@@ -16,10 +16,12 @@
   virtual ~MediaObserverClient() {}
 
   // Requests to restart the media pipeline and create a new renderer as soon as
-  // possible. |is_rendered_remotely| indicates whether the media is rendered
-  // remotely. When it is true, all the optimizations that might suspend the
-  // media pipeline should be disabled.
-  virtual void SwitchRenderer(bool is_rendered_remotely) = 0;
+  // possible. When switching to remote renderer, all the optimizations that
+  // might suspend the media pipeline should be disabled.
+  // |remote_device_friendly_name| can be empty if the remote device is unknown.
+  virtual void SwitchToRemoteRenderer(
+      const std::string& remote_device_friendly_name) = 0;
+  virtual void SwitchToLocalRenderer() = 0;
 
   // Requests to activate monitoring changes on viewport intersection.
   virtual void ActivateViewportIntersectionMonitoring(bool activate) = 0;
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 60f924e..653f049 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -2641,18 +2641,30 @@
                         time_to_first_frame);
   }
 }
-void WebMediaPlayerImpl::SwitchRenderer(bool is_rendered_remotely) {
+
+void WebMediaPlayerImpl::SwitchToRemoteRenderer(
+    const std::string& remote_device_friendly_name) {
   DCHECK(main_task_runner_->BelongsToCurrentThread());
-  disable_pipeline_auto_suspend_ = is_rendered_remotely;
+  disable_pipeline_auto_suspend_ = true;
+  // Requests to restart media pipeline. A remote renderer will be created via
+  // the |renderer_factory_selector_|.
   ScheduleRestart();
   if (client_) {
-    if (is_rendered_remotely)
-      client_->MediaRemotingStarted();
-    else
-      client_->MediaRemotingStopped();
+    client_->MediaRemotingStarted(
+        WebString::FromUTF8(remote_device_friendly_name));
   }
 }
 
+void WebMediaPlayerImpl::SwitchToLocalRenderer() {
+  DCHECK(main_task_runner_->BelongsToCurrentThread());
+  disable_pipeline_auto_suspend_ = false;
+  // Requests to restart media pipeline. A local renderer will be created via
+  // the |renderer_factory_selector_|.
+  ScheduleRestart();
+  if (client_)
+    client_->MediaRemotingStopped();
+}
+
 void WebMediaPlayerImpl::RecordUnderflowDuration(base::TimeDelta duration) {
   DCHECK(data_source_ || chunk_demuxer_);
 
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h
index 1097de4..ae9c104 100644
--- a/media/blink/webmediaplayer_impl.h
+++ b/media/blink/webmediaplayer_impl.h
@@ -229,7 +229,9 @@
 #endif
 
   // MediaObserverClient implementation.
-  void SwitchRenderer(bool is_rendered_remotely) override;
+  void SwitchToRemoteRenderer(
+      const std::string& remote_device_friendly_name) override;
+  void SwitchToLocalRenderer() override;
   void ActivateViewportIntersectionMonitoring(bool activate) override;
   void UpdateRemotePlaybackCompatibility(bool is_compatible) override;
 
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc
index d39ff97..d60ec4a 100644
--- a/media/blink/webmediaplayer_impl_unittest.cc
+++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -110,6 +110,10 @@
   blink::WebMediaPlayer::DisplayType DisplayType() const override {
     return blink::WebMediaPlayer::DisplayType::kInline;
   }
+  void ActivateViewportIntersectionMonitoring(bool activate) override {}
+  void MediaRemotingStarted(
+      const blink::WebString& remote_device_friendly_name) override {}
+  void MediaRemotingStopped() override {}
 
   void set_is_autoplaying_muted(bool value) { is_autoplaying_muted_ = value; }
 
diff --git a/media/remoting/renderer_controller.cc b/media/remoting/renderer_controller.cc
index 8b3dd5ee..362d863 100644
--- a/media/remoting/renderer_controller.cc
+++ b/media/remoting/renderer_controller.cc
@@ -44,7 +44,7 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   if (remote_rendering_started_) {
     DCHECK(client_);
-    client_->SwitchRenderer(false);
+    client_->SwitchToLocalRenderer();
   }
   metrics_recorder_.WillStopSession(MEDIA_ELEMENT_DESTROYED);
   session_->RemoveClient(this);
@@ -57,7 +57,7 @@
     if (remote_rendering_started_) {
       metrics_recorder_.DidStartSession();
       DCHECK(client_);
-      client_->SwitchRenderer(true);
+      client_->SwitchToRemoteRenderer(session_->sink_name());
     } else {
       session_->StopRemoting(this);
     }
@@ -398,7 +398,7 @@
     DCHECK(!is_encrypted_);
     DCHECK_NE(stop_trigger, UNKNOWN_STOP_TRIGGER);
     metrics_recorder_.WillStopSession(stop_trigger);
-    client_->SwitchRenderer(false);
+    client_->SwitchToLocalRenderer();
     VLOG(2) << "Request to stop remoting: stop_trigger=" << stop_trigger;
     session_->StopRemoting(this);
   }
@@ -455,13 +455,13 @@
   DCHECK(client_);
   remote_rendering_started_ = true;
   if (session_->state() == SharedSession::SESSION_PERMANENTLY_STOPPED) {
-    client_->SwitchRenderer(true);
+    client_->SwitchToRemoteRenderer(session_->sink_name());
     return;
   }
   DCHECK_NE(start_trigger, UNKNOWN_START_TRIGGER);
   metrics_recorder_.WillStartSession(start_trigger);
-  // |MediaObserverClient::SwitchRenderer()| will be called after remoting is
-  // started successfully.
+  // |MediaObserverClient::SwitchToRemoteRenderer()| will be called after
+  // remoting is started successfully.
   session_->StartRemoting(this);
 }
 
diff --git a/media/remoting/renderer_controller_unittest.cc b/media/remoting/renderer_controller_unittest.cc
index 417c5a6..77e80da 100644
--- a/media/remoting/renderer_controller_unittest.cc
+++ b/media/remoting/renderer_controller_unittest.cc
@@ -42,6 +42,8 @@
   return data;
 }
 
+const std::string kDefaultReceiver = "TestingChromeCast";
+
 mojom::RemotingSinkMetadata GetDefaultSinkMetadata(bool enable) {
   mojom::RemotingSinkMetadata metadata;
   if (enable) {
@@ -54,6 +56,7 @@
       mojom::RemotingSinkVideoCapability::CODEC_VP8);
   metadata.audio_capabilities.push_back(
       mojom::RemotingSinkAudioCapability::CODEC_BASELINE_SET);
+  metadata.friendly_name = kDefaultReceiver;
   return metadata;
 }
 
@@ -75,10 +78,17 @@
   static void RunUntilIdle() { base::RunLoop().RunUntilIdle(); }
 
   // MediaObserverClient implementation.
-  void SwitchRenderer(bool disable_pipeline_auto_suspend) override {
-    is_rendering_remotely_ = disable_pipeline_auto_suspend;
-    disable_pipeline_suspend_ = disable_pipeline_auto_suspend;
-    decoded_bytes_ = 0;
+  void SwitchToRemoteRenderer(
+      const std::string& remote_device_friendly_name) override {
+    is_rendering_remotely_ = true;
+    disable_pipeline_suspend_ = true;
+    sink_name_ = remote_device_friendly_name;
+  }
+
+  void SwitchToLocalRenderer() override {
+    is_rendering_remotely_ = false;
+    disable_pipeline_suspend_ = false;
+    sink_name_.clear();
   }
 
   void ActivateViewportIntersectionMonitoring(bool activate) override {
@@ -98,6 +108,7 @@
       const PipelineMetadata& pipeline_metadata,
       const mojom::RemotingSinkMetadata& sink_metadata) {
     EXPECT_FALSE(is_rendering_remotely_);
+    EXPECT_TRUE(sink_name_.empty());
     controller_ = base::MakeUnique<RendererController>(shared_session);
     clock_ = new base::SimpleTestTickClock();
     controller_->clock_.reset(clock_);
@@ -127,7 +138,7 @@
     RunUntilIdle();
   }
 
-  bool IsInDelayedStart() {
+  bool IsInDelayedStart() const {
     return controller_->delayed_start_stability_timer_.IsRunning();
   }
 
@@ -148,16 +159,40 @@
     controller_->delayed_start_stability_timer_.Stop();
   }
 
+  void ExpectInDelayedStart() const {
+    EXPECT_FALSE(is_rendering_remotely_);
+    EXPECT_FALSE(disable_pipeline_suspend_);
+    EXPECT_TRUE(sink_name_.empty());
+    EXPECT_TRUE(IsInDelayedStart());
+    EXPECT_TRUE(activate_viewport_intersection_monitoring_);
+  }
+
+  void ExpectInRemoting() const {
+    EXPECT_TRUE(is_rendering_remotely_);
+    EXPECT_TRUE(disable_pipeline_suspend_);
+    EXPECT_EQ(kDefaultReceiver, sink_name_);
+    EXPECT_FALSE(IsInDelayedStart());
+    EXPECT_TRUE(activate_viewport_intersection_monitoring_);
+  }
+
+  void ExpectInLocalRendering() const {
+    EXPECT_FALSE(is_rendering_remotely_);
+    EXPECT_FALSE(disable_pipeline_suspend_);
+    EXPECT_TRUE(sink_name_.empty());
+    EXPECT_FALSE(IsInDelayedStart());
+  }
+
   base::MessageLoop message_loop_;
 
  protected:
-  std::unique_ptr<RendererController> controller_;
   bool is_rendering_remotely_ = false;
   bool is_remoting_cdm_ = false;
   bool activate_viewport_intersection_monitoring_ = false;
   bool disable_pipeline_suspend_ = false;
   size_t decoded_bytes_ = 0;
   base::SimpleTestTickClock* clock_;  // Own by |controller_|;
+  std::string sink_name_;
+  std::unique_ptr<RendererController> controller_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(RendererControllerTest);
@@ -169,19 +204,14 @@
   InitializeControllerAndBecomeDominant(shared_session,
                                         DefaultMetadata(VideoCodec::kCodecVP8),
                                         GetDefaultSinkMetadata(true));
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_TRUE(IsInDelayedStart());
   DelayedStartEnds(false);
   RunUntilIdle();
-  EXPECT_TRUE(is_rendering_remotely_);  // All requirements now satisfied.
-  EXPECT_TRUE(disable_pipeline_suspend_);
+  ExpectInRemoting();  // All requirements now satisfied.
 
   // Leaving fullscreen should shut down remoting.
   controller_->OnBecameDominantVisibleContent(false);
   RunUntilIdle();
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_FALSE(disable_pipeline_suspend_);
-  EXPECT_FALSE(activate_viewport_intersection_monitoring_);
+  ExpectInLocalRendering();
 }
 
 TEST_F(RendererControllerTest, StartFailedWithTooHighBitrate) {
@@ -200,7 +230,6 @@
 }
 
 TEST_F(RendererControllerTest, ToggleRendererOnSinkCapabilities) {
-  EXPECT_FALSE(is_rendering_remotely_);
   const scoped_refptr<SharedSession> shared_session =
       FakeRemoterFactory::CreateSharedSession(false);
   InitializeControllerAndBecomeDominant(shared_session,
@@ -208,13 +237,10 @@
                                         GetDefaultSinkMetadata(false));
   // An available sink that does not support remote rendering should not cause
   // the controller to toggle remote rendering on.
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_FALSE(activate_viewport_intersection_monitoring_);
+  ExpectInLocalRendering();
   shared_session->OnSinkGone();  // Bye-bye useless sink!
   RunUntilIdle();
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_FALSE(activate_viewport_intersection_monitoring_);
-  EXPECT_FALSE(disable_pipeline_suspend_);
+  ExpectInLocalRendering();
   // A sink that *does* support remote rendering *does* cause the controller to
   // toggle remote rendering on.
   shared_session->OnSinkAvailable(GetDefaultSinkMetadata(true).Clone());
@@ -223,13 +249,10 @@
   EXPECT_FALSE(is_rendering_remotely_);
   controller_->OnBecameDominantVisibleContent(true);
   RunUntilIdle();
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_FALSE(disable_pipeline_suspend_);
-  EXPECT_TRUE(IsInDelayedStart());
+  ExpectInDelayedStart();
   DelayedStartEnds(false);
   RunUntilIdle();
-  EXPECT_TRUE(is_rendering_remotely_);
-  EXPECT_TRUE(disable_pipeline_suspend_);
+  ExpectInRemoting();  // All requirements now satisfied.
 }
 
 TEST_F(RendererControllerTest, ToggleRendererOnDisableChange) {
@@ -239,20 +262,16 @@
   InitializeControllerAndBecomeDominant(shared_session,
                                         DefaultMetadata(VideoCodec::kCodecVP8),
                                         GetDefaultSinkMetadata(true));
-  EXPECT_TRUE(activate_viewport_intersection_monitoring_);
-  EXPECT_TRUE(IsInDelayedStart());
+  ExpectInDelayedStart();
   DelayedStartEnds(false);
   RunUntilIdle();
-  EXPECT_TRUE(is_rendering_remotely_);  // All requirements now satisfied.
-  EXPECT_TRUE(disable_pipeline_suspend_);
+  ExpectInRemoting();  // All requirements now satisfied.
 
   // If the page disables remote playback (e.g., by setting the
   // disableRemotePlayback attribute), this should shut down remoting.
   controller_->OnRemotePlaybackDisabled(true);
   RunUntilIdle();
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_FALSE(activate_viewport_intersection_monitoring_);
-  EXPECT_FALSE(disable_pipeline_suspend_);
+  ExpectInLocalRendering();
 }
 
 TEST_F(RendererControllerTest, WithVP9VideoCodec) {
@@ -263,9 +282,7 @@
                                         GetDefaultSinkMetadata(true));
   // An available sink that does not support VP9 video codec should not cause
   // the controller to toggle remote rendering on.
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_FALSE(disable_pipeline_suspend_);
-  EXPECT_FALSE(activate_viewport_intersection_monitoring_);
+  ExpectInLocalRendering();
 
   shared_session->OnSinkGone();  // Bye-bye useless sink!
   mojom::RemotingSinkMetadata sink_metadata = GetDefaultSinkMetadata(true);
@@ -275,12 +292,10 @@
   // toggle remote rendering on.
   shared_session->OnSinkAvailable(sink_metadata.Clone());
   RunUntilIdle();
-  EXPECT_TRUE(IsInDelayedStart());
+  ExpectInDelayedStart();
   DelayedStartEnds(false);
   RunUntilIdle();
-  EXPECT_TRUE(is_rendering_remotely_);  // All requirements now satisfied.
-  EXPECT_TRUE(activate_viewport_intersection_monitoring_);
-  EXPECT_TRUE(disable_pipeline_suspend_);
+  ExpectInRemoting();  // All requirements now satisfied.
 }
 
 TEST_F(RendererControllerTest, WithHEVCVideoCodec) {
@@ -291,15 +306,11 @@
                                         GetDefaultSinkMetadata(true));
   // An available sink that does not support HEVC video codec should not cause
   // the controller to toggle remote rendering on.
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_FALSE(activate_viewport_intersection_monitoring_);
-  EXPECT_FALSE(disable_pipeline_suspend_);
+  ExpectInLocalRendering();
 
   shared_session->OnSinkGone();  // Bye-bye useless sink!
   RunUntilIdle();
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_FALSE(activate_viewport_intersection_monitoring_);
-  EXPECT_FALSE(disable_pipeline_suspend_);
+  ExpectInLocalRendering();
   mojom::RemotingSinkMetadata sink_metadata = GetDefaultSinkMetadata(true);
   sink_metadata.video_capabilities.push_back(
       mojom::RemotingSinkVideoCapability::CODEC_HEVC);
@@ -307,12 +318,10 @@
   // toggle remote rendering on.
   shared_session->OnSinkAvailable(sink_metadata.Clone());
   RunUntilIdle();
-  EXPECT_TRUE(IsInDelayedStart());
+  ExpectInDelayedStart();
   DelayedStartEnds(false);
   RunUntilIdle();
-  EXPECT_TRUE(is_rendering_remotely_);  // All requirements now satisfied.
-  EXPECT_TRUE(activate_viewport_intersection_monitoring_);
-  EXPECT_TRUE(disable_pipeline_suspend_);
+  ExpectInRemoting();  // All requirements now satisfied.
 }
 
 TEST_F(RendererControllerTest, WithAACAudioCodec) {
@@ -327,14 +336,11 @@
                                         GetDefaultSinkMetadata(true));
   // An available sink that does not support AAC audio codec should not cause
   // the controller to toggle remote rendering on.
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_FALSE(disable_pipeline_suspend_);
-  EXPECT_FALSE(activate_viewport_intersection_monitoring_);
+  ExpectInLocalRendering();
 
   shared_session->OnSinkGone();  // Bye-bye useless sink!
   RunUntilIdle();
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_FALSE(disable_pipeline_suspend_);
+  ExpectInLocalRendering();
   mojom::RemotingSinkMetadata sink_metadata = GetDefaultSinkMetadata(true);
   sink_metadata.audio_capabilities.push_back(
       mojom::RemotingSinkAudioCapability::CODEC_AAC);
@@ -342,12 +348,10 @@
   // toggle remote rendering on.
   shared_session->OnSinkAvailable(sink_metadata.Clone());
   RunUntilIdle();
-  EXPECT_TRUE(IsInDelayedStart());
+  ExpectInDelayedStart();
   DelayedStartEnds(false);
   RunUntilIdle();
-  EXPECT_TRUE(is_rendering_remotely_);  // All requirements now satisfied.
-  EXPECT_TRUE(activate_viewport_intersection_monitoring_);
-  EXPECT_TRUE(disable_pipeline_suspend_);
+  ExpectInRemoting();  // All requirements now satisfied.
 }
 
 TEST_F(RendererControllerTest, WithOpusAudioCodec) {
@@ -362,9 +366,7 @@
                                         GetDefaultSinkMetadata(true));
   // An available sink that does not support Opus audio codec should not cause
   // the controller to toggle remote rendering on.
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_FALSE(activate_viewport_intersection_monitoring_);
-  EXPECT_FALSE(disable_pipeline_suspend_);
+  ExpectInLocalRendering();
 
   shared_session->OnSinkGone();  // Bye-bye useless sink!
   RunUntilIdle();
@@ -375,12 +377,10 @@
   // toggle remote rendering on.
   shared_session->OnSinkAvailable(sink_metadata.Clone());
   RunUntilIdle();
-  EXPECT_TRUE(IsInDelayedStart());
+  ExpectInDelayedStart();
   DelayedStartEnds(false);
   RunUntilIdle();
-  EXPECT_TRUE(is_rendering_remotely_);  // All requirements now satisfied.
-  EXPECT_TRUE(activate_viewport_intersection_monitoring_);
-  EXPECT_TRUE(disable_pipeline_suspend_);
+  ExpectInRemoting();  // All requirements now satisfied.
 }
 
 TEST_F(RendererControllerTest, StartFailed) {
@@ -390,11 +390,10 @@
                                         DefaultMetadata(VideoCodec::kCodecVP8),
                                         GetDefaultSinkMetadata(true));
   RunUntilIdle();
-  EXPECT_TRUE(IsInDelayedStart());
+  ExpectInDelayedStart();
   DelayedStartEnds(false);
   RunUntilIdle();
-  EXPECT_FALSE(is_rendering_remotely_);
-  EXPECT_FALSE(disable_pipeline_suspend_);
+  ExpectInLocalRendering();
 }
 
 TEST_F(RendererControllerTest, EncryptedWithRemotingCdm) {
diff --git a/media/remoting/shared_session.h b/media/remoting/shared_session.h
index 3db7023..4711071 100644
--- a/media/remoting/shared_session.h
+++ b/media/remoting/shared_session.h
@@ -83,6 +83,8 @@
     return state_;
   }
 
+  const std::string& sink_name() const { return sink_metadata_.friendly_name; }
+
   // Queries on remoting sink capabilities.
   bool HasVideoCapability(mojom::RemotingSinkVideoCapability capability) const;
   bool HasAudioCapability(mojom::RemotingSinkAudioCapability capability) const;
diff --git a/net/BUILD.gn b/net/BUILD.gn
index 3c3dc66..95c0a91 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -1041,8 +1041,6 @@
       "ntlm/ntlm_buffer_reader.h",
       "ntlm/ntlm_buffer_writer.cc",
       "ntlm/ntlm_buffer_writer.h",
-      "ntlm/ntlm_client.cc",
-      "ntlm/ntlm_client.h",
       "ntlm/ntlm_constants.h",
       "proxy/dhcp_proxy_script_adapter_fetcher_win.cc",
       "proxy/dhcp_proxy_script_adapter_fetcher_win.h",
@@ -1799,8 +1797,6 @@
         "ntlm/ntlm_buffer_reader.h",
         "ntlm/ntlm_buffer_writer.cc",
         "ntlm/ntlm_buffer_writer.h",
-        "ntlm/ntlm_client.cc",
-        "ntlm/ntlm_client.h",
         "ntlm/ntlm_constants.h",
       ]
     }
@@ -3537,6 +3533,9 @@
     "data/parse_certificate_unittest/policy_qualifiers_empty_sequence.pem",
     "data/parse_certificate_unittest/serial_37_bytes.pem",
     "data/parse_certificate_unittest/serial_negative.pem",
+    "data/parse_certificate_unittest/serial_not_minimal.pem",
+    "data/parse_certificate_unittest/serial_not_number.pem",
+    "data/parse_certificate_unittest/serial_zero.pem",
     "data/parse_certificate_unittest/serial_zero_padded.pem",
     "data/parse_certificate_unittest/serial_zero_padded_21_bytes.pem",
     "data/parse_certificate_unittest/signature_algorithm_null.pem",
@@ -4899,7 +4898,6 @@
     "ntlm/des_unittest.cc",
     "ntlm/ntlm_buffer_reader_unittest.cc",
     "ntlm/ntlm_buffer_writer_unittest.cc",
-    "ntlm/ntlm_client_unittest.cc",
     "ntlm/ntlm_test_data.h",
     "ntlm/ntlm_unittest.cc",
     "proxy/dhcp_proxy_script_adapter_fetcher_win_unittest.cc",
@@ -5318,7 +5316,6 @@
       "ntlm/des_unittest.cc",
       "ntlm/ntlm_buffer_reader_unittest.cc",
       "ntlm/ntlm_buffer_writer_unittest.cc",
-      "ntlm/ntlm_client_unittest.cc",
       "ntlm/ntlm_test_data.h",
       "ntlm/ntlm_unittest.cc",
     ]
@@ -5881,21 +5878,6 @@
   dict = "data/fuzzer_dictionaries/net_http_stream_parser_fuzzer.dict"
 }
 
-fuzzer_test("net_ntlm_ntlm_client_fuzzer") {
-  sources = [
-    "ntlm/ntlm_client_fuzzer.cc",
-  ]
-  deps = [
-    ":net_fuzzer_test_support",
-    ":test_support",
-    "//base",
-    "//net",
-    "//net:net_unittests",
-  ]
-  dict = "data/fuzzer_dictionaries/net_ntlm_ntlm_client_fuzzer.dict"
-  seed_corpus = "data/fuzzer_data/ntlm_client_fuzzer/"
-}
-
 if (!disable_brotli_filter) {
   fuzzer_test("net_brotli_source_stream_fuzzer") {
     sources = [
diff --git a/net/cert/internal/parse_certificate.cc b/net/cert/internal/parse_certificate.cc
index 8c22ae3..7f1e48c 100644
--- a/net/cert/internal/parse_certificate.cc
+++ b/net/cert/internal/parse_certificate.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/strings/string_util.h"
+#include "net/cert/internal/cert_error_params.h"
 #include "net/cert/internal/cert_errors.h"
 #include "net/der/input.h"
 #include "net/der/parse_values.h"
@@ -37,7 +38,6 @@
 DEFINE_CERT_ERROR_ID(kVersionExplicitlyV1,
                      "Version explicitly V1 (should be omitted)");
 DEFINE_CERT_ERROR_ID(kFailedReadingSerialNumber, "Failed reading serialNumber");
-DEFINE_CERT_ERROR_ID(kInvalidSerialNumber, "Invalid serial number");
 DEFINE_CERT_ERROR_ID(kFailedReadingSignatureValue, "Failed reading signature");
 DEFINE_CERT_ERROR_ID(kFailedReadingIssuer, "Failed reading issuer");
 DEFINE_CERT_ERROR_ID(kFailedReadingValidity, "Failed reading validity");
@@ -62,6 +62,12 @@
                      "Failed reading extensions SEQUENCE");
 DEFINE_CERT_ERROR_ID(kUnexpectedExtensions,
                      "Unexpected extensions (must be V3 certificate)");
+DEFINE_CERT_ERROR_ID(kSerialNumberIsNegative, "Serial number is negative");
+DEFINE_CERT_ERROR_ID(kSerialNumberIsZero, "Serial number is zero");
+DEFINE_CERT_ERROR_ID(kSerialNumberLengthOver20,
+                     "Serial number is longer than 20 octets");
+DEFINE_CERT_ERROR_ID(kSerialNumberNotValidInteger,
+                     "Serial number is not a valid INTEGER");
 
 // Returns true if |input| is a SEQUENCE and nothing else.
 WARN_UNUSED_RESULT bool IsSequenceTLV(const der::Input& input) {
@@ -329,14 +335,40 @@
 
 ParsedTbsCertificate::~ParsedTbsCertificate() {}
 
-bool VerifySerialNumber(const der::Input& value) {
-  bool unused_negative;
-  if (!der::IsValidInteger(value, &unused_negative))
-    return false;
+bool VerifySerialNumber(const der::Input& value,
+                        bool warnings_only,
+                        CertErrors* errors) {
+  // If |warnings_only| was set to true, the exact same errors will be logged,
+  // only they will be logged with a lower severity (warning rather than error).
+  CertError::Severity error_severity =
+      warnings_only ? CertError::SEVERITY_WARNING : CertError::SEVERITY_HIGH;
 
-  // Check if the serial number is too long per RFC 5280.
-  if (value.Length() > 20)
+  bool negative;
+  if (!der::IsValidInteger(value, &negative)) {
+    errors->Add(error_severity, kSerialNumberNotValidInteger, nullptr);
     return false;
+  }
+
+  // RFC 5280 section 4.1.2.2:
+  //
+  //    Note: Non-conforming CAs may issue certificates with serial numbers
+  //    that are negative or zero.  Certificate users SHOULD be prepared to
+  //    gracefully handle such certificates.
+  if (negative)
+    errors->AddWarning(kSerialNumberIsNegative);
+  if (value.Length() == 1 && value.UnsafeData()[0] == 0)
+    errors->AddWarning(kSerialNumberIsZero);
+
+  // RFC 5280 section 4.1.2.2:
+  //
+  //    Certificate users MUST be able to handle serialNumber values up to 20
+  //    octets. Conforming CAs MUST NOT use serialNumber values longer than 20
+  //    octets.
+  if (value.Length() > 20) {
+    errors->Add(error_severity, kSerialNumberLengthOver20,
+                CreateCertErrorParams1SizeT("length", value.Length()));
+    return false;
+  }
 
   return true;
 }
@@ -464,13 +496,12 @@
     errors->AddError(kFailedReadingSerialNumber);
     return false;
   }
-  if (!VerifySerialNumber(out->serial_number)) {
-    if (options.allow_invalid_serial_numbers) {
-      errors->AddWarning(kInvalidSerialNumber);
-    } else {
-      errors->AddError(kInvalidSerialNumber);
+  if (!VerifySerialNumber(out->serial_number,
+                          options.allow_invalid_serial_numbers, errors)) {
+    // Invalid serial numbers are only considered fatal failures if
+    // |!allow_invalid_serial_numbers|.
+    if (!options.allow_invalid_serial_numbers)
       return false;
-    }
   }
 
   //        signature            AlgorithmIdentifier,
diff --git a/net/cert/internal/parse_certificate.h b/net/cert/internal/parse_certificate.h
index 729cbfaf..58b2ec1 100644
--- a/net/cert/internal/parse_certificate.h
+++ b/net/cert/internal/parse_certificate.h
@@ -46,7 +46,13 @@
 //     Note: Non-conforming CAs may issue certificates with serial numbers
 //     that are negative or zero.  Certificate users SHOULD be prepared to
 //     gracefully handle such certificates.
-NET_EXPORT bool VerifySerialNumber(const der::Input& value) WARN_UNUSED_RESULT;
+//
+// |errors| must be a non-null destination for any errors/warnings. If
+// |warnings_only| is set to true, then what would ordinarily be errors are
+// instead added as warnings.
+NET_EXPORT bool VerifySerialNumber(const der::Input& value,
+                                   bool warnings_only,
+                                   CertErrors* errors) WARN_UNUSED_RESULT;
 
 struct NET_EXPORT ParseCertificateOptions {
   // If set to true, then parsing will skip checks on the certificate's serial
diff --git a/net/cert/internal/parse_ocsp.cc b/net/cert/internal/parse_ocsp.cc
index f144ad70..4df38aee 100644
--- a/net/cert/internal/parse_ocsp.cc
+++ b/net/cert/internal/parse_ocsp.cc
@@ -62,7 +62,8 @@
     return false;
   if (!parser.ReadTag(der::kInteger, &(out->serial_number)))
     return false;
-  if (!VerifySerialNumber(out->serial_number))
+  CertErrors errors;
+  if (!VerifySerialNumber(out->serial_number, false /*warnings_only*/, &errors))
     return false;
 
   return !parser.HasMore();
diff --git a/net/cert/internal/parsed_certificate_unittest.cc b/net/cert/internal/parsed_certificate_unittest.cc
index ac4005e..2012ef17 100644
--- a/net/cert/internal/parsed_certificate_unittest.cc
+++ b/net/cert/internal/parsed_certificate_unittest.cc
@@ -509,6 +509,32 @@
   EXPECT_EQ(der::Input(expected_serial), cert->tbs().serial_number);
 }
 
+// Tests a serial number which is zero. RFC 5280 says they should be positive,
+// however also recommends supporting non-positive ones, so parsing here
+// is expected to succeed.
+TEST(ParsedCertificateTest, SerialNumberZero) {
+  scoped_refptr<ParsedCertificate> cert =
+      ParseCertificateFromFile("serial_zero.pem", {});
+  ASSERT_TRUE(cert);
+
+  static const uint8_t expected_serial[] = {0x00};
+  EXPECT_EQ(der::Input(expected_serial), cert->tbs().serial_number);
+}
+
+// Tests a serial number which not a number (NULL).
+TEST(ParsedCertificateTest, SerialNotNumber) {
+  scoped_refptr<ParsedCertificate> cert =
+      ParseCertificateFromFile("serial_not_number.pem", {});
+  ASSERT_FALSE(cert);
+}
+
+// Tests a serial number which uses a non-minimal INTEGER encoding
+TEST(ParsedCertificateTest, SerialNotMinimal) {
+  scoped_refptr<ParsedCertificate> cert =
+      ParseCertificateFromFile("serial_not_minimal.pem", {});
+  ASSERT_FALSE(cert);
+}
+
 // Tests parsing a certificate that has an inhibitAnyPolicy extension.
 TEST(ParsedCertificateTest, InhibitAnyPolicy) {
   scoped_refptr<ParsedCertificate> cert =
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc
index f33ceba..974bd420 100644
--- a/net/cookies/cookie_monster.cc
+++ b/net/cookies/cookie_monster.cc
@@ -1409,7 +1409,8 @@
                                        SetCookiesCallback callback) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  if (cc->IsSecure() && !secure_source) {
+  if ((cc->IsSecure() && !secure_source) ||
+      (cc->IsHttpOnly() && !modify_http_only)) {
     MaybeRunCookieCallback(std::move(callback), false);
     return;
   }
diff --git a/net/cookies/cookie_store_unittest.h b/net/cookies/cookie_store_unittest.h
index 56ee4248..7c2a9f8 100644
--- a/net/cookies/cookie_store_unittest.h
+++ b/net/cookies/cookie_store_unittest.h
@@ -537,6 +537,45 @@
           COOKIE_PRIORITY_DEFAULT),
       false, true));
 
+  if (TypeParam::supports_http_only) {
+    // Permission to modify http only cookies is required to create an
+    // httponly cookie.
+    EXPECT_FALSE(this->SetCanonicalCookie(
+        cs,
+        base::MakeUnique<CanonicalCookie>(
+            "G", "H", http_foo_host, "/unique", base::Time(), base::Time(),
+            base::Time(), false, true, CookieSameSite::DEFAULT_MODE,
+            COOKIE_PRIORITY_DEFAULT),
+        /* secure_source */ false, /* modify_http_only */ false));
+
+    // Permission to modify httponly cookies is also required to overwrite
+    // an httponly cookie.
+    EXPECT_TRUE(this->SetCanonicalCookie(
+        cs,
+        base::MakeUnique<CanonicalCookie>(
+            "G", "H", http_foo_host, "/unique", base::Time(), base::Time(),
+            base::Time(), false, true, CookieSameSite::DEFAULT_MODE,
+            COOKIE_PRIORITY_DEFAULT),
+        /* secure_source */ false, /* modify_http_only */ true));
+
+    EXPECT_FALSE(this->SetCanonicalCookie(
+        cs,
+        base::MakeUnique<CanonicalCookie>(
+            "G", "H", http_foo_host, "/unique", base::Time(), base::Time(),
+            base::Time(), false, true, CookieSameSite::DEFAULT_MODE,
+            COOKIE_PRIORITY_DEFAULT),
+        /* secure_source */ false, /* modify_http_only */ false));
+  } else {
+    // Leave store in same state as if the above tests had been run.
+    EXPECT_TRUE(this->SetCanonicalCookie(
+        cs,
+        base::MakeUnique<CanonicalCookie>(
+            "G", "H", http_foo_host, "/unique", base::Time(), base::Time(),
+            base::Time(), false, true, CookieSameSite::DEFAULT_MODE,
+            COOKIE_PRIORITY_DEFAULT),
+        /* secure_source */ false, /* modify_http_only */ true));
+  }
+
   // Get all the cookies for a given URL, regardless of properties. This 'get()'
   // operation shouldn't update the access time, as the test checks that the
   // access time is set properly upon creation. Updating the access time would
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/challenge_spec_4_2_2_3.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/challenge_spec_4_2_2_3.bin
deleted file mode 100644
index e698a39..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/challenge_spec_4_2_2_3.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/challenge_too_short.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/challenge_too_short.bin
deleted file mode 100644
index 373e40b..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/challenge_too_short.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0001.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0001.bin
deleted file mode 100644
index 5fbd821..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0001.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0002.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0002.bin
deleted file mode 100644
index f4ba5237..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0002.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0003.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0003.bin
deleted file mode 100644
index d660270e..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0003.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0004.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0004.bin
deleted file mode 100644
index 47536b9..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0004.bin
+++ /dev/null
@@ -1 +0,0 @@
-NTLMTLM
\ No newline at end of file
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0005.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0005.bin
deleted file mode 100644
index 7473331..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0005.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0006.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0006.bin
deleted file mode 100644
index 59b8622..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0006.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0007.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0007.bin
deleted file mode 100644
index 41f9091..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0007.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0008.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0008.bin
deleted file mode 100644
index b606083..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0008.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0009.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0009.bin
deleted file mode 100644
index 0b611b6..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0009.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0010.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0010.bin
deleted file mode 100644
index 81328cc..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0010.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0011.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0011.bin
deleted file mode 100644
index c1e5459..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0011.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0012.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0012.bin
deleted file mode 100644
index 10b29fc2..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0012.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0013.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0013.bin
deleted file mode 100644
index 9d8690a8..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0013.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0014.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0014.bin
deleted file mode 100644
index 4973fb20..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0014.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0015.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0015.bin
deleted file mode 100644
index e8a58405a..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0015.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0016.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0016.bin
deleted file mode 100644
index 621e80e..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0016.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0017.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0017.bin
deleted file mode 100644
index c462bd9..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0017.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0018.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0018.bin
deleted file mode 100644
index b67afe0f..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0018.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0019.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0019.bin
deleted file mode 100644
index bab5e6e..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0019.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0020.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0020.bin
deleted file mode 100644
index a30cc54..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0020.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0021.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0021.bin
deleted file mode 100644
index d1c8e05..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0021.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0022.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0022.bin
deleted file mode 100644
index f28fc3d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0022.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0023.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0023.bin
deleted file mode 100644
index f1f4bb4..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0023.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0024.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0024.bin
deleted file mode 100644
index a0672f4..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0024.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0025.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0025.bin
deleted file mode 100644
index fe0425e..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0025.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0026.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0026.bin
deleted file mode 100644
index f8a9023..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0026.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0027.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0027.bin
deleted file mode 100644
index 3b00f011..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0027.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0028.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0028.bin
deleted file mode 100644
index 614ce50..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0028.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0029.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0029.bin
deleted file mode 100644
index 377e0f6..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0029.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0030.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0030.bin
deleted file mode 100644
index 2104a07..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0030.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0031.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0031.bin
deleted file mode 100644
index 7060f5a..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0031.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0032.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0032.bin
deleted file mode 100644
index 34f14d9..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0032.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0033.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0033.bin
deleted file mode 100644
index 7020361a..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0033.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0034.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0034.bin
deleted file mode 100644
index d9c78d1..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0034.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0035.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0035.bin
deleted file mode 100644
index 0d390d83..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0035.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0036.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0036.bin
deleted file mode 100644
index 8a45436..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0036.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0037.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0037.bin
deleted file mode 100644
index 69b0a13..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0037.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0038.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0038.bin
deleted file mode 100644
index af76586..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0038.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0039.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0039.bin
deleted file mode 100644
index 8e9671c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0039.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0040.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0040.bin
deleted file mode 100644
index b273002..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0040.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0041.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0041.bin
deleted file mode 100644
index 51dfba6..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0041.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0042.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0042.bin
deleted file mode 100644
index 6e6e09e..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0042.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0043.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0043.bin
deleted file mode 100644
index 530b0ce2..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0043.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0044.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0044.bin
deleted file mode 100644
index 5cd8c83..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0044.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0045.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0045.bin
deleted file mode 100644
index 03af3a5a9..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0045.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0046.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0046.bin
deleted file mode 100644
index 8410149..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0046.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0047.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0047.bin
deleted file mode 100644
index 926d80a..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0047.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0048.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0048.bin
deleted file mode 100644
index 13577d2..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0048.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0049.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0049.bin
deleted file mode 100644
index 4771d6c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0049.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0050.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0050.bin
deleted file mode 100644
index fb65c29c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0050.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0051.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0051.bin
deleted file mode 100644
index 8217b184..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0051.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0052.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0052.bin
deleted file mode 100644
index ece8b30..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0052.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0053.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0053.bin
deleted file mode 100644
index 699dd92..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0053.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0054.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0054.bin
deleted file mode 100644
index 38e4308..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0054.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0055.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0055.bin
deleted file mode 100644
index cbc53af..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0055.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0056.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0056.bin
deleted file mode 100644
index f221f8f..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0056.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0057.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0057.bin
deleted file mode 100644
index 512f14e38..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0057.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0058.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0058.bin
deleted file mode 100644
index 9e1d0a0..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0058.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0059.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0059.bin
deleted file mode 100644
index caece732..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0059.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0060.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0060.bin
deleted file mode 100644
index 9debe5f..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0060.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0061.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0061.bin
deleted file mode 100644
index 280e506..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0061.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0062.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0062.bin
deleted file mode 100644
index 845c743c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0062.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0063.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0063.bin
deleted file mode 100644
index 725e684..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0063.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0064.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0064.bin
deleted file mode 100644
index ba17f74..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0064.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0065.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0065.bin
deleted file mode 100644
index 3456bc1..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0065.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0066.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0066.bin
deleted file mode 100644
index cc59ed3..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0066.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0067.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0067.bin
deleted file mode 100644
index bf33a20..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0067.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0068.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0068.bin
deleted file mode 100644
index 6c4f277..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0068.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0069.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0069.bin
deleted file mode 100644
index ee77d1b..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0069.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0070.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0070.bin
deleted file mode 100644
index 46ca637..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0070.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0071.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0071.bin
deleted file mode 100644
index c2d975c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0071.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0072.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0072.bin
deleted file mode 100644
index e4dde45..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0072.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0073.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0073.bin
deleted file mode 100644
index 91f3030..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0073.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0074.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0074.bin
deleted file mode 100644
index 7c5957a..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0074.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0075.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0075.bin
deleted file mode 100644
index 88dd3bf..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0075.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0076.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0076.bin
deleted file mode 100644
index 86a30c0..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0076.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0077.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0077.bin
deleted file mode 100644
index 9efe98e..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0077.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0078.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0078.bin
deleted file mode 100644
index 750b9aa..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0078.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0079.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0079.bin
deleted file mode 100644
index ab9857d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0079.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0080.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0080.bin
deleted file mode 100644
index 924ee6b..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0080.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0081.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0081.bin
deleted file mode 100644
index 0ff800ef..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0081.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0082.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0082.bin
deleted file mode 100644
index 00bd3be..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0082.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0083.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0083.bin
deleted file mode 100644
index c425134..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0083.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0084.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0084.bin
deleted file mode 100644
index 0e67c2c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0084.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0085.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0085.bin
deleted file mode 100644
index 3706e12..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0085.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0086.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0086.bin
deleted file mode 100644
index adf3728..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0086.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0087.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0087.bin
deleted file mode 100644
index 0d68d69..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0087.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0088.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0088.bin
deleted file mode 100644
index 26c582d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0088.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0089.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0089.bin
deleted file mode 100644
index 7f9ab4e..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0089.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0090.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0090.bin
deleted file mode 100644
index f79a15d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0090.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0091.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0091.bin
deleted file mode 100644
index 28c50a5..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0091.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0092.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0092.bin
deleted file mode 100644
index f3cae66..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0092.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0093.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0093.bin
deleted file mode 100644
index 8242183..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0093.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0094.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0094.bin
deleted file mode 100644
index deabfc2..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0094.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0095.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0095.bin
deleted file mode 100644
index fd15789..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0095.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0096.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0096.bin
deleted file mode 100644
index fa7bbeb..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0096.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0097.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0097.bin
deleted file mode 100644
index 2cf1abb..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0097.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0098.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0098.bin
deleted file mode 100644
index 00ac7a3..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0098.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0099.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0099.bin
deleted file mode 100644
index 330d7cf..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0099.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0100.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0100.bin
deleted file mode 100644
index bca0c582..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0100.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0101.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0101.bin
deleted file mode 100644
index 6b44f59..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0101.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0102.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0102.bin
deleted file mode 100644
index 5b628fe1..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0102.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0103.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0103.bin
deleted file mode 100644
index 7999eb7..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0103.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0104.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0104.bin
deleted file mode 100644
index 66f711e..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0104.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0105.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0105.bin
deleted file mode 100644
index 6e164b5..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0105.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0106.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0106.bin
deleted file mode 100644
index 83d22c21..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0106.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0107.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0107.bin
deleted file mode 100644
index d7a1bd9..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0107.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0108.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0108.bin
deleted file mode 100644
index 7381ba6..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0108.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0109.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0109.bin
deleted file mode 100644
index a69095c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0109.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0110.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0110.bin
deleted file mode 100644
index 88f9980..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0110.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0111.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0111.bin
deleted file mode 100644
index 1003e284..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0111.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0112.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0112.bin
deleted file mode 100644
index 0e62a66..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0112.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0113.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0113.bin
deleted file mode 100644
index 38ae0fb..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0113.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0114.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0114.bin
deleted file mode 100644
index a506e02..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0114.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0115.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0115.bin
deleted file mode 100644
index 91a4aa8..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0115.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0116.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0116.bin
deleted file mode 100644
index 09efefa..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0116.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0117.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0117.bin
deleted file mode 100644
index af1652c3..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0117.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0118.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0118.bin
deleted file mode 100644
index a0874e3..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0118.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0119.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0119.bin
deleted file mode 100644
index 4a018dd8..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0119.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0120.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0120.bin
deleted file mode 100644
index b6be5c2..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0120.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0121.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0121.bin
deleted file mode 100644
index 8bb62ee..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0121.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0122.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0122.bin
deleted file mode 100644
index 272dc16..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0122.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0123.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0123.bin
deleted file mode 100644
index 04508d64..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0123.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0124.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0124.bin
deleted file mode 100644
index 4530dd4..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0124.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0125.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0125.bin
deleted file mode 100644
index 3c8dbb50..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0125.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0126.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0126.bin
deleted file mode 100644
index 98754153..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0126.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0127.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0127.bin
deleted file mode 100644
index c1496ce..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0127.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0128.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0128.bin
deleted file mode 100644
index fcd602de..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0128.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0129.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0129.bin
deleted file mode 100644
index 6a93485..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0129.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0130.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0130.bin
deleted file mode 100644
index 11e4731..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0130.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0131.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0131.bin
deleted file mode 100644
index 59b9e48..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0131.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0132.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0132.bin
deleted file mode 100644
index 77eef11..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0132.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0133.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0133.bin
deleted file mode 100644
index 3a18b53..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0133.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0134.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0134.bin
deleted file mode 100644
index 4de9ffa..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0134.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0135.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0135.bin
deleted file mode 100644
index 345ee99..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0135.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0136.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0136.bin
deleted file mode 100644
index 0673656..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0136.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0137.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0137.bin
deleted file mode 100644
index ee10d17..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0137.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0138.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0138.bin
deleted file mode 100644
index 0582d75..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0138.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0139.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0139.bin
deleted file mode 100644
index a97ba95..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0139.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0140.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0140.bin
deleted file mode 100644
index e665e49..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0140.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0141.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0141.bin
deleted file mode 100644
index cc12b12..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0141.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0142.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0142.bin
deleted file mode 100644
index e302b08..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0142.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0143.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0143.bin
deleted file mode 100644
index d80571b..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0143.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0144.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0144.bin
deleted file mode 100644
index 4421a7a..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0144.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0145.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0145.bin
deleted file mode 100644
index c1ee371d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0145.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0146.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0146.bin
deleted file mode 100644
index 13b34ec5..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0146.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0147.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0147.bin
deleted file mode 100644
index ab07749..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0147.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0148.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0148.bin
deleted file mode 100644
index 8c66a052..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0148.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0149.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0149.bin
deleted file mode 100644
index 5c5302f..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0149.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0150.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0150.bin
deleted file mode 100644
index 6ba161ab..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0150.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0151.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0151.bin
deleted file mode 100644
index 3818c137..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0151.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0152.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0152.bin
deleted file mode 100644
index 39fd63d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0152.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0153.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0153.bin
deleted file mode 100644
index 2d27dde4..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0153.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0154.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0154.bin
deleted file mode 100644
index 7454103..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0154.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0155.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0155.bin
deleted file mode 100644
index c0add9e..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0155.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0156.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0156.bin
deleted file mode 100644
index 6b85869..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0156.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0157.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0157.bin
deleted file mode 100644
index c777eef8..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0157.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0158.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0158.bin
deleted file mode 100644
index f76dd23..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0158.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0159.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0159.bin
deleted file mode 100644
index 8e0b967..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0159.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0160.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0160.bin
deleted file mode 100644
index 5faf34c6..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0160.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0161.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0161.bin
deleted file mode 100644
index 931ca76..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0161.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0162.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0162.bin
deleted file mode 100644
index 43d8d4e..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0162.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0163.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0163.bin
deleted file mode 100644
index 9fc7abe0..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0163.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0164.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0164.bin
deleted file mode 100644
index 3ed4d46..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0164.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0165.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0165.bin
deleted file mode 100644
index aa1b137..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0165.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0166.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0166.bin
deleted file mode 100644
index e9e2746..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0166.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0167.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0167.bin
deleted file mode 100644
index bc57d7fa..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0167.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0168.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0168.bin
deleted file mode 100644
index db6143d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0168.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0169.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0169.bin
deleted file mode 100644
index f7e2f37..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0169.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0170.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0170.bin
deleted file mode 100644
index afa5fcb..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0170.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0171.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0171.bin
deleted file mode 100644
index 1bc1469..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0171.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0172.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0172.bin
deleted file mode 100644
index 77589fd..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0172.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0173.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0173.bin
deleted file mode 100644
index 341e1294..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0173.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0174.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0174.bin
deleted file mode 100644
index f600051..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0174.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0175.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0175.bin
deleted file mode 100644
index cb85e40..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0175.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0176.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0176.bin
deleted file mode 100644
index 4757964..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0176.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0177.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0177.bin
deleted file mode 100644
index c61395e7..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0177.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0178.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0178.bin
deleted file mode 100644
index 244324df..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0178.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0179.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0179.bin
deleted file mode 100644
index 76fafad..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0179.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0180.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0180.bin
deleted file mode 100644
index f607889..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0180.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0181.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0181.bin
deleted file mode 100644
index 97eeb3d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0181.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0182.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0182.bin
deleted file mode 100644
index 420ecf17..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0182.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0183.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0183.bin
deleted file mode 100644
index 3d64a16..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0183.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0184.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0184.bin
deleted file mode 100644
index 6c6e27e2..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0184.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0185.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0185.bin
deleted file mode 100644
index 18aff61dc..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0185.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0186.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0186.bin
deleted file mode 100644
index 5565fae..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0186.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0187.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0187.bin
deleted file mode 100644
index 8b4d50f..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0187.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0188.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0188.bin
deleted file mode 100644
index 1116e15..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0188.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0189.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0189.bin
deleted file mode 100644
index c8e21bd..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0189.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0190.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0190.bin
deleted file mode 100644
index cb8ba0ec..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0190.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0191.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0191.bin
deleted file mode 100644
index f28fcca..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0191.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0192.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0192.bin
deleted file mode 100644
index ff9b900..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0192.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0193.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0193.bin
deleted file mode 100644
index 71b3783..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0193.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0194.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0194.bin
deleted file mode 100644
index 8d9d867e..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0194.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0195.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0195.bin
deleted file mode 100644
index 2a35617..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0195.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0196.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0196.bin
deleted file mode 100644
index a021ead..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0196.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0197.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0197.bin
deleted file mode 100644
index bfdc2c3..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0197.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0198.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0198.bin
deleted file mode 100644
index 4538d31..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0198.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0199.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0199.bin
deleted file mode 100644
index 2b32f8a..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0199.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0200.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0200.bin
deleted file mode 100644
index eb21f6bf..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0200.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0201.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0201.bin
deleted file mode 100644
index 3ee1496..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0201.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0202.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0202.bin
deleted file mode 100644
index 359c465..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0202.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0203.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0203.bin
deleted file mode 100644
index 8ed1725cd..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0203.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0204.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0204.bin
deleted file mode 100644
index f8b0ec2..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0204.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0205.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0205.bin
deleted file mode 100644
index dce527ae..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0205.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0206.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0206.bin
deleted file mode 100644
index a048fff..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0206.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0207.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0207.bin
deleted file mode 100644
index 9be79a5..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0207.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0208.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0208.bin
deleted file mode 100644
index d887e8f1..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0208.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0209.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0209.bin
deleted file mode 100644
index cc4e2f1..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0209.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0210.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0210.bin
deleted file mode 100644
index 054d8cb..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0210.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0211.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0211.bin
deleted file mode 100644
index 099130d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0211.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0212.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0212.bin
deleted file mode 100644
index aaf4a625..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0212.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0213.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0213.bin
deleted file mode 100644
index 96252735..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0213.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0214.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0214.bin
deleted file mode 100644
index 57a2115..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0214.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0215.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0215.bin
deleted file mode 100644
index 0699fa3d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0215.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0216.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0216.bin
deleted file mode 100644
index 62fca99..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0216.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0217.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0217.bin
deleted file mode 100644
index 0149eae1..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0217.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0218.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0218.bin
deleted file mode 100644
index 2a3a155..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0218.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0219.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0219.bin
deleted file mode 100644
index 0fe6457..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0219.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0220.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0220.bin
deleted file mode 100644
index 010f53b5..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0220.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0221.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0221.bin
deleted file mode 100644
index aead929..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0221.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0222.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0222.bin
deleted file mode 100644
index 7090ef3..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0222.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0223.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0223.bin
deleted file mode 100644
index c06942a9..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0223.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0224.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0224.bin
deleted file mode 100644
index d2f52926..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0224.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0225.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0225.bin
deleted file mode 100644
index 11084fa..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0225.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0226.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0226.bin
deleted file mode 100644
index 67d166ae..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0226.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0227.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0227.bin
deleted file mode 100644
index b19336f5..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0227.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0228.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0228.bin
deleted file mode 100644
index cf6d673..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0228.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0229.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0229.bin
deleted file mode 100644
index 10a4faf..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0229.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0230.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0230.bin
deleted file mode 100644
index 3d10e15..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0230.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0231.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0231.bin
deleted file mode 100644
index 0ac57fb4..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0231.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0232.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0232.bin
deleted file mode 100644
index dbd466440..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0232.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0233.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0233.bin
deleted file mode 100644
index 32ba27d5..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0233.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0234.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0234.bin
deleted file mode 100644
index 6e3bb081..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0234.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0235.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0235.bin
deleted file mode 100644
index 70b881d5..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0235.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0236.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0236.bin
deleted file mode 100644
index 0f3333f..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0236.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0237.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0237.bin
deleted file mode 100644
index 2b4ae31c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0237.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0238.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0238.bin
deleted file mode 100644
index 23060649..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0238.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0239.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0239.bin
deleted file mode 100644
index 18f4ac7d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0239.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0240.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0240.bin
deleted file mode 100644
index 4f8e3ae..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0240.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0241.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0241.bin
deleted file mode 100644
index 7e68a9d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0241.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0242.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0242.bin
deleted file mode 100644
index f12dd875..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0242.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0243.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0243.bin
deleted file mode 100644
index ca613df..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0243.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0244.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0244.bin
deleted file mode 100644
index 4dfa10d0..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0244.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0245.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0245.bin
deleted file mode 100644
index 28f7803..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0245.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0246.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0246.bin
deleted file mode 100644
index ed9c8ec..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0246.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0247.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0247.bin
deleted file mode 100644
index a6e37a05..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0247.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0248.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0248.bin
deleted file mode 100644
index 084d44d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0248.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0249.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0249.bin
deleted file mode 100644
index 5c6d187c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0249.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0250.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0250.bin
deleted file mode 100644
index 558758d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0250.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0251.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0251.bin
deleted file mode 100644
index 8ace642..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0251.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0252.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0252.bin
deleted file mode 100644
index 9976ddd..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0252.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0253.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0253.bin
deleted file mode 100644
index 1c8b94f..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0253.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0254.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0254.bin
deleted file mode 100644
index 11e7b415f..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0254.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0255.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0255.bin
deleted file mode 100644
index b19711d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0255.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0256.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0256.bin
deleted file mode 100644
index e2835ff..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0256.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0257.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0257.bin
deleted file mode 100644
index 4a8b194c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0257.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0258.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0258.bin
deleted file mode 100644
index 373e3104..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0258.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0259.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0259.bin
deleted file mode 100644
index 508a701..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0259.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0260.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0260.bin
deleted file mode 100644
index 7c1692b..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0260.bin
+++ /dev/null
@@ -1 +0,0 @@
-NááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááTLMTLM
\ No newline at end of file
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0261.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0261.bin
deleted file mode 100644
index 188eb32..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0261.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0262.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0262.bin
deleted file mode 100644
index aa8587d02..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0262.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0263.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0263.bin
deleted file mode 100644
index 46418dc..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0263.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0264.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0264.bin
deleted file mode 100644
index 50a9ba2c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0264.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0265.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0265.bin
deleted file mode 100644
index 8a2dbbd4..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0265.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0266.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0266.bin
deleted file mode 100644
index e0c66139..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0266.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0267.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0267.bin
deleted file mode 100644
index e62d1d5..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0267.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0268.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0268.bin
deleted file mode 100644
index b9c13fcd7..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0268.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0269.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0269.bin
deleted file mode 100644
index 8fc96c1c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0269.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0270.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0270.bin
deleted file mode 100644
index 2777fb3..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0270.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0271.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0271.bin
deleted file mode 100644
index 508f0344..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0271.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0272.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0272.bin
deleted file mode 100644
index ba3d348..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0272.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0273.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0273.bin
deleted file mode 100644
index f3b6d04..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0273.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0274.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0274.bin
deleted file mode 100644
index 03ebbda7..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0274.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0275.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0275.bin
deleted file mode 100644
index f9518471..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0275.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0276.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0276.bin
deleted file mode 100644
index e8d6d96cd..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0276.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0277.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0277.bin
deleted file mode 100644
index a20d91d..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0277.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0278.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0278.bin
deleted file mode 100644
index fe5a9732..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0278.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0279.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0279.bin
deleted file mode 100644
index acbac321..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0279.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0280.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0280.bin
deleted file mode 100644
index c5ec44a..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0280.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0281.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0281.bin
deleted file mode 100644
index 76d5cb773..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0281.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0282.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0282.bin
deleted file mode 100644
index 06228e9..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0282.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0283.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0283.bin
deleted file mode 100644
index 71e55dd..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0283.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0284.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0284.bin
deleted file mode 100644
index 495629f..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0284.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0285.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0285.bin
deleted file mode 100644
index 3caf33c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0285.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0286.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0286.bin
deleted file mode 100644
index d251b2a..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0286.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0287.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0287.bin
deleted file mode 100644
index 6f6a5f1f..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0287.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0288.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0288.bin
deleted file mode 100644
index 07bed6b4..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0288.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0289.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0289.bin
deleted file mode 100644
index b6ccccf..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0289.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0290.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0290.bin
deleted file mode 100644
index 487c5e4..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0290.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0291.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0291.bin
deleted file mode 100644
index 2e0cb65..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0291.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0292.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0292.bin
deleted file mode 100644
index 687ae92..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0292.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0293.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0293.bin
deleted file mode 100644
index b3433a7..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0293.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0294.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0294.bin
deleted file mode 100644
index b70f5b9..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0294.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0295.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0295.bin
deleted file mode 100644
index bad3311..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0295.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0296.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0296.bin
deleted file mode 100644
index cacebbe..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0296.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0297.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0297.bin
deleted file mode 100644
index ca7c259..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0297.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0298.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0298.bin
deleted file mode 100644
index 68decb3..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0298.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0299.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0299.bin
deleted file mode 100644
index 5668a23ab..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0299.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0300.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0300.bin
deleted file mode 100644
index 4227ca4..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0300.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0301.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0301.bin
deleted file mode 100644
index 8c05a65..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0301.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0302.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0302.bin
deleted file mode 100644
index b3719eb3..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0302.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0303.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0303.bin
deleted file mode 100644
index 5746787..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0303.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0304.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0304.bin
deleted file mode 100644
index 28c4a85..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0304.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0305.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0305.bin
deleted file mode 100644
index f9cd719..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/generated_challenge_0305.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge.bin
deleted file mode 100644
index bbe0118f..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_no_ss.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_no_ss.bin
deleted file mode 100644
index e3cb357..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_no_ss.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_no_unicode.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_no_unicode.bin
deleted file mode 100644
index f7398628..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_no_unicode.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_target_name_len_overflow.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_target_name_len_overflow.bin
deleted file mode 100644
index 568c63c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_target_name_len_overflow.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_target_name_len_overflow2.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_target_name_len_overflow2.bin
deleted file mode 100644
index ad4fea0..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_target_name_len_overflow2.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_target_name_offset_overflow.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_target_name_offset_overflow.bin
deleted file mode 100644
index 338099c..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_target_name_offset_overflow.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_with_target_name.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_with_target_name.bin
deleted file mode 100644
index 24b02fc..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_with_target_name.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_wrong_message_type.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_wrong_message_type.bin
deleted file mode 100644
index 2ec29f6..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_wrong_message_type.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_wrong_signature.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_wrong_signature.bin
deleted file mode 100644
index 67ad5ee7..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_wrong_signature.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_zero_target_name_offset.bin b/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_zero_target_name_offset.bin
deleted file mode 100644
index 5e832b9..0000000
--- a/net/data/fuzzer_data/ntlm_client_fuzzer/min_challenge_zero_target_name_offset.bin
+++ /dev/null
Binary files differ
diff --git a/net/data/fuzzer_dictionaries/net_ntlm_ntlm_client_fuzzer.dict b/net/data/fuzzer_dictionaries/net_ntlm_ntlm_client_fuzzer.dict
deleted file mode 100644
index 93b46b43..0000000
--- a/net/data/fuzzer_dictionaries/net_ntlm_ntlm_client_fuzzer.dict
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Signature
-"NTLMSSP\x00"
-
-# Message Types
-"\x01\x00\x00\x00"
-"\x02\x00\x00\x00"
-"\x03\x00\x00\x00"
-
-# Common Target Name offset
-"\x20\x00\x00\x00"
-
-# Useful security buffer lengths to match "Server"
-"\x06\x00"
-"\x0c\x00"
-
-# Common\interesting flag values
-"\x07\x82\x08\x00"
-"\x06\x82\x08\x00"
-"\x07\x82\x00\x00"
-"\x06\x82\x00\x00"
-"\x01\x00\x08\x00"
-"\x02\x00\x08\x00"
-"\x03\x00\x08\x00"
-"\x01\x00\x00\x00"
-"\x02\x00\x00\x00"
-"\x03\x00\x00\x00"
-"\x08\x00"
-"\x00\x00"
-
-# Target Names
-"Server"
-"S\x00e\x00r\x00v\x00e\x00r\x00"
\ No newline at end of file
diff --git a/net/data/parse_certificate_unittest/serial_37_bytes.pem b/net/data/parse_certificate_unittest/serial_37_bytes.pem
index 201b605..766f6b3 100644
--- a/net/data/parse_certificate_unittest/serial_37_bytes.pem
+++ b/net/data/parse_certificate_unittest/serial_37_bytes.pem
@@ -12,9 +12,10 @@
 MIICdDCCAd2gAwIBAgIlAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4XDTE0MDQyMzIwNTA0MFoXDTE3MDQyMjIwNTA0MFowRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2CvIpjLkYv9N89CtWYtFp73xR78JWHsivTWulyWGlKCAwLQfdpFnRjHQEIS3Ih5wI5FyyOlteTqFd4APxJUWdcVKcUzIYz+j8mOcKk+a+svBcW4ohSigJx5lHK4H1VtvLUPtK5CxjK8kba7pFzoFwb+4HK5lOxtYwtmu1qpniPECAwEAAaNQME4wHQYDVR0OBBYEFIt11azLCL4OH2W3+la+bKd12oWvMB8GA1UdIwQYMBaAFIt11azLCL4OH2W3+la+bKd12oWvMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAO+h4bZXWPWr3ExksG8KIriKr9I0y9XxxZ88t0RzCw4fi6b6JXOQ0q0iRwj+VritHniV4a0+aEKRy/c/3AgywCgikWuLldH4RHTlgaskfafMuYybcnu9regrhVFeYqnKReAR+H49lTR8LEqycJA+EFBpVLR+78J0JsghcWTJlgCY=
 -----END CERTIFICATE-----
 
-ERROR: Invalid serial number
+ERROR: Serial number is longer than 20 octets
+  length: 37
 ERROR: Failed parsing TBSCertificate
 
 -----BEGIN ERRORS-----
-RVJST1I6IEludmFsaWQgc2VyaWFsIG51bWJlcgpFUlJPUjogRmFpbGVkIHBhcnNpbmcgVEJTQ2VydGlmaWNhdGUK
+RVJST1I6IFNlcmlhbCBudW1iZXIgaXMgbG9uZ2VyIHRoYW4gMjAgb2N0ZXRzCiAgbGVuZ3RoOiAzNwpFUlJPUjogRmFpbGVkIHBhcnNpbmcgVEJTQ2VydGlmaWNhdGUK
 -----END ERRORS-----
diff --git a/net/data/parse_certificate_unittest/serial_negative.pem b/net/data/parse_certificate_unittest/serial_negative.pem
index 1570ab2..6192ada 100644
--- a/net/data/parse_certificate_unittest/serial_negative.pem
+++ b/net/data/parse_certificate_unittest/serial_negative.pem
@@ -10,3 +10,9 @@
 -----BEGIN CERTIFICATE-----
 MIICUTCCAbqgAwIBAgICgAEwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0xNDA0MjMyMDUwNDBaFw0xNzA0MjIyMDUwNDBaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANgryKYy5GL/TfPQrVmLRae98Ue/CVh7Ir01rpclhpSggMC0H3aRZ0Yx0BCEtyIecCORcsjpbXk6hXeAD8SVFnXFSnFMyGM/o/JjnCpPmvrLwXFuKIUooCceZRyuB9Vbby1D7SuQsYyvJG2u6Rc6BcG/uByuZTsbWMLZrtaqZ4jxAgMBAAGjUDBOMB0GA1UdDgQWBBSLddWsywi+Dh9lt/pWvmynddqFrzAfBgNVHSMEGDAWgBSLddWsywi+Dh9lt/pWvmynddqFrzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBADvoeG2V1j1q9xMZLBvCiK4iq/SNMvV8cWfPLdEcwsOH4um+iVzkNKtIkcI/la4rR54leGtPmhCkcv3P9wIMsAoIpFri5XR+ER05YGrJH2nzLmMm3J7va3oK4VRXmKpykXgEfh+PZU0fCxKsnCQPhBQaVS0fu/CdCbIIXFkyZYAm
 -----END CERTIFICATE-----
+
+WARNING: Serial number is negative
+
+-----BEGIN ERRORS-----
+V0FSTklORzogU2VyaWFsIG51bWJlciBpcyBuZWdhdGl2ZQo=
+-----END ERRORS-----
\ No newline at end of file
diff --git a/net/data/parse_certificate_unittest/serial_not_minimal.pem b/net/data/parse_certificate_unittest/serial_not_minimal.pem
new file mode 100644
index 0000000..b70ad81b
--- /dev/null
+++ b/net/data/parse_certificate_unittest/serial_not_minimal.pem
@@ -0,0 +1,19 @@
+This cert has an invalid serial number, as it is a non-minimal DER encoding of 1.
+
+The certificate data can be updated/regenerated with the
+net/data/parse_certificate_unittest/regenerate_pem_from_ascii.py script.
+
+#-----BEGIN SERIAL-----
+    INTEGER {`0001`}
+#-----END SERIAL-----
+
+-----BEGIN CERTIFICATE-----
+MIICUTCCAbqgAwIBAgICAAEwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0xNDA0MjMyMDUwNDBaFw0xNzA0MjIyMDUwNDBaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANgryKYy5GL/TfPQrVmLRae98Ue/CVh7Ir01rpclhpSggMC0H3aRZ0Yx0BCEtyIecCORcsjpbXk6hXeAD8SVFnXFSnFMyGM/o/JjnCpPmvrLwXFuKIUooCceZRyuB9Vbby1D7SuQsYyvJG2u6Rc6BcG/uByuZTsbWMLZrtaqZ4jxAgMBAAGjUDBOMB0GA1UdDgQWBBSLddWsywi+Dh9lt/pWvmynddqFrzAfBgNVHSMEGDAWgBSLddWsywi+Dh9lt/pWvmynddqFrzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBADvoeG2V1j1q9xMZLBvCiK4iq/SNMvV8cWfPLdEcwsOH4um+iVzkNKtIkcI/la4rR54leGtPmhCkcv3P9wIMsAoIpFri5XR+ER05YGrJH2nzLmMm3J7va3oK4VRXmKpykXgEfh+PZU0fCxKsnCQPhBQaVS0fu/CdCbIIXFkyZYAm
+-----END CERTIFICATE-----
+
+ERROR: Serial number is not a valid INTEGER
+ERROR: Failed parsing TBSCertificate
+
+-----BEGIN ERRORS-----
+RVJST1I6IFNlcmlhbCBudW1iZXIgaXMgbm90IGEgdmFsaWQgSU5URUdFUgpFUlJPUjogRmFpbGVkIHBhcnNpbmcgVEJTQ2VydGlmaWNhdGUK
+-----END ERRORS-----
diff --git a/net/data/parse_certificate_unittest/serial_not_number.pem b/net/data/parse_certificate_unittest/serial_not_number.pem
new file mode 100644
index 0000000..fcdd90e
--- /dev/null
+++ b/net/data/parse_certificate_unittest/serial_not_number.pem
@@ -0,0 +1,19 @@
+This cert has an invalid serial number - it is NULL rather than being an INTEGER.
+
+The certificate data can be updated/regenerated with the
+net/data/parse_certificate_unittest/regenerate_pem_from_ascii.py script.
+
+#-----BEGIN SERIAL-----
+    NULL {}
+#-----END SERIAL-----
+
+-----BEGIN CERTIFICATE-----
+MIICTzCCAbigAwIBAgUAMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTQwNDIzMjA1MDQwWhcNMTcwNDIyMjA1MDQwWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYK8imMuRi/03z0K1Zi0WnvfFHvwlYeyK9Na6XJYaUoIDAtB92kWdGMdAQhLciHnAjkXLI6W15OoV3gA/ElRZ1xUpxTMhjP6PyY5wqT5r6y8FxbiiFKKAnHmUcrgfVW28tQ+0rkLGMryRtrukXOgXBv7gcrmU7G1jC2a7WqmeI8QIDAQABo1AwTjAdBgNVHQ4EFgQUi3XVrMsIvg4fZbf6Vr5sp3Xaha8wHwYDVR0jBBgwFoAUi3XVrMsIvg4fZbf6Vr5sp3Xaha8wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQA76HhtldY9avcTGSwbwoiuIqv0jTL1fHFnzy3RHMLDh+Lpvolc5DSrSJHCP5WuK0eeJXhrT5oQpHL9z/cCDLAKCKRa4uV0fhEdOWBqyR9p8y5jJtye72t6CuFUV5iqcpF4BH4fj2VNHwsSrJwkD4QUGlUtH7vwnQmyCFxZMmWAJg==
+-----END CERTIFICATE-----
+
+ERROR: Failed reading serialNumber
+ERROR: Failed parsing TBSCertificate
+
+-----BEGIN ERRORS-----
+RVJST1I6IEZhaWxlZCByZWFkaW5nIHNlcmlhbE51bWJlcgpFUlJPUjogRmFpbGVkIHBhcnNpbmcgVEJTQ2VydGlmaWNhdGUK
+-----END ERRORS-----
diff --git a/net/data/parse_certificate_unittest/serial_zero.pem b/net/data/parse_certificate_unittest/serial_zero.pem
new file mode 100644
index 0000000..0f29f23
--- /dev/null
+++ b/net/data/parse_certificate_unittest/serial_zero.pem
@@ -0,0 +1,19 @@
+This cert has an invalid serial number of 0. According to RFC 5280 serial
+numbers should be positive.
+
+The certificate data can be updated/regenerated with the
+net/data/parse_certificate_unittest/regenerate_pem_from_ascii.py script.
+
+#-----BEGIN SERIAL-----
+    INTEGER { `00` }
+#-----END SERIAL-----
+
+-----BEGIN CERTIFICATE-----
+MIICUDCCAbmgAwIBAgIBADANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4XDTE0MDQyMzIwNTA0MFoXDTE3MDQyMjIwNTA0MFowRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2CvIpjLkYv9N89CtWYtFp73xR78JWHsivTWulyWGlKCAwLQfdpFnRjHQEIS3Ih5wI5FyyOlteTqFd4APxJUWdcVKcUzIYz+j8mOcKk+a+svBcW4ohSigJx5lHK4H1VtvLUPtK5CxjK8kba7pFzoFwb+4HK5lOxtYwtmu1qpniPECAwEAAaNQME4wHQYDVR0OBBYEFIt11azLCL4OH2W3+la+bKd12oWvMB8GA1UdIwQYMBaAFIt11azLCL4OH2W3+la+bKd12oWvMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAO+h4bZXWPWr3ExksG8KIriKr9I0y9XxxZ88t0RzCw4fi6b6JXOQ0q0iRwj+VritHniV4a0+aEKRy/c/3AgywCgikWuLldH4RHTlgaskfafMuYybcnu9regrhVFeYqnKReAR+H49lTR8LEqycJA+EFBpVLR+78J0JsghcWTJlgCY=
+-----END CERTIFICATE-----
+
+WARNING: Serial number is zero
+
+-----BEGIN ERRORS-----
+V0FSTklORzogU2VyaWFsIG51bWJlciBpcyB6ZXJvCg==
+-----END ERRORS-----
diff --git a/net/data/parse_certificate_unittest/serial_zero_padded_21_bytes.pem b/net/data/parse_certificate_unittest/serial_zero_padded_21_bytes.pem
index 209bb25d0..d90fd3f5 100644
--- a/net/data/parse_certificate_unittest/serial_zero_padded_21_bytes.pem
+++ b/net/data/parse_certificate_unittest/serial_zero_padded_21_bytes.pem
@@ -13,9 +13,10 @@
 MIICZDCCAc2gAwIBAgIVAIABAgMEBQYHCAkKCwwNDg8QERITMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTQwNDIzMjA1MDQwWhcNMTcwNDIyMjA1MDQwWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYK8imMuRi/03z0K1Zi0WnvfFHvwlYeyK9Na6XJYaUoIDAtB92kWdGMdAQhLciHnAjkXLI6W15OoV3gA/ElRZ1xUpxTMhjP6PyY5wqT5r6y8FxbiiFKKAnHmUcrgfVW28tQ+0rkLGMryRtrukXOgXBv7gcrmU7G1jC2a7WqmeI8QIDAQABo1AwTjAdBgNVHQ4EFgQUi3XVrMsIvg4fZbf6Vr5sp3Xaha8wHwYDVR0jBBgwFoAUi3XVrMsIvg4fZbf6Vr5sp3Xaha8wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQA76HhtldY9avcTGSwbwoiuIqv0jTL1fHFnzy3RHMLDh+Lpvolc5DSrSJHCP5WuK0eeJXhrT5oQpHL9z/cCDLAKCKRa4uV0fhEdOWBqyR9p8y5jJtye72t6CuFUV5iqcpF4BH4fj2VNHwsSrJwkD4QUGlUtH7vwnQmyCFxZMmWAJg==
 -----END CERTIFICATE-----
 
-ERROR: Invalid serial number
+ERROR: Serial number is longer than 20 octets
+  length: 21
 ERROR: Failed parsing TBSCertificate
 
 -----BEGIN ERRORS-----
-RVJST1I6IEludmFsaWQgc2VyaWFsIG51bWJlcgpFUlJPUjogRmFpbGVkIHBhcnNpbmcgVEJTQ2VydGlmaWNhdGUK
+RVJST1I6IFNlcmlhbCBudW1iZXIgaXMgbG9uZ2VyIHRoYW4gMjAgb2N0ZXRzCiAgbGVuZ3RoOiAyMQpFUlJPUjogRmFpbGVkIHBhcnNpbmcgVEJTQ2VydGlmaWNhdGUK
 -----END ERRORS-----
diff --git a/net/ntlm/ntlm_client.cc b/net/ntlm/ntlm_client.cc
deleted file mode 100644
index a2b8f54..0000000
--- a/net/ntlm/ntlm_client.cc
+++ /dev/null
@@ -1,253 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/ntlm/ntlm_client.h"
-
-#include <string.h>
-
-#include "base/logging.h"
-#include "base/strings/utf_string_conversions.h"
-#include "net/ntlm/ntlm.h"
-#include "net/ntlm/ntlm_buffer_reader.h"
-#include "net/ntlm/ntlm_buffer_writer.h"
-
-namespace net {
-namespace ntlm {
-
-namespace {
-// Parses the challenge message and returns the |challenge_flags| and
-// |server_challenge| into the supplied buffer.
-// |server_challenge| must contain at least 8 bytes.
-bool ParseChallengeMessage(const Buffer& challenge_message,
-                           NegotiateFlags* challenge_flags,
-                           uint8_t* server_challenge) {
-  NtlmBufferReader challenge_reader(challenge_message);
-
-  return challenge_reader.MatchMessageHeader(MessageType::kChallenge) &&
-         challenge_reader.SkipSecurityBufferWithValidation() &&
-         challenge_reader.ReadFlags(challenge_flags) &&
-         challenge_reader.ReadBytes(server_challenge, kChallengeLen);
-}
-
-bool WriteAuthenticateMessage(NtlmBufferWriter* authenticate_writer,
-                              SecurityBuffer lm_payload,
-                              SecurityBuffer ntlm_payload,
-                              SecurityBuffer domain_payload,
-                              SecurityBuffer username_payload,
-                              SecurityBuffer hostname_payload,
-                              NegotiateFlags authenticate_flags) {
-  return authenticate_writer->WriteMessageHeader(MessageType::kAuthenticate) &&
-         authenticate_writer->WriteSecurityBuffer(lm_payload) &&
-         authenticate_writer->WriteSecurityBuffer(ntlm_payload) &&
-         authenticate_writer->WriteSecurityBuffer(domain_payload) &&
-         authenticate_writer->WriteSecurityBuffer(username_payload) &&
-         authenticate_writer->WriteSecurityBuffer(hostname_payload) &&
-         authenticate_writer->WriteSecurityBuffer(
-             SecurityBuffer(kAuthenticateHeaderLenV1, 0)) &&
-         authenticate_writer->WriteFlags(authenticate_flags);
-}
-
-bool WriteResponsePayloads(NtlmBufferWriter* authenticate_writer,
-                           const uint8_t* lm_response,
-                           size_t lm_response_len,
-                           const uint8_t* ntlm_response,
-                           size_t ntlm_response_len) {
-  return authenticate_writer->WriteBytes(lm_response, lm_response_len) &&
-         authenticate_writer->WriteBytes(ntlm_response, ntlm_response_len);
-}
-
-bool WriteStringPayloads(NtlmBufferWriter* authenticate_writer,
-                         bool is_unicode,
-                         const base::string16& domain,
-                         const base::string16& username,
-                         const std::string& hostname) {
-  if (is_unicode) {
-    return authenticate_writer->WriteUtf16String(domain) &&
-           authenticate_writer->WriteUtf16String(username) &&
-           authenticate_writer->WriteUtf8AsUtf16String(hostname);
-  } else {
-    return authenticate_writer->WriteUtf16AsUtf8String(domain) &&
-           authenticate_writer->WriteUtf16AsUtf8String(username) &&
-           authenticate_writer->WriteUtf8String(hostname);
-  }
-}
-
-// Returns the size in bytes of a string16 depending whether unicode
-// was negotiated.
-size_t GetStringPayloadLength(const base::string16& str, bool is_unicode) {
-  if (is_unicode)
-    return str.length() * 2;
-
-  // When |WriteUtf16AsUtf8String| is called with a |base::string16|, the string
-  // is converted to UTF8. Do the conversion to ensure that the character
-  // count is correct.
-  return base::UTF16ToUTF8(str).length();
-}
-
-// Returns the size in bytes of a std::string depending whether unicode
-// was negotiated.
-size_t GetStringPayloadLength(const std::string& str, bool is_unicode) {
-  if (!is_unicode)
-    return str.length();
-
-  return base::UTF8ToUTF16(str).length() * 2;
-}
-
-}  // namespace
-
-NtlmClient::NtlmClient() : negotiate_flags_(kNegotiateMessageFlags) {
-  // Just generate the negotiate message once and hold on to it. It never
-  // changes and in a NTLMv2 it's used as an input
-  // to the Message Integrity Check in the Authenticate message.
-  GenerateNegotiateMessage();
-}
-
-NtlmClient::~NtlmClient() {}
-
-Buffer NtlmClient::GetNegotiateMessage() const {
-  return negotiate_message_;
-}
-
-void NtlmClient::GenerateNegotiateMessage() {
-  NtlmBufferWriter writer(kNegotiateMessageLen);
-  bool result =
-      writer.WriteMessageHeader(MessageType::kNegotiate) &&
-      writer.WriteFlags(negotiate_flags_) &&
-      writer.WriteSecurityBuffer(SecurityBuffer(kNegotiateMessageLen, 0)) &&
-      writer.WriteSecurityBuffer(SecurityBuffer(kNegotiateMessageLen, 0)) &&
-      writer.IsEndOfBuffer();
-
-  DCHECK(result);
-
-  negotiate_message_ = writer.Pass();
-}
-
-Buffer NtlmClient::GenerateAuthenticateMessage(
-    const base::string16& domain,
-    const base::string16& username,
-    const base::string16& password,
-    const std::string& hostname,
-    const uint8_t* client_challenge,
-    const Buffer& server_challenge_message) const {
-  // Limit the size of strings that are accepted. As an absolute limit any
-  // field represented by a |SecurityBuffer| or |AvPair| must be less than
-  // UINT16_MAX bytes long. The strings are restricted to the maximum sizes
-  // without regard to encoding. As such this isn't intended to restrict all
-  // invalid inputs, only to allow all possible valid inputs.
-  //
-  // |domain| and |hostname| can be no longer than 255 characters.
-  // |username| can be no longer than 104 characters. See [1].
-  // |password| can be no longer than 256 characters. See [2].
-  //
-  // [1] - https://technet.microsoft.com/en-us/library/bb726984.aspx
-  // [2] - https://technet.microsoft.com/en-us/library/cc512606.aspx
-  if (hostname.length() > kMaxFqdnLen || domain.length() > kMaxFqdnLen ||
-      username.length() > kMaxUsernameLen ||
-      password.length() > kMaxPasswordLen)
-    return Buffer();
-
-  NegotiateFlags challenge_flags;
-  uint8_t server_challenge[kChallengeLen];
-
-  // Read the flags and the server's random challenge from the challenge
-  // message.
-  if (!ParseChallengeMessage(server_challenge_message, &challenge_flags,
-                             server_challenge)) {
-    return Buffer();
-  }
-
-  // Calculate the responses for the authenticate message.
-  uint8_t lm_response[kResponseLenV1];
-  uint8_t ntlm_response[kResponseLenV1];
-
-  // Always use extended session security even if the server tries to downgrade.
-  NegotiateFlags authenticate_flags = (challenge_flags & negotiate_flags_) |
-                                      NegotiateFlags::kExtendedSessionSecurity;
-
-  // Generate the LM and NTLM responses.
-  GenerateResponsesV1WithSessionSecurity(
-      password, server_challenge, client_challenge, lm_response, ntlm_response);
-
-  // Calculate all the payload lengths and offsets.
-  bool is_unicode = (authenticate_flags & NegotiateFlags::kUnicode) ==
-                    NegotiateFlags::kUnicode;
-
-  SecurityBuffer lm_info;
-  SecurityBuffer ntlm_info;
-  SecurityBuffer domain_info;
-  SecurityBuffer username_info;
-  SecurityBuffer hostname_info;
-  size_t authenticate_message_len;
-  CalculatePayloadLayout(is_unicode, domain, username, hostname, &lm_info,
-                         &ntlm_info, &domain_info, &username_info,
-                         &hostname_info, &authenticate_message_len);
-
-  NtlmBufferWriter authenticate_writer(authenticate_message_len);
-  bool writer_result = WriteAuthenticateMessage(
-      &authenticate_writer, lm_info, ntlm_info, domain_info, username_info,
-      hostname_info, authenticate_flags);
-  DCHECK(writer_result);
-  DCHECK_EQ(authenticate_writer.GetCursor(), GetAuthenticateHeaderLength());
-
-  writer_result =
-      WriteResponsePayloads(&authenticate_writer, lm_response, lm_info.length,
-                            ntlm_response, ntlm_info.length);
-  DCHECK(writer_result);
-  DCHECK_EQ(authenticate_writer.GetCursor(), domain_info.offset);
-
-  writer_result = WriteStringPayloads(&authenticate_writer, is_unicode, domain,
-                                      username, hostname);
-  DCHECK(writer_result);
-  DCHECK(authenticate_writer.IsEndOfBuffer());
-  DCHECK_EQ(authenticate_message_len, authenticate_writer.GetLength());
-
-  return authenticate_writer.Pass();
-}
-
-void NtlmClient::CalculatePayloadLayout(
-    bool is_unicode,
-    const base::string16& domain,
-    const base::string16& username,
-    const std::string& hostname,
-    SecurityBuffer* lm_info,
-    SecurityBuffer* ntlm_info,
-    SecurityBuffer* domain_info,
-    SecurityBuffer* username_info,
-    SecurityBuffer* hostname_info,
-    size_t* authenticate_message_len) const {
-  size_t upto = GetAuthenticateHeaderLength();
-
-  lm_info->offset = upto;
-  lm_info->length = kResponseLenV1;
-  upto += lm_info->length;
-
-  ntlm_info->offset = upto;
-  ntlm_info->length = GetNtlmResponseLength();
-  upto += ntlm_info->length;
-
-  domain_info->offset = upto;
-  domain_info->length = GetStringPayloadLength(domain, is_unicode);
-  upto += domain_info->length;
-
-  username_info->offset = upto;
-  username_info->length = GetStringPayloadLength(username, is_unicode);
-  upto += username_info->length;
-
-  hostname_info->offset = upto;
-  hostname_info->length = GetStringPayloadLength(hostname, is_unicode);
-  upto += hostname_info->length;
-
-  *authenticate_message_len = upto;
-}
-
-size_t NtlmClient::GetAuthenticateHeaderLength() const {
-  return kAuthenticateHeaderLenV1;
-}
-
-size_t NtlmClient::GetNtlmResponseLength() const {
-  return kResponseLenV1;
-}
-
-}  // namespace ntlm
-}  // namespace net
\ No newline at end of file
diff --git a/net/ntlm/ntlm_client.h b/net/ntlm/ntlm_client.h
deleted file mode 100644
index 94dd8c9..0000000
--- a/net/ntlm/ntlm_client.h
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Based on [MS-NLMP]: NT LAN Manager (NTLM) Authentication Protocol
-// Specification version 28.0 [1]. Additional NTLM reference [2].
-//
-// [1] https://msdn.microsoft.com/en-us/library/cc236621.aspx
-// [2] http://davenport.sourceforge.net/ntlm.html
-
-#ifndef NET_BASE_NTLM_CLIENT_H_
-#define NET_BASE_NTLM_CLIENT_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <memory>
-#include <string>
-
-#include "base/strings/string16.h"
-#include "base/strings/string_piece.h"
-#include "net/base/net_export.h"
-#include "net/ntlm/ntlm_constants.h"
-
-namespace net {
-namespace ntlm {
-
-// Provides an implementation of an NTLMv1 Client.
-//
-// The implementation supports NTLMv1 with extended session security (NTLM2).
-class NET_EXPORT_PRIVATE NtlmClient {
- public:
-  NtlmClient();
-  ~NtlmClient();
-
-  // Returns a |Buffer| containing the Negotiate message.
-  Buffer GetNegotiateMessage() const;
-
-  // Returns a |Buffer| containing the Authenticate message. If the method
-  // fails an empty |Buffer| is returned.
-  //
-  // |hostname| can be a short NetBIOS name or an FQDN, however the server will
-  // only inspect this field if the default domain policy is to restrict NTLM.
-  // In this case the hostname will be compared to a whitelist stored in this
-  // group policy [1].
-  // |client_challenge| must contain 8 bytes of random data.
-  // |server_challenge_message| is the full content of the challenge message
-  // sent by the server.
-  //
-  // [1] - https://technet.microsoft.com/en-us/library/jj852267(v=ws.11).aspx
-  Buffer GenerateAuthenticateMessage(
-      const base::string16& domain,
-      const base::string16& username,
-      const base::string16& password,
-      const std::string& hostname,
-      const uint8_t* client_challenge,
-      const Buffer& server_challenge_message) const;
-
- private:
-  // Calculates the lengths and offset for all the payloads in the message.
-  void CalculatePayloadLayout(bool is_unicode,
-                              const base::string16& domain,
-                              const base::string16& username,
-                              const std::string& hostname,
-                              SecurityBuffer* lm_info,
-                              SecurityBuffer* ntlm_info,
-                              SecurityBuffer* domain_info,
-                              SecurityBuffer* username_info,
-                              SecurityBuffer* hostname_info,
-                              size_t* authenticate_message_len) const;
-
-  // Returns the length of the header part of the Authenticate message.
-  // NOTE: When NTLMv2 support is added this is no longer a fixed value.
-  size_t GetAuthenticateHeaderLength() const;
-
-  // Returns the length of the NTLM response.
-  // NOTE: When NTLMv2 support is added this is no longer a fixed value.
-  size_t GetNtlmResponseLength() const;
-
-  // Generates the negotiate message (which is always the same) into
-  // |negotiate_message_|.
-  void GenerateNegotiateMessage();
-
-  NegotiateFlags negotiate_flags_;
-  Buffer negotiate_message_;
-
-  DISALLOW_COPY_AND_ASSIGN(NtlmClient);
-};
-
-}  // namespace ntlm
-}  // namespace net
-
-#endif  // NET_BASE_NTLM_CLIENT_H_
\ No newline at end of file
diff --git a/net/ntlm/ntlm_client_fuzzer.cc b/net/ntlm/ntlm_client_fuzzer.cc
deleted file mode 100644
index e937f69..0000000
--- a/net/ntlm/ntlm_client_fuzzer.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "base/test/fuzzed_data_provider.h"
-#include "net/ntlm/ntlm_client.h"
-#include "net/ntlm/ntlm_test_data.h"
-
-base::string16 ConsumeRandomLengthString16(
-    base::FuzzedDataProvider& data_provider,
-    size_t max_chars) {
-  std::string bytes = data_provider.ConsumeRandomLengthString(max_chars * 2);
-  return base::string16(reinterpret_cast<const base::char16*>(bytes.data()),
-                        bytes.size() / 2);
-}
-
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  net::ntlm::NtlmClient client;
-
-  // Generate the input strings and challenge message. The strings will have a
-  // maximum length 1 character longer than the maximum that |NtlmClient| will
-  // accept to allow exploring the error cases.
-  base::FuzzedDataProvider fdp(data, size);
-  base::string16 domain =
-      ConsumeRandomLengthString16(fdp, net::ntlm::kMaxFqdnLen + 1);
-  base::string16 username =
-      ConsumeRandomLengthString16(fdp, net::ntlm::kMaxUsernameLen + 1);
-  base::string16 password =
-      ConsumeRandomLengthString16(fdp, net::ntlm::kMaxPasswordLen + 1);
-  std::string hostname =
-      fdp.ConsumeRandomLengthString(net::ntlm::kMaxFqdnLen + 1);
-  std::string challenge_msg_bytes = fdp.ConsumeRemainingBytes();
-
-  client.GenerateAuthenticateMessage(
-      domain, username, password, hostname, net::ntlm::test::kClientChallenge,
-      net::ntlm::Buffer(
-          reinterpret_cast<const uint8_t*>(challenge_msg_bytes.data()),
-          challenge_msg_bytes.size()));
-  return 0;
-}
\ No newline at end of file
diff --git a/net/ntlm/ntlm_client_unittest.cc b/net/ntlm/ntlm_client_unittest.cc
deleted file mode 100644
index b67c35c..0000000
--- a/net/ntlm/ntlm_client_unittest.cc
+++ /dev/null
@@ -1,369 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/ntlm/ntlm_client.h"
-
-#include <string>
-
-#include "build/build_config.h"
-#include "net/ntlm/ntlm.h"
-#include "net/ntlm/ntlm_buffer_reader.h"
-#include "net/ntlm/ntlm_buffer_writer.h"
-#include "net/ntlm/ntlm_test_data.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace net {
-namespace ntlm {
-
-namespace {
-
-Buffer GenerateAuthMsg(const NtlmClient& client, const Buffer& challenge_msg) {
-  return client.GenerateAuthenticateMessage(
-      test::kNtlmDomain, test::kUser, test::kPassword, test::kHostnameAscii,
-      test::kClientChallenge, challenge_msg);
-}
-
-Buffer GenerateAuthMsg(const NtlmClient& client,
-                       const uint8_t* challenge_msg,
-                       size_t challenge_msg_len) {
-  return GenerateAuthMsg(client, Buffer(challenge_msg, challenge_msg_len));
-}
-
-Buffer GenerateAuthMsg(const NtlmClient& client,
-                       const NtlmBufferWriter& challenge_writer) {
-  return GenerateAuthMsg(client, challenge_writer.GetBuffer());
-}
-
-bool GetAuthMsgResult(const NtlmClient& client,
-                      const NtlmBufferWriter& challenge_writer) {
-  return !GenerateAuthMsg(client, challenge_writer).empty();
-}
-
-bool ReadBytesPayload(NtlmBufferReader* reader, uint8_t* buffer, size_t len) {
-  SecurityBuffer sec_buf;
-  return reader->ReadSecurityBuffer(&sec_buf) && (sec_buf.length == len) &&
-         reader->ReadBytesFrom(sec_buf, buffer);
-}
-
-// Reads bytes from a payload and assigns them to a string. This makes
-// no assumptions about the underlying encoding.
-bool ReadStringPayload(NtlmBufferReader* reader, std::string* str) {
-  SecurityBuffer sec_buf;
-  if (!reader->ReadSecurityBuffer(&sec_buf))
-    return false;
-
-  std::unique_ptr<uint8_t[]> raw(new uint8_t[sec_buf.length]);
-  if (!reader->ReadBytesFrom(sec_buf, raw.get()))
-    return false;
-
-  str->assign(reinterpret_cast<const char*>(raw.get()), sec_buf.length);
-  return true;
-}
-
-// Reads bytes from a payload and assigns them to a string16. This makes
-// no assumptions about the underlying encoding. This will fail if there
-// are an odd number of bytes in the payload.
-bool ReadString16Payload(NtlmBufferReader* reader, base::string16* str) {
-  SecurityBuffer sec_buf;
-  if (!reader->ReadSecurityBuffer(&sec_buf) || (sec_buf.length % 2 != 0))
-    return false;
-
-  std::unique_ptr<uint8_t[]> raw(new uint8_t[sec_buf.length]);
-  if (!reader->ReadBytesFrom(sec_buf, raw.get()))
-    return false;
-
-#if defined(ARCH_CPU_BIG_ENDIAN)
-  for (size_t i = 0; i < sec_buf.length; i += 2) {
-    std::swap(raw.get()[i], raw.get()[i + 1]);
-  }
-#endif
-
-  str->assign(reinterpret_cast<const base::char16*>(raw.get()),
-              sec_buf.length / 2);
-  return true;
-}
-
-}  // namespace
-
-TEST(NtlmClientTest, VerifyNegotiateMessageV1) {
-  NtlmClient client;
-
-  Buffer result = client.GetNegotiateMessage();
-
-  ASSERT_EQ(kNegotiateMessageLen, result.size());
-  ASSERT_EQ(0, memcmp(test::kExpectedNegotiateMsg, result.data(),
-                      kNegotiateMessageLen));
-}
-
-TEST(NtlmClientTest, MinimalStructurallyValidChallenge) {
-  NtlmClient client;
-
-  NtlmBufferWriter writer(kMinChallengeHeaderLen);
-  ASSERT_TRUE(
-      writer.WriteBytes(test::kMinChallengeMessage, kMinChallengeHeaderLen));
-
-  ASSERT_TRUE(GetAuthMsgResult(client, writer));
-}
-
-TEST(NtlmClientTest, MinimalStructurallyValidChallengeZeroOffset) {
-  NtlmClient client;
-
-  // The spec (2.2.1.2) states that the length SHOULD be 0 and the offset
-  // SHOULD be where the payload would be if it was present. This is the
-  // expected response from a compliant server when no target name is sent.
-  // In reality the offset should always be ignored if the length is zero.
-  // Also implementations often just write zeros.
-  uint8_t raw[kMinChallengeHeaderLen];
-  memcpy(raw, test::kMinChallengeMessage, kMinChallengeHeaderLen);
-  // Modify the default valid message to overwrite the offset to zero.
-  ASSERT_NE(0x00, raw[16]);
-  raw[16] = 0x00;
-
-  NtlmBufferWriter writer(kMinChallengeHeaderLen);
-  ASSERT_TRUE(writer.WriteBytes(raw, arraysize(raw)));
-
-  ASSERT_TRUE(GetAuthMsgResult(client, writer));
-}
-
-TEST(NtlmClientTest, ChallengeMsgTooShort) {
-  NtlmClient client;
-
-  // Fail because the minimum size valid message is 32 bytes.
-  NtlmBufferWriter writer(kMinChallengeHeaderLen - 1);
-  ASSERT_TRUE(writer.WriteBytes(test::kMinChallengeMessage,
-                                kMinChallengeHeaderLen - 1));
-  ASSERT_FALSE(GetAuthMsgResult(client, writer));
-}
-
-TEST(NtlmClientTest, ChallengeMsgNoSig) {
-  NtlmClient client;
-
-  // Fail because the first 8 bytes don't match "NTLMSSP\0"
-  uint8_t raw[kMinChallengeHeaderLen];
-  memcpy(raw, test::kMinChallengeMessage, kMinChallengeHeaderLen);
-  // Modify the default valid message to overwrite the last byte of the
-  // signature.
-  ASSERT_NE(0xff, raw[7]);
-  raw[7] = 0xff;
-  NtlmBufferWriter writer(kMinChallengeHeaderLen);
-  ASSERT_TRUE(writer.WriteBytes(raw, arraysize(raw)));
-  ASSERT_FALSE(GetAuthMsgResult(client, writer));
-}
-
-TEST(NtlmClientTest, ChallengeMsgWrongMessageType) {
-  NtlmClient client;
-
-  // Fail because the message type should be MessageType::kChallenge
-  // (0x00000002)
-  uint8_t raw[kMinChallengeHeaderLen];
-  memcpy(raw, test::kMinChallengeMessage, kMinChallengeHeaderLen);
-  // Modify the message type.
-  ASSERT_NE(0x03, raw[8]);
-  raw[8] = 0x03;
-
-  NtlmBufferWriter writer(kMinChallengeHeaderLen);
-  ASSERT_TRUE(writer.WriteBytes(raw, arraysize(raw)));
-
-  ASSERT_FALSE(GetAuthMsgResult(client, writer));
-}
-
-TEST(NtlmClientTest, ChallengeWithNoTargetName) {
-  NtlmClient client;
-
-  // The spec (2.2.1.2) states that the length SHOULD be 0 and the offset
-  // SHOULD be where the payload would be if it was present. This is the
-  // expected response from a compliant server when no target name is sent.
-  // In reality the offset should always be ignored if the length is zero.
-  // Also implementations often just write zeros.
-  uint8_t raw[kMinChallengeHeaderLen];
-  memcpy(raw, test::kMinChallengeMessage, kMinChallengeHeaderLen);
-  // Modify the default valid message to overwrite the offset to zero.
-  ASSERT_NE(0x00, raw[16]);
-  raw[16] = 0x00;
-
-  NtlmBufferWriter writer(kMinChallengeHeaderLen);
-  ASSERT_TRUE(writer.WriteBytes(raw, arraysize(raw)));
-
-  ASSERT_TRUE(GetAuthMsgResult(client, writer));
-}
-
-TEST(NtlmClientTest, Type2MessageWithTargetName) {
-  NtlmClient client;
-
-  // One extra byte is provided for target name.
-  uint8_t raw[kMinChallengeHeaderLen + 1];
-  memcpy(raw, test::kMinChallengeMessage, kMinChallengeHeaderLen);
-  // Modify the default valid message to indicate 1 byte is present in the
-  // target name payload.
-  ASSERT_NE(0x01, raw[12]);
-  ASSERT_EQ(0x00, raw[13]);
-  ASSERT_NE(0x01, raw[14]);
-  ASSERT_EQ(0x00, raw[15]);
-  raw[12] = 0x01;
-  raw[14] = 0x01;
-  // Put something in the target name.
-  ASSERT_NE('Z', raw[32]);
-  raw[32] = 'Z';
-
-  NtlmBufferWriter writer(kChallengeHeaderLen + 1);
-  ASSERT_TRUE(writer.WriteBytes(raw, arraysize(raw)));
-
-  ASSERT_TRUE(GetAuthMsgResult(client, writer));
-}
-
-TEST(NtlmClientTest, NoTargetNameOverflowFromOffset) {
-  NtlmClient client;
-
-  uint8_t raw[kMinChallengeHeaderLen];
-  memcpy(raw, test::kMinChallengeMessage, kMinChallengeHeaderLen);
-  // Modify the default valid message to claim that the target name field is 1
-  // byte long overrunning the end of the message message.
-  ASSERT_NE(0x01, raw[12]);
-  ASSERT_EQ(0x00, raw[13]);
-  ASSERT_NE(0x01, raw[14]);
-  ASSERT_EQ(0x00, raw[15]);
-  raw[12] = 0x01;
-  raw[14] = 0x01;
-
-  NtlmBufferWriter writer(kMinChallengeHeaderLen);
-  ASSERT_TRUE(writer.WriteBytes(raw, arraysize(raw)));
-
-  // The above malformed message could cause an implementation to read outside
-  // the message buffer because the offset is past the end of the message.
-  // Verify it gets rejected.
-  ASSERT_FALSE(GetAuthMsgResult(client, writer));
-}
-
-TEST(NtlmClientTest, NoTargetNameOverflowFromLength) {
-  NtlmClient client;
-
-  // Message has 1 extra byte of space after the header for the target name.
-  // One extra byte is provided for target name.
-  uint8_t raw[kMinChallengeHeaderLen + 1];
-  memcpy(raw, test::kMinChallengeMessage, kMinChallengeHeaderLen);
-  // Modify the default valid message to indicate 2 bytes are present in the
-  // target name payload (however there is only space for 1).
-  ASSERT_NE(0x02, raw[12]);
-  ASSERT_EQ(0x00, raw[13]);
-  ASSERT_NE(0x02, raw[14]);
-  ASSERT_EQ(0x00, raw[15]);
-  raw[12] = 0x02;
-  raw[14] = 0x02;
-  // Put something in the target name.
-  ASSERT_NE('Z', raw[32]);
-  raw[32] = 'Z';
-
-  NtlmBufferWriter writer(kMinChallengeHeaderLen + 1);
-  ASSERT_TRUE(writer.WriteBytes(raw, arraysize(raw)));
-
-  // The above malformed message could cause an implementation
-  // to read outside the message buffer because the length is
-  // longer than available space. Verify it gets rejected.
-  ASSERT_FALSE(GetAuthMsgResult(client, writer));
-}
-
-TEST(NtlmClientTest, Type3UnicodeWithSessionSecuritySpecTest) {
-  NtlmClient client;
-
-  Buffer result = GenerateAuthMsg(client, test::kChallengeMsgV1,
-                                  arraysize(test::kChallengeMsgV1));
-
-  ASSERT_FALSE(result.empty());
-  ASSERT_EQ(arraysize(test::kExpectedAuthenticateMsgV1), result.size());
-  ASSERT_EQ(0, memcmp(test::kExpectedAuthenticateMsgV1, result.data(),
-                      result.size()));
-}
-
-TEST(NtlmClientTest, Type3WithoutUnicode) {
-  NtlmClient client;
-
-  Buffer result = GenerateAuthMsg(client, test::kMinChallengeMessageNoUnicode,
-                                  kMinChallengeHeaderLen);
-  ASSERT_FALSE(result.empty());
-
-  NtlmBufferReader reader(result);
-  ASSERT_TRUE(reader.MatchMessageHeader(MessageType::kAuthenticate));
-
-  // Read the LM and NTLM Response Payloads.
-  uint8_t actual_lm_response[kResponseLenV1];
-  uint8_t actual_ntlm_response[kResponseLenV1];
-
-  ASSERT_TRUE(ReadBytesPayload(&reader, actual_lm_response, kResponseLenV1));
-  ASSERT_TRUE(ReadBytesPayload(&reader, actual_ntlm_response, kResponseLenV1));
-
-  ASSERT_EQ(0, memcmp(test::kExpectedLmResponseWithV1SS, actual_lm_response,
-                      kResponseLenV1));
-  ASSERT_EQ(0, memcmp(test::kExpectedNtlmResponseWithV1SS, actual_ntlm_response,
-                      kResponseLenV1));
-
-  std::string domain;
-  std::string username;
-  std::string hostname;
-  ASSERT_TRUE(ReadStringPayload(&reader, &domain));
-  ASSERT_EQ(test::kNtlmDomainAscii, domain);
-  ASSERT_TRUE(ReadStringPayload(&reader, &username));
-  ASSERT_EQ(test::kUserAscii, username);
-  ASSERT_TRUE(ReadStringPayload(&reader, &hostname));
-  ASSERT_EQ(test::kHostnameAscii, hostname);
-
-  // The session key is not used in HTTP. Since NTLMSSP_NEGOTIATE_KEY_EXCH
-  // was not sent this is empty.
-  ASSERT_TRUE(reader.MatchEmptySecurityBuffer());
-
-  // Verify the unicode flag is not set and OEM flag is.
-  NegotiateFlags flags;
-  ASSERT_TRUE(reader.ReadFlags(&flags));
-  ASSERT_EQ(NegotiateFlags::kNone, flags & NegotiateFlags::kUnicode);
-  ASSERT_EQ(NegotiateFlags::kOem, flags & NegotiateFlags::kOem);
-}
-
-TEST(NtlmClientTest, ClientDoesNotDowngradeSessionSecurity) {
-  NtlmClient client;
-
-  Buffer result = GenerateAuthMsg(client, test::kMinChallengeMessageNoSS,
-                                  kMinChallengeHeaderLen);
-  ASSERT_FALSE(result.empty());
-
-  NtlmBufferReader reader(result);
-  ASSERT_TRUE(reader.MatchMessageHeader(MessageType::kAuthenticate));
-
-  // Read the LM and NTLM Response Payloads.
-  uint8_t actual_lm_response[kResponseLenV1];
-  uint8_t actual_ntlm_response[kResponseLenV1];
-
-  ASSERT_TRUE(ReadBytesPayload(&reader, actual_lm_response, kResponseLenV1));
-  ASSERT_TRUE(ReadBytesPayload(&reader, actual_ntlm_response, kResponseLenV1));
-
-  // The important part of this test is that even though the
-  // server told the client to drop session security. The client
-  // DID NOT drop it.
-  ASSERT_EQ(0, memcmp(test::kExpectedLmResponseWithV1SS, actual_lm_response,
-                      kResponseLenV1));
-  ASSERT_EQ(0, memcmp(test::kExpectedNtlmResponseWithV1SS, actual_ntlm_response,
-                      kResponseLenV1));
-
-  base::string16 domain;
-  base::string16 username;
-  base::string16 hostname;
-  ASSERT_TRUE(ReadString16Payload(&reader, &domain));
-  ASSERT_EQ(test::kNtlmDomain, domain);
-  ASSERT_TRUE(ReadString16Payload(&reader, &username));
-  ASSERT_EQ(test::kUser, username);
-  ASSERT_TRUE(ReadString16Payload(&reader, &hostname));
-  ASSERT_EQ(test::kHostname, hostname);
-
-  // The session key is not used in HTTP. Since NTLMSSP_NEGOTIATE_KEY_EXCH
-  // was not sent this is empty.
-  ASSERT_TRUE(reader.MatchEmptySecurityBuffer());
-
-  // Verify the unicode and session security flag is set.
-  NegotiateFlags flags;
-  ASSERT_TRUE(reader.ReadFlags(&flags));
-  ASSERT_EQ(NegotiateFlags::kUnicode, flags & NegotiateFlags::kUnicode);
-  ASSERT_EQ(NegotiateFlags::kExtendedSessionSecurity,
-            flags & NegotiateFlags::kExtendedSessionSecurity);
-}
-
-}  // namespace ntlm
-}  // namespace net
diff --git a/net/ntlm/ntlm_constants.h b/net/ntlm/ntlm_constants.h
index cebba53..53f69a6 100644
--- a/net/ntlm/ntlm_constants.h
+++ b/net/ntlm/ntlm_constants.h
@@ -38,7 +38,7 @@
 };
 
 // There are 3 types of messages in NTLM. The message type is a field in
-// every NTLM message header. See [MS-NLMP] Section 2.2.
+// every NTLM message header.
 enum class MessageType : uint32_t {
   kNegotiate = 0x01,
   kChallenge = 0x02,
@@ -78,15 +78,10 @@
 static constexpr size_t kSecurityBufferLen =
     (2 * sizeof(uint16_t)) + sizeof(uint32_t);
 static constexpr size_t kNegotiateMessageLen = 32;
-static constexpr size_t kMinChallengeHeaderLen = 32;
 static constexpr size_t kChallengeHeaderLen = 32;
 static constexpr size_t kResponseLenV1 = 24;
 static constexpr size_t kChallengeLen = 8;
 static constexpr size_t kNtlmHashLen = 16;
-static constexpr size_t kAuthenticateHeaderLenV1 = 64;
-static constexpr size_t kMaxFqdnLen = 255;
-static constexpr size_t kMaxUsernameLen = 104;
-static constexpr size_t kMaxPasswordLen = 256;
 
 static constexpr NegotiateFlags kNegotiateMessageFlags =
     NegotiateFlags::kUnicode | NegotiateFlags::kOem |
diff --git a/net/ntlm/ntlm_test_data.h b/net/ntlm/ntlm_test_data.h
index faabae92..2a9913b7 100644
--- a/net/ntlm/ntlm_test_data.h
+++ b/net/ntlm/ntlm_test_data.h
@@ -35,15 +35,6 @@
 constexpr uint8_t kClientChallenge[kChallengeLen] = {0xaa, 0xaa, 0xaa, 0xaa,
                                                      0xaa, 0xaa, 0xaa, 0xaa};
 
-// Test input defined in [MS-NLMP] Section 4.2.3.3.
-constexpr uint8_t kChallengeMsgV1[] = {
-    0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x00,
-    0x0c, 0x00, 0x0c, 0x00, 0x38, 0x00, 0x00, 0x00, 0x33, 0x82, 0x0a, 0x82,
-    0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x06, 0x00, 0x70, 0x17, 0x00, 0x00, 0x00, 0x0f, 0x53, 0x00, 0x65, 0x00,
-    0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00};
-
 // A minimal challenge message for tests. For NTLMv1 this implementation only
 // reads the smallest required version of the message (32 bytes). Some
 // servers may still send messages this small. The only relevant flags
@@ -63,20 +54,6 @@
     0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x07, 0x82,
     0x08, 0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef};
 
-// The same message as |kMinChallengeMessage| but with the
-// NTLMSSP_NEGOTIATE_UNICODE flag cleared.
-constexpr uint8_t kMinChallengeMessageNoUnicode[kChallengeHeaderLen] = {
-    'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0', 0x02, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x06, 0x82,
-    0x08, 0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef};
-
-// The same message as |kMinChallengeMessage| but with the
-// NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY flag cleared.
-constexpr uint8_t kMinChallengeMessageNoSS[kChallengeHeaderLen] = {
-    'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0', 0x02, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x07, 0x82,
-    0x00, 0x00, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef};
-
 // Test result value for NTOWFv1() defined in [MS-NLMP] Section 4.2.2.1.2.
 constexpr uint8_t kExpectedNtlmHashV1[kNtlmHashLen] = {
     0xa4, 0xf4, 0x9c, 0x40, 0x65, 0x10, 0xbd, 0xca,
@@ -97,80 +74,6 @@
     0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
 
-// Expected negotiate message from this implementation.
-// [0-7]    - "NTLMSSP\0"                       (Signature)
-// [9-11]   - |MessageType::NEGOTIATE|          (Message Type = 0x00000001)
-// [12-15]  - |NEGOTIATE_MESSAGE_FLAGS|         (Flags = 0x00088207)
-// [16-23]  - |SecBuf(kNegotiateMessageLen, 0)|(Domain)
-// [24-32]  - |SecBuf(kNegotiateMessageLen, 0)|(Workstation)
-//
-// NOTE: Message does not include Version field. Since
-// NTLMSSP_NEGOTIATE_VERSION is never sent, it is not required, and the server
-// won't try to read it. The field is currently omitted for test compatibility
-// with the existing implementation. When NTLMv2 is implemented this field
-// will be present for both NTLMv1 and NTLMv2, however it will always be set to
-// all zeros. The version field is only used for debugging and only defines
-// a mapping to Windows operating systems.
-//
-// Similarly both Domain and Workstation fields are are not strictly required
-// either (though are included here) since neither
-// NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED nor
-// NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED are ever sent. A compliant server
-// should never read past the 16th byte in this message.
-//
-// See [MS-NLMP] Section 2.2.2.5 for more detail on flags and 2.2.2.1 for the
-// Negotiate message in general.
-constexpr uint8_t kExpectedNegotiateMsg[kNegotiateMessageLen] = {
-    'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0', 0x01, 0x00, 0x00,
-    0x00, 0x07, 0x82, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00};
-
-// Expected V1 Authenticate message from this implementation when sent
-// |kChallengeMsgV1| as the challenge.
-//
-// [0-7]    - "NTLMSSP\0"                         (Signature)
-// [9-11]   - |MessageType::kAuthenticate|        (Message Type = 0x00000003)
-// [12-19]  - |SecBuf(64, RESPONSE_V1_LEN)|       (LM Response)
-// [20-27]  - |SecBuf(88, RESPONSE_V1_LEN)|       (NTLM Response)
-// [28-35]  - |SecBuf(112, 12)|                   (Target Name = L"Domain")
-// [36-43]  - |SecBuf(124, 8)|                    (User = L"User")
-// [44-51]  - |SecBuf(132, 16)|                   (Workstation = L"COMPUTER")
-// [52-59]  - |SecBuf(64, 0)|                     (Session Key (empty))
-// [60-63]  - 0x00088203                          (Flags)
-// [64-87]  - |EXPECTED_V1_WITH_SS_LM_RESPONSE|   (LM Response Payload)
-// [88-111] - |EXPECTED_V1_WITH_SS_NTLM_RESPONSE| (NTLM Response Payload)
-// [112-123]- L"Domain"                           (Target Name Payload)
-// [124-132]- L"User"                             (User Payload)
-// [132-147]- L"COMPUTER"                         (Workstation Payload)
-//
-// NOTE: This is not identical to the message in [MS-NLMP] Section 4.2.2.3 for
-// several reasons.
-//
-// 1) The flags are different because this implementation does not support
-// the flags related to version, key exchange, signing and sealing. These
-// flags are not relevant to implementing the NTLM scheme in HTTP.
-// 2) Since key exchange is not required nor supported, the session base key
-// payload is not required nor present.
-// 3) The specification allows payloads to be in any order. This (and the
-// prior) implementation uses a different payload order than the example.
-// 4) The version field is Windows specific and there is no provision for
-// non-Windows OS information. This message does not include a version field.
-constexpr uint8_t kExpectedAuthenticateMsgV1[] = {
-    'N',  'T',  'L',  'M',  'S',  'S',  'P',  '\0', 0x03, 0x00, 0x00, 0x00,
-    0x18, 0x00, 0x18, 0x00, 0x40, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00,
-    0x58, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x70, 0x00, 0x00, 0x00,
-    0x08, 0x00, 0x08, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00,
-    0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
-    0x03, 0x82, 0x08, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x75, 0x37, 0xf8, 0x03, 0xae, 0x36, 0x71, 0x28,
-    0xca, 0x45, 0x82, 0x04, 0xbd, 0xe7, 0xca, 0xf8, 0x1e, 0x97, 0xed, 0x26,
-    0x83, 0x26, 0x72, 0x32, 'D',  0x00, 'o',  0x00, 'm',  0x00, 'a',  0x00,
-    'i',  0x00, 'n',  0x00, 'U',  0x00, 's',  0x00, 'e',  0x00, 'r',  0x00,
-    'C',  0x00, 'O',  0x00, 'M',  0x00, 'P',  0x00, 'U',  0x00, 'T',  0x00,
-    'E',  0x00, 'R',  0x00,
-};
-
 }  // namespace test
 }  // namespace ntlm
 }  // namespace net
diff --git a/net/ntlm/ntlm_unittest.cc b/net/ntlm/ntlm_unittest.cc
index 6a2ce032..6c40d16a 100644
--- a/net/ntlm/ntlm_unittest.cc
+++ b/net/ntlm/ntlm_unittest.cc
@@ -13,9 +13,6 @@
 
 #include "net/ntlm/ntlm.h"
 
-#include <string>
-
-#include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
 #include "net/ntlm/ntlm_test_data.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -120,4 +117,4 @@
 }
 
 }  // namespace ntlm
-}  // namespace net
+}  // namespace net
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/MSANExpectations b/third_party/WebKit/LayoutTests/MSANExpectations
index cf7d6fef..c89dcdc 100644
--- a/third_party/WebKit/LayoutTests/MSANExpectations
+++ b/third_party/WebKit/LayoutTests/MSANExpectations
@@ -37,6 +37,9 @@
 crbug.com/462190 [ Linux ] inspector-protocol/heap-profiler/heap-snapshot-with-detached-dom-tree.js [ Timeout ]
 crbug.com/462190 [ Linux ] inspector-protocol/heap-profiler/heap-snapshot-with-event-listener.js [ Timeout ]
 
+crbug.com/751906 [ Linux ] http/tests/devtools/console/console-correct-suggestions.js [ Timeout Pass ]
+crbug.com/751906 [ Linux ] virtual/mojo-loading/http/tests/devtools/console/console-correct-suggestions.js [ Timeout Pass ]
+
 crbug.com/671556 [ Linux ] virtual/mojo-loading/http/tests/security/xssAuditor/report-script-tag-replace-state.html [ Timeout Pass ]
 crbug.com/671556 [ Linux ] virtual/mojo-loading/http/tests/security/xssAuditor/report-script-tag.html [ Timeout Pass ]
 
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 50f17b65..39704c5 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -3090,5 +3090,6 @@
 crbug.com/750310 [ Win7 Debug ] virtual/off-main-thread-fetch/http/tests/inspector/network/network-blocked-reason.html [ Timeout ]
 
 # Sheriff failures 2017-08-03
-crbug.com/751906 [ Linux Debug ] http/tests/devtools/console/console-correct-suggestions.js [ Timeout Pass ]
-crbug.com/751906 [ Linux Debug ] virtual/mojo-loading/http/tests/devtools/console/console-correct-suggestions.js [ Timeout Pass ]
+crbug.com/751906 http/tests/devtools/console/console-correct-suggestions.js [ Timeout Pass ]
+crbug.com/751906 virtual/mojo-loading/http/tests/devtools/console/console-correct-suggestions.js [ Timeout Pass ]
+crbug.com/751955 external/wpt/webusb/idlharness.https.html [ Timeout Pass ]
diff --git a/third_party/WebKit/Source/core/editing/Editor.cpp b/third_party/WebKit/Source/core/editing/Editor.cpp
index 4218697..13ade5d 100644
--- a/third_party/WebKit/Source/core/editing/Editor.cpp
+++ b/third_party/WebKit/Source/core/editing/Editor.cpp
@@ -1494,10 +1494,10 @@
   bool selection_did_not_change_dom_position =
       new_selection == GetFrame().Selection().GetSelectionInDOMTree();
   GetFrame().Selection().SetSelection(
-      SelectionInDOMTree::Builder(new_selection)
-          .SetIsHandleVisible(GetFrame().Selection().IsHandleVisible())
-          .Build(),
-      options);
+      new_selection,
+      SetSelectionData::Builder(options)
+          .SetShouldShowHandle(GetFrame().Selection().IsHandleVisible())
+          .Build());
 
   // Some editing operations change the selection visually without affecting its
   // position within the DOM. For example when you press return in the following
diff --git a/third_party/WebKit/Source/core/editing/FrameSelection.cpp b/third_party/WebKit/Source/core/editing/FrameSelection.cpp
index c17f52c4..e01b253 100644
--- a/third_party/WebKit/Source/core/editing/FrameSelection.cpp
+++ b/third_party/WebKit/Source/core/editing/FrameSelection.cpp
@@ -114,10 +114,6 @@
   return *LifecycleContext();
 }
 
-bool FrameSelection::IsHandleVisible() const {
-  return GetSelectionInDOMTree().IsHandleVisible();
-}
-
 const VisibleSelection& FrameSelection::ComputeVisibleSelectionInDOMTree()
     const {
   return selection_editor_->ComputeVisibleSelectionInDOMTree();
@@ -175,13 +171,13 @@
       VisiblePositionForContentsPoint(point, GetFrame());
   SelectionInDOMTree::Builder builder;
   builder.SetIsDirectional(GetSelectionInDOMTree().IsDirectional());
-  builder.SetIsHandleVisible(true);
   if (position.IsNotNull())
     builder.Collapse(position.ToPositionWithAffinity());
   SetSelection(builder.Build(), SetSelectionData::Builder()
                                     .SetShouldCloseTyping(true)
                                     .SetShouldClearTypingStyle(true)
                                     .SetSetSelectionBy(SetSelectionBy::kUser)
+                                    .SetShouldShowHandle(true)
                                     .Build());
 }
 
@@ -222,9 +218,13 @@
 
   const SelectionInDOMTree old_selection_in_dom_tree =
       selection_editor_->GetSelectionInDOMTree();
-  if (old_selection_in_dom_tree == new_selection)
+  const bool is_changed = old_selection_in_dom_tree != new_selection;
+  const bool should_show_handle = options.ShouldShowHandle();
+  if (!is_changed && is_handle_visible_ == should_show_handle)
     return false;
-  selection_editor_->SetSelection(new_selection);
+  if (is_changed)
+    selection_editor_->SetSelection(new_selection);
+  is_handle_visible_ = should_show_handle;
   ScheduleVisualUpdateForPaintInvalidationIfNeeded();
 
   const Document& current_document = GetDocument();
@@ -397,6 +397,7 @@
   if (granularity_strategy_)
     granularity_strategy_->Clear();
   SetSelection(SelectionInDOMTree());
+  is_handle_visible_ = false;
 }
 
 bool FrameSelection::SelectionHasFocus() const {
@@ -692,9 +693,11 @@
   }
 
   // TODO(editing-dev): Should we pass in set_selection_by?
-  SetSelection(SelectionInDOMTree::Builder()
-                   .SelectAllChildren(*root)
-                   .SetIsHandleVisible(IsHandleVisible())
+  SetSelection(SelectionInDOMTree::Builder().SelectAllChildren(*root).Build(),
+               SetSelectionData::Builder()
+                   .SetShouldCloseTyping(true)
+                   .SetShouldClearTypingStyle(true)
+                   .SetShouldShowHandle(IsHandleVisible())
                    .Build());
   SelectFrameElementInParentIfFullySelected();
   // TODO(editing-dev): Should we pass in set_selection_by?
@@ -1089,13 +1092,13 @@
   SetSelection(
       SelectionInDOMTree::Builder(
           GetGranularityStrategy()->UpdateExtent(contents_point, frame_))
-          .SetIsHandleVisible(true)
           .Build(),
       SetSelectionData::Builder()
           .SetShouldCloseTyping(true)
           .SetShouldClearTypingStyle(true)
           .SetDoNotClearStrategy(true)
           .SetSetSelectionBy(SetSelectionBy::kUser)
+          .SetShouldShowHandle(true)
           .Build());
 }
 
@@ -1110,7 +1113,6 @@
           .SetBaseAndExtentDeprecated(base_position.DeepEquivalent(),
                                       extent_position.DeepEquivalent())
           .SetAffinity(base_position.Affinity())
-          .SetIsHandleVisible(IsHandleVisible())
           .Build();
 
   if (new_selection.IsNone())
@@ -1130,11 +1132,11 @@
                              visible_selection.Start());
   }
   builder.SetAffinity(visible_selection.Affinity());
-  builder.SetIsHandleVisible(IsHandleVisible());
   SetSelection(builder.Build(), SetSelectionData::Builder()
                                     .SetShouldCloseTyping(true)
                                     .SetShouldClearTypingStyle(true)
                                     .SetGranularity(granularity)
+                                    .SetShouldShowHandle(IsHandleVisible())
                                     .Build());
 }
 
diff --git a/third_party/WebKit/Source/core/editing/FrameSelection.h b/third_party/WebKit/Source/core/editing/FrameSelection.h
index 74cc47f2..4b62ae75 100644
--- a/third_party/WebKit/Source/core/editing/FrameSelection.h
+++ b/third_party/WebKit/Source/core/editing/FrameSelection.h
@@ -177,7 +177,7 @@
 
   void SetUseSecureKeyboardEntryWhenActive(bool);
 
-  bool IsHandleVisible() const;
+  bool IsHandleVisible() const { return is_handle_visible_; }
 
   void UpdateSecureKeyboardEntryIfActive();
 
@@ -272,6 +272,7 @@
   LayoutUnit x_pos_for_vertical_arrow_navigation_;
 
   bool focused_ : 1;
+  bool is_handle_visible_ = false;
 
   // Controls text granularity used to adjust the selection's extent in
   // moveRangeSelectionExtent.
diff --git a/third_party/WebKit/Source/core/editing/FrameSelectionTest.cpp b/third_party/WebKit/Source/core/editing/FrameSelectionTest.cpp
index 7bd7407..262c94d 100644
--- a/third_party/WebKit/Source/core/editing/FrameSelectionTest.cpp
+++ b/third_party/WebKit/Source/core/editing/FrameSelectionTest.cpp
@@ -296,7 +296,6 @@
   const Position end_of_text(sample->firstChild(), 3);
   Selection().SetSelection(SelectionInDOMTree::Builder()
                                .Collapse(end_of_text)
-                               .SetIsHandleVisible(false)
                                .Build());
   EXPECT_FALSE(Selection().IsHandleVisible());
   Selection().SelectAll();
@@ -305,10 +304,13 @@
          "selectAll. Then they shouldn't be present "
          "after it.";
 
-  Selection().SetSelection(SelectionInDOMTree::Builder()
-                               .Collapse(end_of_text)
-                               .SetIsHandleVisible(true)
-                               .Build());
+  Selection().SetSelection(
+      SelectionInDOMTree::Builder().Collapse(end_of_text).Build(),
+      SetSelectionData::Builder()
+          .SetShouldCloseTyping(true)
+          .SetShouldClearTypingStyle(true)
+          .SetShouldShowHandle(true)
+          .Build());
   EXPECT_TRUE(Selection().IsHandleVisible());
   Selection().SelectAll();
   EXPECT_TRUE(Selection().IsHandleVisible())
@@ -323,7 +325,6 @@
   const Position end_of_text(sample->firstChild(), 3);
   Selection().SetSelection(SelectionInDOMTree::Builder()
                                .Collapse(end_of_text)
-                               .SetIsHandleVisible(false)
                                .Build());
   EXPECT_FALSE(Selection().IsHandleVisible());
   Selection().SelectAll();
@@ -333,10 +334,13 @@
          "bold command. Then they shouldn't "
          "be present after it.";
 
-  Selection().SetSelection(SelectionInDOMTree::Builder()
-                               .Collapse(end_of_text)
-                               .SetIsHandleVisible(true)
-                               .Build());
+  Selection().SetSelection(
+      SelectionInDOMTree::Builder().Collapse(end_of_text).Build(),
+      SetSelectionData::Builder()
+          .SetShouldCloseTyping(true)
+          .SetShouldClearTypingStyle(true)
+          .SetShouldShowHandle(true)
+          .Build());
   EXPECT_TRUE(Selection().IsHandleVisible());
   Selection().SelectAll();
   GetDocument().execCommand("bold", false, "", ASSERT_NO_EXCEPTION);
@@ -352,7 +356,6 @@
   Selection().SetSelection(
       SelectionInDOMTree::Builder()
           .SetBaseAndExtent(Position(text, 0), Position(text, 5))
-          .SetIsHandleVisible(false)
           .Build());
 
   Selection().SetSelection(SelectionInDOMTree::Builder()
@@ -367,7 +370,11 @@
   Selection().SetSelection(
       SelectionInDOMTree::Builder()
           .SetBaseAndExtent(Position(text, 0), Position(text, 5))
-          .SetIsHandleVisible(true)
+          .Build(),
+      SetSelectionData::Builder()
+          .SetShouldCloseTyping(true)
+          .SetShouldClearTypingStyle(true)
+          .SetShouldShowHandle(true)
           .Build());
 
   Selection().SetSelection(SelectionInDOMTree::Builder()
diff --git a/third_party/WebKit/Source/core/editing/GranularityStrategyTest.cpp b/third_party/WebKit/Source/core/editing/GranularityStrategyTest.cpp
index b7d8198..d1bd239 100644
--- a/third_party/WebKit/Source/core/editing/GranularityStrategyTest.cpp
+++ b/third_party/WebKit/Source/core/editing/GranularityStrategyTest.cpp
@@ -725,9 +725,13 @@
       SelectionInDOMTree::Builder()
           .Collapse(Position(sample->firstChild(), 2))
           .SetIsDirectional(true)
-          .SetIsHandleVisible(true)
           .Build();
-  Selection().SetSelection(selection_in_dom_tree);
+  Selection().SetSelection(selection_in_dom_tree,
+                           SetSelectionData::Builder()
+                               .SetShouldCloseTyping(true)
+                               .SetShouldClearTypingStyle(true)
+                               .SetShouldShowHandle(true)
+                               .Build());
 
   // Since, it is not obvious that |visiblePositionForContentsPoint()| returns
   // null position, we verify here.
@@ -757,9 +761,13 @@
       SelectionInDOMTree::Builder()
           .Collapse(Position(sample->firstChild(), 2))
           .SetIsDirectional(true)
-          .SetIsHandleVisible(true)
           .Build();
-  Selection().SetSelection(selection_in_dom_tree);
+  Selection().SetSelection(selection_in_dom_tree,
+                           SetSelectionData::Builder()
+                               .SetShouldCloseTyping(true)
+                               .SetShouldClearTypingStyle(true)
+                               .SetShouldShowHandle(true)
+                               .Build());
 
   // Since, it is not obvious that |visiblePositionForContentsPoint()| returns
   // null position, we verify here.
diff --git a/third_party/WebKit/Source/core/editing/InputMethodController.cpp b/third_party/WebKit/Source/core/editing/InputMethodController.cpp
index 0026b50..2c313f9 100644
--- a/third_party/WebKit/Source/core/editing/InputMethodController.cpp
+++ b/third_party/WebKit/Source/core/editing/InputMethodController.cpp
@@ -394,11 +394,12 @@
     const SelectionInDOMTree& selection =
         SelectionInDOMTree::Builder()
             .SetBaseAndExtent(old_selection_range)
-            .SetIsHandleVisible(is_handle_visible)
             .Build();
     GetFrame().Selection().SetSelection(
-        selection,
-        SetSelectionData::Builder().SetShouldCloseTyping(true).Build());
+        selection, SetSelectionData::Builder()
+                       .SetShouldCloseTyping(true)
+                       .SetShouldShowHandle(is_handle_visible)
+                       .Build());
     return true;
   }
 
diff --git a/third_party/WebKit/Source/core/editing/SelectionController.cpp b/third_party/WebKit/Source/core/editing/SelectionController.cpp
index 5f1e46c..0ac1de9 100644
--- a/third_party/WebKit/Source/core/editing/SelectionController.cpp
+++ b/third_party/WebKit/Source/core/editing/SelectionController.cpp
@@ -81,7 +81,6 @@
       .SetBaseAndExtent(ToPositionInDOMTree(selection_in_flat_tree.Base()),
                         ToPositionInDOMTree(selection_in_flat_tree.Extent()))
       .SetIsDirectional(selection_in_flat_tree.IsDirectional())
-      .SetIsHandleVisible(selection_in_flat_tree.IsHandleVisible())
       .Build();
 }
 
@@ -804,11 +803,12 @@
     original_base_in_flat_tree_ = PositionInFlatTreeWithAffinity();
   }
 
-  builder.SetIsHandleVisible(handle_visibility == HandleVisibility::kVisible);
   const SelectionInFlatTree& selection_in_flat_tree = builder.Build();
+  const bool should_show_handle =
+      handle_visibility == HandleVisibility::kVisible;
   if (Selection().ComputeVisibleSelectionInFlatTree() ==
           CreateVisibleSelection(selection_in_flat_tree) &&
-      Selection().IsHandleVisible() == selection_in_flat_tree.IsHandleVisible())
+      Selection().IsHandleVisible() == should_show_handle)
     return;
   Selection().SetSelection(
       ConvertToSelectionInDOMTree(selection_in_flat_tree),
@@ -817,6 +817,7 @@
           .SetShouldClearTypingStyle(true)
           .SetCursorAlignOnScroll(CursorAlignOnScroll::kIfNeeded)
           .SetGranularity(granularity)
+          .SetShouldShowHandle(should_show_handle)
           .Build());
 }
 
diff --git a/third_party/WebKit/Source/core/editing/SelectionEditor.cpp b/third_party/WebKit/Source/core/editing/SelectionEditor.cpp
index 9e5f4db..7d87872 100644
--- a/third_party/WebKit/Source/core/editing/SelectionEditor.cpp
+++ b/third_party/WebKit/Source/core/editing/SelectionEditor.cpp
@@ -181,7 +181,6 @@
     return;
   selection_ = SelectionInDOMTree::Builder()
                    .SetBaseAndExtent(new_base, new_extent)
-                   .SetIsHandleVisible(selection_.IsHandleVisible())
                    .Build();
   MarkCacheDirty();
 }
@@ -199,7 +198,6 @@
     return;
   selection_ = SelectionInDOMTree::Builder()
                    .SetBaseAndExtent(new_base, new_extent)
-                   .SetIsHandleVisible(selection_.IsHandleVisible())
                    .Build();
   MarkCacheDirty();
 }
diff --git a/third_party/WebKit/Source/core/editing/SelectionTemplate.cpp b/third_party/WebKit/Source/core/editing/SelectionTemplate.cpp
index 2cc9a11..bfbf41f8 100644
--- a/third_party/WebKit/Source/core/editing/SelectionTemplate.cpp
+++ b/third_party/WebKit/Source/core/editing/SelectionTemplate.cpp
@@ -14,8 +14,7 @@
     : base_(other.base_),
       extent_(other.extent_),
       affinity_(other.affinity_),
-      is_directional_(other.is_directional_),
-      is_handle_visible_(other.is_handle_visible_)
+      is_directional_(other.is_directional_)
 #if DCHECK_IS_ON()
       ,
       dom_tree_version_(other.dom_tree_version_)
@@ -39,8 +38,7 @@
   DCHECK_EQ(base_.GetDocument(), other.GetDocument()) << *this << ' ' << other;
   return base_ == other.base_ && extent_ == other.extent_ &&
          affinity_ == other.affinity_ &&
-         is_directional_ == other.is_directional_ &&
-         is_handle_visible_ == other.is_handle_visible_;
+         is_directional_ == other.is_directional_;
 }
 
 template <typename Strategy>
@@ -305,14 +303,6 @@
   return *this;
 }
 
-template <typename Strategy>
-typename SelectionTemplate<Strategy>::Builder&
-SelectionTemplate<Strategy>::Builder::SetIsHandleVisible(
-    bool is_handle_visible) {
-  selection_.is_handle_visible_ = is_handle_visible;
-  return *this;
-}
-
 template class CORE_TEMPLATE_EXPORT SelectionTemplate<EditingStrategy>;
 template class CORE_TEMPLATE_EXPORT
     SelectionTemplate<EditingInFlatTreeStrategy>;
diff --git a/third_party/WebKit/Source/core/editing/SelectionTemplate.h b/third_party/WebKit/Source/core/editing/SelectionTemplate.h
index 68470b87..c5984e9 100644
--- a/third_party/WebKit/Source/core/editing/SelectionTemplate.h
+++ b/third_party/WebKit/Source/core/editing/SelectionTemplate.h
@@ -64,7 +64,6 @@
 
     Builder& SetAffinity(TextAffinity);
     Builder& SetIsDirectional(bool);
-    Builder& SetIsHandleVisible(bool);
 
    private:
     SelectionTemplate selection_;
@@ -85,7 +84,6 @@
   TextAffinity Affinity() const { return affinity_; }
   bool IsCaret() const;
   bool IsDirectional() const { return is_directional_; }
-  bool IsHandleVisible() const { return is_handle_visible_; }
   bool IsNone() const { return base_.IsNull(); }
   bool IsRange() const;
 
@@ -116,7 +114,6 @@
   PositionTemplate<Strategy> extent_;
   TextAffinity affinity_ = TextAffinity::kDownstream;
   bool is_directional_ = false;
-  bool is_handle_visible_ = false;
 #if DCHECK_IS_ON()
   uint64_t dom_tree_version_;
 #endif
diff --git a/third_party/WebKit/Source/core/editing/SelectionTemplateTest.cpp b/third_party/WebKit/Source/core/editing/SelectionTemplateTest.cpp
index 7ad8a8f..04c09315 100644
--- a/third_party/WebKit/Source/core/editing/SelectionTemplateTest.cpp
+++ b/third_party/WebKit/Source/core/editing/SelectionTemplateTest.cpp
@@ -16,7 +16,6 @@
 
   EXPECT_EQ(TextAffinity::kDownstream, selection.Affinity());
   EXPECT_FALSE(selection.IsDirectional());
-  EXPECT_FALSE(selection.IsHandleVisible());
   EXPECT_TRUE(selection.IsNone());
   EXPECT_EQ(Position(), selection.Base());
   EXPECT_EQ(Position(), selection.Extent());
@@ -33,7 +32,6 @@
 
   EXPECT_EQ(TextAffinity::kDownstream, selection.Affinity());
   EXPECT_FALSE(selection.IsDirectional());
-  EXPECT_FALSE(selection.IsHandleVisible());
   EXPECT_FALSE(selection.IsNone());
   EXPECT_EQ(position, selection.Base());
   EXPECT_EQ(position, selection.Extent());
@@ -52,17 +50,9 @@
 
   EXPECT_EQ(TextAffinity::kDownstream, selection.Affinity());
   EXPECT_FALSE(selection.IsDirectional());
-  EXPECT_FALSE(selection.IsHandleVisible());
   EXPECT_FALSE(selection.IsNone());
   EXPECT_EQ(base, selection.Base());
   EXPECT_EQ(extent, selection.Extent());
 }
 
-TEST_F(SelectionTest, setIsHandleVisible) {
-  SelectionInDOMTree::Builder builder;
-  builder.SetIsHandleVisible(true);
-  const SelectionInDOMTree& selection = builder.Build();
-  EXPECT_TRUE(selection.IsHandleVisible());
-}
-
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/SetSelectionData.cpp b/third_party/WebKit/Source/core/editing/SetSelectionData.cpp
index 5c879dd..6bd5062 100644
--- a/third_party/WebKit/Source/core/editing/SetSelectionData.cpp
+++ b/third_party/WebKit/Source/core/editing/SetSelectionData.cpp
@@ -54,6 +54,12 @@
   return *this;
 }
 
+SetSelectionData::Builder& SetSelectionData::Builder::SetShouldShowHandle(
+    bool new_value) {
+  data_.should_show_handle_ = new_value;
+  return *this;
+}
+
 SetSelectionData::Builder& SetSelectionData::Builder::SetSetSelectionBy(
     SetSelectionBy new_value) {
   data_.set_selection_by_ = new_value;
diff --git a/third_party/WebKit/Source/core/editing/SetSelectionData.h b/third_party/WebKit/Source/core/editing/SetSelectionData.h
index 86340c9..142eb35 100644
--- a/third_party/WebKit/Source/core/editing/SetSelectionData.h
+++ b/third_party/WebKit/Source/core/editing/SetSelectionData.h
@@ -33,6 +33,7 @@
   bool DoNotClearStrategy() const { return do_not_clear_strategy_; }
   bool ShouldCloseTyping() const { return should_close_typing_; }
   bool ShouldClearTypingStyle() const { return should_clear_typing_style_; }
+  bool ShouldShowHandle() const { return should_show_handle_; }
 
  private:
   CursorAlignOnScroll cursor_align_on_scroll_ = CursorAlignOnScroll::kIfNeeded;
@@ -42,6 +43,7 @@
   SetSelectionBy set_selection_by_ = SetSelectionBy::kSystem;
   bool should_close_typing_ = false;
   bool should_clear_typing_style_ = false;
+  bool should_show_handle_ = false;
 };
 
 // This class is used for building |SelectionData| object.
@@ -61,6 +63,7 @@
   Builder& SetSetSelectionBy(SetSelectionBy);
   Builder& SetShouldCloseTyping(bool);
   Builder& SetShouldClearTypingStyle(bool);
+  Builder& SetShouldShowHandle(bool);
 
  private:
   SetSelectionData data_;
diff --git a/third_party/WebKit/Source/core/editing/VisibleSelection.cpp b/third_party/WebKit/Source/core/editing/VisibleSelection.cpp
index 960a44c4..5191c45c8 100644
--- a/third_party/WebKit/Source/core/editing/VisibleSelection.cpp
+++ b/third_party/WebKit/Source/core/editing/VisibleSelection.cpp
@@ -813,9 +813,7 @@
   const VisibleSelectionTemplate<Strategy> selection_wrapper1(selection1);
   const VisibleSelectionTemplate<Strategy> selection_wrapper2(selection2);
 
-  return selection_wrapper1.Start() == selection_wrapper2.Start() &&
-         selection_wrapper1.End() == selection_wrapper2.End() &&
-         selection_wrapper1.Base() == selection_wrapper2.Base() &&
+  return selection_wrapper1.Base() == selection_wrapper2.Base() &&
          selection_wrapper1.Extent() == selection_wrapper2.Extent();
 }
 
diff --git a/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp
index 04fafba9..c786b7ea 100644
--- a/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp
+++ b/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp
@@ -1210,13 +1210,13 @@
       handle_visibility_behavior == kShowSelectionHandle ||
       (handle_visibility_behavior == kPreserveHandleVisibility &&
        selection.IsHandleVisible());
-  selection.SetSelection(SelectionInDOMTree::Builder()
-                             .SetBaseAndExtent(range)
-                             .SetAffinity(VP_DEFAULT_AFFINITY)
-                             .SetIsHandleVisible(show_handles)
-                             .SetIsDirectional(false)
-                             .Build(),
-                         SetSelectionData());
+  selection.SetSelection(
+      SelectionInDOMTree::Builder()
+          .SetBaseAndExtent(range)
+          .SetAffinity(VP_DEFAULT_AFFINITY)
+          .SetIsDirectional(false)
+          .Build(),
+      SetSelectionData::Builder().SetShouldShowHandle(show_handles).Build());
 }
 
 WebString WebLocalFrameImpl::RangeAsText(const WebRange& web_range) {
diff --git a/third_party/WebKit/Source/core/html/HTMLAudioElement.h b/third_party/WebKit/Source/core/html/HTMLAudioElement.h
index b3bbb8b5..f3609b9a 100644
--- a/third_party/WebKit/Source/core/html/HTMLAudioElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLAudioElement.h
@@ -44,6 +44,11 @@
 
   bool IsHTMLAudioElement() const override { return true; }
 
+  // WebMediaPlayerClient implementation.
+  void MediaRemotingStarted(
+      const WebString& remote_device_friendly_name) override {}
+  void MediaRemotingStopped() override {}
+
  private:
   HTMLAudioElement(Document&);
 };
diff --git a/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp b/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
index 8988b2a..76e868b 100644
--- a/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
@@ -510,7 +510,8 @@
                         event_target.ToLocalDOMWindow()->document(), options));
 }
 
-void HTMLVideoElement::MediaRemotingStarted() {
+void HTMLVideoElement::MediaRemotingStarted(
+    const WebString& remote_device_friendly_name) {
   DCHECK(media_remoting_status_ == MediaRemotingStatus::kNotStarted);
   media_remoting_status_ = MediaRemotingStatus::kStarted;
   if (!remoting_interstitial_) {
@@ -519,7 +520,7 @@
     shadow_root.InsertBefore(remoting_interstitial_, shadow_root.firstChild());
     HTMLMediaElement::AssertShadowRootChildren(shadow_root);
   }
-  remoting_interstitial_->Show();
+  remoting_interstitial_->Show(remote_device_friendly_name);
 }
 
 void HTMLVideoElement::MediaRemotingStopped() {
diff --git a/third_party/WebKit/Source/core/html/HTMLVideoElement.h b/third_party/WebKit/Source/core/html/HTMLVideoElement.h
index 3743a5b..e399d28 100644
--- a/third_party/WebKit/Source/core/html/HTMLVideoElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLVideoElement.h
@@ -147,7 +147,7 @@
   }
   void DisableMediaRemoting();
 
-  void MediaRemotingStarted() final;
+  void MediaRemotingStarted(const WebString& remote_device_friendly_name) final;
   void MediaRemotingStopped() final;
   WebMediaPlayer::DisplayType DisplayType() const final;
 
diff --git a/third_party/WebKit/Source/core/html/media/MediaRemotingElements.cpp b/third_party/WebKit/Source/core/html/media/MediaRemotingElements.cpp
index 8c1f4c2..a7e60b1 100644
--- a/third_party/WebKit/Source/core/html/media/MediaRemotingElements.cpp
+++ b/third_party/WebKit/Source/core/html/media/MediaRemotingElements.cpp
@@ -87,9 +87,6 @@
     MediaRemotingInterstitial& interstitial)
     : HTMLDivElement(interstitial.GetDocument()) {
   SetShadowPseudoId(AtomicString("-internal-media-remoting-cast-text-message"));
-  setInnerText(interstitial.GetVideoElement().GetLocale().QueryString(
-                   WebLocalizedString::kMediaRemotingCastText),
-               ASSERT_NO_EXCEPTION);
 }
 
 // ----------------------------
diff --git a/third_party/WebKit/Source/core/html/media/MediaRemotingInterstitial.cpp b/third_party/WebKit/Source/core/html/media/MediaRemotingInterstitial.cpp
index 073fed8..13877d3 100644
--- a/third_party/WebKit/Source/core/html/media/MediaRemotingInterstitial.cpp
+++ b/third_party/WebKit/Source/core/html/media/MediaRemotingInterstitial.cpp
@@ -8,6 +8,8 @@
 #include "core/html/HTMLImageElement.h"
 #include "core/html/HTMLVideoElement.h"
 #include "core/html/media/MediaRemotingElements.h"
+#include "platform/text/PlatformLocale.h"
+#include "public/platform/WebLocalizedString.h"
 
 namespace {
 
@@ -44,8 +46,21 @@
   AppendChild(exit_button_);
 }
 
-void MediaRemotingInterstitial::Show() {
+void MediaRemotingInterstitial::Show(
+    const WebString& remote_device_friendly_name) {
   DCHECK(!should_be_visible_);
+  if (remote_device_friendly_name.IsEmpty()) {
+    cast_text_message_->setInnerText(
+        GetVideoElement().GetLocale().QueryString(
+            WebLocalizedString::kMediaRemotingCastToUnknownDeviceText),
+        ASSERT_NO_EXCEPTION);
+  } else {
+    cast_text_message_->setInnerText(
+        GetVideoElement().GetLocale().QueryString(
+            WebLocalizedString::kMediaRemotingCastText,
+            remote_device_friendly_name),
+        ASSERT_NO_EXCEPTION);
+  }
   if (toggle_insterstitial_timer_.IsActive())
     toggle_insterstitial_timer_.Stop();
   should_be_visible_ = true;
diff --git a/third_party/WebKit/Source/core/html/media/MediaRemotingInterstitial.h b/third_party/WebKit/Source/core/html/media/MediaRemotingInterstitial.h
index 96624dc..c638c46 100644
--- a/third_party/WebKit/Source/core/html/media/MediaRemotingInterstitial.h
+++ b/third_party/WebKit/Source/core/html/media/MediaRemotingInterstitial.h
@@ -31,8 +31,11 @@
  public:
   explicit MediaRemotingInterstitial(HTMLVideoElement&);
 
-  // Show/Hide Media Remoting interstitial.
-  void Show();
+  // Show/Hide Media Remoting interstitial. |remote_device_friendly_name| will
+  // be shown in the UI to indicate which device the content is rendered on. An
+  // empty name indicates an unknown remote device. A default message will be
+  // shown in this case.
+  void Show(const WebString& remote_device_friendly_name);
   void Hide();
 
   void OnPosterImageChanged();
diff --git a/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp b/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp
index e8feec96a..308d817 100644
--- a/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp
+++ b/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp
@@ -311,7 +311,8 @@
       DispatchEvent(Event::Create(EventTypeNames::connecting));
       if (RuntimeEnabledFeatures::NewRemotePlaybackPipelineEnabled() &&
           media_element_->IsHTMLVideoElement()) {
-        toHTMLVideoElement(media_element_)->MediaRemotingStarted();
+        // TODO(xjz): Pass the remote device name.
+        toHTMLVideoElement(media_element_)->MediaRemotingStarted(WebString());
       }
       break;
     case WebRemotePlaybackState::kConnected:
diff --git a/third_party/WebKit/Source/platform/wtf/text/AtomicString.h b/third_party/WebKit/Source/platform/wtf/text/AtomicString.h
index efcac87..a1bb651 100644
--- a/third_party/WebKit/Source/platform/wtf/text/AtomicString.h
+++ b/third_party/WebKit/Source/platform/wtf/text/AtomicString.h
@@ -185,6 +185,7 @@
   AtomicString LowerASCII() const;
   AtomicString UpperASCII() const;
 
+  // See comments in WTFString.h.
   int ToInt(bool* ok = 0) const { return string_.ToInt(ok); }
   double ToDouble(bool* ok = 0) const { return string_.ToDouble(ok); }
   float ToFloat(bool* ok = 0) const { return string_.ToFloat(ok); }
diff --git a/third_party/WebKit/Source/platform/wtf/text/WTFString.h b/third_party/WebKit/Source/platform/wtf/text/WTFString.h
index 3011dce..ba66eab 100644
--- a/third_party/WebKit/Source/platform/wtf/text/WTFString.h
+++ b/third_party/WebKit/Source/platform/wtf/text/WTFString.h
@@ -373,12 +373,38 @@
 
   // Convert the string into a number.
 
+  // The following ToFooStrict functions accept:
+  //  - leading '+'
+  //  - leading Unicode whitespace
+  //  - trailing Unicode whitespace
+  //  - no "-0" (ToUIntStrict and ToUInt64Strict)
+  //  - no out-of-range numbers which the resultant type can't represent
+  //
+  // If the input string is not acceptable, 0 is returned and |*ok| becomes
+  // |false|.
+  //
+  // We can use these functions to implement a Web Platform feature only if the
+  // input string is already valid according to the specification of the
+  // feature.
   int ToIntStrict(bool* ok = 0) const;
   unsigned ToUIntStrict(bool* ok = 0) const;
   unsigned HexToUIntStrict(bool* ok) const;
   int64_t ToInt64Strict(bool* ok = 0) const;
   uint64_t ToUInt64Strict(bool* ok = 0) const;
 
+  // The following ToFoo functions accept:
+  //  - leading '+'
+  //  - leading Unicode whitespace
+  //  - trailing garbage
+  //  - no "-0" (ToUInt and ToUInt64)
+  //  - no out-of-range numbers which the resultant type can't represent
+  //
+  // If the input string is not acceptable, 0 is returned and |*ok| becomes
+  // |false|.
+  //
+  // We can use these functions to implement a Web Platform feature only if the
+  // input string is already valid according to the specification of the
+  // feature.
   int ToInt(bool* ok = 0) const;
   unsigned ToUInt(bool* ok = 0) const;
   int64_t ToInt64(bool* ok = 0) const;
@@ -400,6 +426,13 @@
   // A small absolute numbers which a double/float can't represent is accepted,
   // and 0 is returned
   //
+  // If the input string is not acceptable, 0.0 is returned and |*ok| becomes
+  // |false|.
+  //
+  // We can use these functions to implement a Web Platform feature only if the
+  // input string is already valid according to the specification of the
+  // feature.
+  //
   // FIXME: Like the strict functions above, these give false for "ok" when
   // there is trailing garbage.  Like the non-strict functions above, these
   // return the value when there is trailing garbage.  It would be better if
diff --git a/third_party/WebKit/public/platform/WebLocalizedString.h b/third_party/WebKit/public/platform/WebLocalizedString.h
index e98a86ee..0809ecd 100644
--- a/third_party/WebKit/public/platform/WebLocalizedString.h
+++ b/third_party/WebKit/public/platform/WebLocalizedString.h
@@ -93,6 +93,7 @@
     kInputElementAltText,
     kMediaRemotingDisableText,
     kMediaRemotingCastText,
+    kMediaRemotingCastToUnknownDeviceText,
     kMissingPluginText,
     kMultipleFileUploadText,
     kOtherColorLabel,
diff --git a/third_party/WebKit/public/platform/WebMediaPlayerClient.h b/third_party/WebKit/public/platform/WebMediaPlayerClient.h
index 237d00e..880b58f 100644
--- a/third_party/WebKit/public/platform/WebMediaPlayerClient.h
+++ b/third_party/WebKit/public/platform/WebMediaPlayerClient.h
@@ -105,7 +105,7 @@
   // After the monitoring is activated, the client will inform WebMediaPlayer
   // when the element becomes/stops being the dominant visible content by
   // calling WebMediaPlayer::BecameDominantVisibleContent(bool).
-  virtual void ActivateViewportIntersectionMonitoring(bool) {}
+  virtual void ActivateViewportIntersectionMonitoring(bool) = 0;
 
   // Returns whether the media element is in an autoplay muted state.
   virtual bool IsAutoplayingMuted() = 0;
@@ -117,8 +117,12 @@
   virtual WebMediaPlayer::TrackId GetSelectedVideoTrackId() = 0;
 
   // Informs that media starts/stops being rendered and played back remotely.
-  virtual void MediaRemotingStarted() {}
-  virtual void MediaRemotingStopped() {}
+  // |remote_device_friendly_name| will be shown in the remoting UI to indicate
+  // which device the content is rendered on. An empty name indicates an unknown
+  // remote device. A default message will be shown in this case.
+  virtual void MediaRemotingStarted(
+      const WebString& remote_device_friendly_name) = 0;
+  virtual void MediaRemotingStopped() = 0;
 
   // Returns whether the media element has native controls. It does not mean
   // that the controls are currently visible.
diff --git a/ui/aura/test/test_screen.cc b/ui/aura/test/test_screen.cc
index 72daa99..2f16add 100644
--- a/ui/aura/test/test_screen.cc
+++ b/ui/aura/test/test_screen.cc
@@ -68,6 +68,12 @@
   host_->OnHostResizedInPixels(bounds_in_pixel.size());
 }
 
+void TestScreen::SetColorSpace(const gfx::ColorSpace& color_space) {
+  display::Display display(GetPrimaryDisplay());
+  display.set_color_space(color_space);
+  display_list().UpdateDisplay(display);
+}
+
 void TestScreen::SetDisplayRotation(display::Display::Rotation rotation) {
   display::Display display(GetPrimaryDisplay());
   gfx::Rect bounds_in_pixel(display.GetSizeInPixel());
diff --git a/ui/aura/test/test_screen.h b/ui/aura/test/test_screen.h
index ce60e331..7f625d3 100644
--- a/ui/aura/test/test_screen.h
+++ b/ui/aura/test/test_screen.h
@@ -12,6 +12,7 @@
 #include "ui/display/screen_base.h"
 
 namespace gfx {
+class ColorSpace;
 class Insets;
 class Rect;
 class Transform;
@@ -35,6 +36,7 @@
   WindowTreeHost* CreateHostForPrimaryDisplay();
 
   void SetDeviceScaleFactor(float device_scale_fator);
+  void SetColorSpace(const gfx::ColorSpace& color_space);
   void SetDisplayRotation(display::Display::Rotation rotation);
   void SetUIScale(float ui_scale);
   void SetWorkAreaInsets(const gfx::Insets& insets);
diff --git a/ui/aura/window_tree_host.cc b/ui/aura/window_tree_host.cc
index a1f8630..1e915d1f 100644
--- a/ui/aura/window_tree_host.cc
+++ b/ui/aura/window_tree_host.cc
@@ -356,7 +356,7 @@
   if (metrics & DisplayObserver::DISPLAY_METRIC_COLOR_SPACE) {
     display::Screen* screen = display::Screen::GetScreen();
     if (compositor_ &&
-        display.id() != screen->GetDisplayNearestView(window()).id()) {
+        display.id() == screen->GetDisplayNearestView(window()).id()) {
       compositor_->SetDisplayColorSpace(display.color_space());
     }
   }
diff --git a/ui/aura/window_tree_host_unittest.cc b/ui/aura/window_tree_host_unittest.cc
index 735d26d..3c4900bd7 100644
--- a/ui/aura/window_tree_host_unittest.cc
+++ b/ui/aura/window_tree_host_unittest.cc
@@ -86,4 +86,12 @@
   host()->RemoveEventRewriter(&event_rewriter);
 }
 
+TEST_F(WindowTreeHostTest, ColorSpace) {
+  EXPECT_EQ(gfx::ColorSpace::CreateSRGB(),
+            host()->compositor()->output_color_space());
+  test_screen()->SetColorSpace(gfx::ColorSpace::CreateSCRGBLinear());
+  EXPECT_EQ(gfx::ColorSpace::CreateSCRGBLinear(),
+            host()->compositor()->output_color_space());
+}
+
 }  // namespace aura
diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h
index 573e654..95d086f 100644
--- a/ui/compositor/compositor.h
+++ b/ui/compositor/compositor.h
@@ -234,6 +234,11 @@
   // compositing layers on.
   float device_scale_factor() const { return device_scale_factor_; }
 
+  // The color space of the device that this compositor is being displayed on.
+  const gfx::ColorSpace& output_color_space() const {
+    return output_color_space_;
+  }
+
   // Where possible, draws are scissored to a damage region calculated from
   // changes to layer properties.  This bypasses that and indicates that
   // the whole frame needs to be drawn.